【问题标题】:Find updated rectangles in image在图像中查找更新的矩形
【发布时间】:2012-10-25 06:56:29
【问题描述】:

我需要找出两个图像之间更新了哪些矩形区域。例如,我有这些图片:

first http://storage.thelogin.ru/stackoverflow/find-updated-rectangles-in-image/1.pngsecond 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 和类似的软件。

【问题讨论】:

    标签: algorithm image-processing graphics


    【解决方案1】:

    就实际找到已更改的区域而言,正如 ImageMagick 为您所做的那样,您可以逐个像素地计算差异(例如XOR)。差值为 0 的区域没有变化。

    从您的问题中不清楚绘画本身是否缓慢或只是重新绘画数据的传输。也不清楚在传输的另一端可以进行哪种编码/解码。您是否必须按照您指定的方式发送数据,或者您可以根据需要以其他方式对其进行编码吗?

    您的数据包每个矩形有 8 个字节的开销“(魔术字一个字节,校验和一个字节,区域坐标六个字节,每个像素两个字节)”。我从每个像素的两个字节中获取颜色深度为 16 位?因此,由于开销的原因,您勾勒出的一些最小矩形实际上比将它们与其他矩形组合并在未更新区域上重新发送一些数据要花费更多。

    寻找每个都有开销的矩形的实际问题类似于 ITA Software 提出的“草莓地”招聘问题。原链接失效了,但是here is someone's solution with problem description.

    在 57600 波特率下,您可以每秒发送 7200 字节,这将是 3600 像素,每个像素两个字节。作为一个正方形,这是一个微不足道的 60x60。您在示例中肯定已经概述了更多内容,这还不包括开销。

    接收端显示器的刷新率也需要考虑。如果显示器每秒刷新 60 次,而您每秒只能发送一个 60x60 方格,这会是什么样子?

    需要考虑的事项:

    • 降低颜色深度
    • 运行长度编码每条扫描线的像素差异
    • 尝试对每个区域进行更雄心勃勃的压缩,但要注意开销
    • 发送非图形数据,让接收方计算图形(例如,在本例中,发送已更改的文本、更新的时间等,并让接收方绘制进度条等)
    • 放弃这种疯狂

    【讨论】:

    • 绘图设备是STM32F103 MCU,软件FSMC连接LCD,所以一切都不是那么快。 RLE 的想法非常好:这将提高传输和绘画速度。谢谢你的链接,这正是我需要的!
    • 我不知道这意味着什么,但我很高兴能帮上忙!将有关“草莓田”的链接移至答案正文,因为它似乎适用于您。
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2015-09-05
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多