1

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

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

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

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

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

有任何想法吗?我可以使用的库?

4

3 回答 3

4

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

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


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

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

于 2012-03-19T21:44:32.507 回答
0

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

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

如何找到两个图像之间的差异矩形

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

干杯!

于 2013-11-26T18:03:31.227 回答
0

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

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

于 2012-03-20T00:10:10.957 回答