Сравнение изображений. Быстрый алгоритм графического процессора.

Я хотел бы знать, как лучше всего сравнивать 2 изображения RGB. Я хотел бы либо найти список ограничительных рамок для разницы. Или единый ограничивающий прямоугольник для всех изменений. Любой в порядке.

Скажем, я сравниваю 2 экрана рабочего стола, и на одном из изображений время в правом нижнем углу отличается, а значок переместился в верхний левый угол экрана.

Алгоритм может найти ограничивающие рамки значка, который был перемещен, и число (секунда), которое изменилось, что дает мне 2 поля, содержащие изменения. Или он может генерировать логику типа MIN/MAX и генерировать одно поле, включая объединение эти 2 изменения. В этом случае поле будет размером во весь экран, как мой пример для наихудшего сценария. (Я знаю, что можно объединить коробки и получить одну объединенную коробку). Но, возможно, есть более быстрый алгоритм, чем поиск каждой коробки отдельно. Вот почему алгоритм, который находит объединение, также в порядке.

Я сравнил пиксель за пикселем и нашел минимальное максимальное значение для всего экрана, где изменения существуют во вложенном цикле, подобно моде.
Я даже пробовал это на OPENCL, но скорость для изображений 4K неприемлема, поскольку она 0^2.

Есть ли поисковый алгоритм, который мог бы ускорить этот поиск на экране. Может быть, представить это в виде графика. Что-то вроде A* или какого-то другого эвристического поиска?

Может быть, уменьшить масштаб и выполнить поиск, а затем второй поиск только в разделе, в котором обнаружено изменение?

Может конвертация в YUV поможет?


person Evren Bingøl    schedule 24.06.2019    source источник


Ответы (1)


Самое быстрое решение, которое я могу придумать. Преобразуйте изображение в оттенки серого, выполните xor на двух изображениях, затем используйте алгоритм кластеризации, чтобы найти ограничивающие рамки.

person szatmary    schedule 25.06.2019