如果矩形的数量通常很小,并且矩形本身很小,您可以找出不同的行和列,用它来得出可能不同的矩形......
想象一下具有以下像素值的图像......
0 0 0 1 1 1 2 2 3 3
0 0 1 1 0 0 1 1 2 2
0 0 1 1 0 0 0 1 1 2
0 0 1 1 0 0 0 1 1 2
0 1 1 0 0 3 0 0 1 1
0 1 1 0 0 3 0 0 1 1
0 0 1 1 0 0 0 1 1 2
0 0 1 1 0 0 0 1 1 2
0 0 0 1 1 1 1 1 0 2
2 2 2 2 2 1 1 2 2 2
...和...
0 0 0 1 1 1 2 2 3 3
0 1 1 1 0 0 1 1 2 2
0 1 2 4 0 0 0 1 1 2
0 1 2 3 0 0 0 1 1 2
0 1 1 0 0 3 0 0 1 1
0 1 1 0 0 3 0 0 1 1
0 0 1 1 0 3 3 2 1 2
0 0 1 1 0 3 3 2 1 2
0 0 0 1 1 2 2 2 0 2
2 2 2 2 2 1 1 2 2 2
首先,您会想出一个掩码,其中的像素行、行和列有差异......
0 1 1 1 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 1 1 1 0 0
1 0 0 0 0 0 1 1 1 0 0
1 0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0
行和列数据为我们提供了关于可能存在矩形的位置的指导...
0 1 1 1 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0
1 0 ? ? ? 0 ? ? ? 0 0
1 0 ? ? ? 0 ? ? ? 0 0
1 0 ? ? ? 0 ? ? ? 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
1 0 ? ? ? 0 ? ? ? 0 0
1 0 ? ? ? 0 ? ? ? 0 0
1 0 ? ? ? 0 ? ? ? 0 0
0 0 0 0 0 0 0 0 0 0 0
遍历每个可能的矩形并确定是否有变化,然后对它们进行编码。如果需要,您可以添加其他散列轴而不是行和列...就像您可以将图片细分为区域并散列区域是否有任何更改,然后使用散列来决定区域是否需要被编码。您可以执行任意次数并拥有一个相当快速的算法,该算法也可以生成小文件。
无论如何,我认为你最好的选择是建立一个已更改的地图,并使用聚合来告诉你是否已更改块来指导你的决策。如果你收集了足够多的这些,你甚至可以创建几个不同的算法,在不同的情况下做得很好,然后将它们放入责任链中,根据你构建的地图的特征和哈希值来决定使用哪种算法。