Если количество прямоугольников, как правило, мало, а сами прямоугольники невелики, вы можете различать строки и столбцы с различиями, используйте их для создания прямоугольников, которые могут отличаться ...
Представьте изображения со следующими значениями пикселей ...
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
Переберите каждый из возможных прямоугольников и решите, есть ли изменения, а затем закодируйте их. Вы можете добавить другие оси хеширования вместо строк и столбцов, если вам нужно ... например, вы можете разделить изображение на регионы и хэшировать, есть ли у региона какие-либо изменения, а затем использовать хеш, чтобы решить, нужен ли регион быть закодирован. То, что вы можете делать произвольное количество раз и иметь достаточно быстрый алгоритм, который также производит небольшие файлы.
В любом случае, я думаю, что вам лучше всего построить карту того, что было изменено, и использовать агрегаты, которые сообщают вам, были ли изменены блоки, чтобы направлять ваше принятие решений. Если вы соберете их достаточно, вы можете даже создать пару разных алгоритмов, которые будут хорошо работать при разных обстоятельствах, а затем поместить их в цепочку ответственности, которая решит, какой алгоритм использовать, основываясь на характеристиках карты и хешах, которые вы создали. 1017 *