我需要找到两个图像之间更新的矩形区域。例如,我有这些图像:
first http://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/1.png second http://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/2.png
Imagemagick的compare
告诉我这些像素已更新:
compare http://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/3.png
所以我需要重新绘制这些区域(已经概述了第一个区域):
compare http://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/4.png
重绘是通过慢速连接(57600波特)完成的,因此第一优先级是数据大小(魔术字一个字节,校验和一个字节,区域坐标六个字节,每个像素两个字节)。我可以使用哪种算法来查找这些区域?我认为,类似的东西在vnc和类似的软件中使用。
答案 0 :(得分:4)
就像ImageMagick为您所做的那样,实际找到已发生变化的区域时,您可以计算逐像素差异(例如XOR
)。相差0的区域没有变化。
从你的问题不清楚这幅画本身是慢还是只是重画数据的传递。还不清楚在传输的另一端可以进行何种编码/解码。您是否必须按照指定的方式发送数据,或者如果您愿意,可以用其他方式对数据进行编码吗?
您的数据包每个矩形有8字节的开销“(魔术字一个字节,校验和一个字节,区域坐标六个字节,每个像素两个字节)”。我从每个像素的两个字节中得到它,颜色深度是16位?因此,由于开销,您概述的一些最小矩形实际上比将它们与其他矩形组合并在非更新区域上重新发送一些数据要花费更多。
找到每个都有开销的矩形的实际问题类似于ITA Software提出的“Strawberry Fields”招聘问题。原始链接已失效,但here is someone's solution with problem description.
在57600波特,你可以发送每秒7200字节,即每像素两个字节为3600像素。作为一个正方形,这是一个60x60。你肯定在你的例子中概述了更多,这不算开销。
还需要考虑接收端监视器的刷新率。如果显示器每秒刷新60次并且你每秒只能发送一个60x60平方,这看起来会怎样?
需要考虑的事项: