【问题标题】:How can I get the rectangular areas of difference between two images?如何获得两个图像之间的矩形差异区域?
【发布时间】:2012-03-19 21:05:45
【问题描述】:

我觉得我在图像比较方面遇到了一个非常典型的问题,我的谷歌没有透露答案。

我想每隔 X 秒传输一次桌面静止图像。目前,如果新旧图像仅相差一个像素,我们就会发送新图像。很多时候只有很小的变化,比如时钟或图标,如果我可以将更改的部分发送到服务器并更新图像(带宽更少),那就太好了。

我设想的计划是获得一个已更改区域的矩形。例如,如果时钟发生变化,屏幕捕获包含变化的最小矩形,并将其连同其 (x, y) 坐标一起发送到服务器。然后,服务器将通过在指定坐标处覆盖​​矩形来更新旧图像。

是否有任何算法或库可以做到这一点?我不希望它是完美的,假设我将始终发送一个包含所有更改的矩形(即使许多较小的矩形会更有效)。

我的另一个想法是获取保存为一系列转换的新旧图像之间的差异。然后,我只需将一系列转换发送到服务器,然后将其应用于旧图像以获取新图像。不确定这是否可能,只是一个想法。

有什么想法吗?我可以使用的库?

【问题讨论】:

  • 您手动滚动这个,而不是使用VNC 或其他什么?
  • 我们不能传输视频或使用 VNC 等有一个非常好的理由,必须是一系列图像。

标签: algorithm image image-processing comparison image-comparison


【解决方案1】:

将前一帧的每个像素与下一帧的每个像素进行比较,并跟踪哪些像素发生了变化?

由于您只是在寻找一个包含所有更改的框,因此您实际上只需要跟踪 min-x, min-y (不一定来自同一个像素), max-x 和 max-y。这四个值将为您提供矩形的边缘。


请注意,这项工作(比较两个帧) 应该真正卸载到 GPU,这可以比 CPU 快得多。

另请注意,您尝试做的本质上是一种本土的无损流视频压缩算法。使用现有库中的一个不仅会更容易,而且可能会更高效。

【讨论】:

    【解决方案2】:

    这是从算法的角度来看的。不确定这是否更容易实现。

    基本上对两个图像进行异或并使用任何信息论算法进行压缩(霍夫曼编码?)

    【讨论】:

      【解决方案3】:

      我知道回复很晚,但我今天发现了这个问题。

      我对图像差异进行了一些分析,但代码是为 java 编写的。请查看以下可能会有所帮助的链接

      How to find rectangle of difference between two images

      代码发现差异并将矩形保存在链接列表中。您可以使用包含矩形的链表将差异修补到基础图像上。

      干杯!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-05
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多