gpt4 book ai didi

screenshot - 屏幕截图上的运动检测

转载 作者:行者123 更新时间:2023-12-04 14:04:22 27 4
gpt4 key购买 nike

我想知道是否有一种快速算法可以检测在两个连续屏幕截图之间移动的部分。该算法应该采用两张图像并输出一个图像中的一组(矩形)区域和一个描述匹配区域在另一张图像中的位置的向量。

我想将它用于为屏幕捕获而简化的无损视频压缩算法。我认为这使得用例与通常的运动检测应用略有不同:

  • 图片是截图。不太可能存在任何伪影或图像噪声
  • 如果图像的一部分移动,它会按像素移动。移动部分的像素差异通常小于 2%
  • 移动的区域通常很大且呈矩形

  • 由于视频压缩管道还有其他步骤并且应该实时发生,因此运动检测应该很快。

    有什么有用的吗?

    最佳答案

    我有一些想法,以及您可以考虑的可能可行的解决方案。

    首先,考虑跟踪单个像素增量并仅传输/存储那些。典型的交互式 session 通常只涉及 UI 更改的很小部分;对于长时间使用计算机的 session ,移动或调整窗口大小往往不太常见(据传闻)。这可以有效地捕获简单的内容,例如输入的文本、光标移动和小的 UI 更新,而无需进行大量额外工作。

    您还可以考虑尝试在较低级别 Hook 操作系统,以获得例如像素的显示列表,甚至(最佳)“损坏”矩形列表。例如,Mac OS X 的 Quartz 合成器可以为您提供此信息。这可以帮助您快速缩小要更新的范围,并且在理想情况下,可以有效地表示屏幕本身。

    如果您可以查询操作系统(窗口管理器)关于窗口的信息,您可以为每个可见窗口存储单独的数据流(像素增量),然后应用简单的显示列表方法在播放期间“渲染”它们。然后,识别移动窗口是微不足道的,因为您可以简单地比较显示列表。

    如果您可以查询操作系统关于光标位置的信息,您可以使用光标移动来快速估计移动增量,因为光标移动通常与屏幕上的对象移动(例如移动窗口、图标、拖动对象等)密切相关。这使您可以避免处理图像以确定运动增量。

    关于可能的解决方案(或万一您仍然无法通过上述方法确定移动增量的最后手段):我们实际上可以相当轻松地处理单个移动矩形的(非常常见的)情况。为帧中发生变化的所有像素制作一个蒙版。识别掩码中最大的连接组件。如果它近似于一个矩形,那么你可以假设它代表一个移动的区域。窗口移动完全正交(例如完全在 x 或 y 方向),在这种情况下总增量看起来像一个稍大的矩形,或者窗口对角移动,在这种情况下总增量将有一个 8 边形状。无论哪种方式,您都可以估计运动矢量,并通过区分区域来验证这一点。请注意,这种处理故意忽略了您必须考虑的细节,例如在窗口附近独立移动的像素,或看起来没有变化的区域(例如窗口中的大块纯色)。实际的实现必须处理上述所有问题。

    最后,我会查看有关实时运动估计的现有文献。在优化运动估计和补偿方面已经做了很多工作,例如视频编码,因此如果您发现上述方法不足,您也可以使用该工作。

    关于screenshot - 屏幕截图上的运动检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11976736/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com