Как найти прямоугольник различия между двумя изображениями

У меня есть два изображения тот же размер. Что лучший способ состоит в том, чтобы найти прямоугольником, по которому они отличаются. Очевидно, я мог пройти изображение 4 раза в различных направлениях, но я задаюсь вопросом, существует ли более легкий путь.

Пример:

first image

second image

difference

5
задан Glorfindel 24 July 2019 в 07:40
поделиться

4 ответа

Я не думаю, что есть более простой способ.

На самом деле для этого нужно всего лишь (очень) несколько строк кода, так что если вы не найдете библиотеку, которая сделает это за вас напрямую, вы не найдете более короткого способа.

2
ответ дан 14 December 2019 в 08:45
поделиться

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

4
ответ дан 14 December 2019 в 08:45
поделиться

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

Распространенной библиотекой, используемой для такого рода перебора битов, является OpenCV, в ней используются специальные инструкции ЦП, позволяющие сделать это быстро. Для него доступно несколько .NET-оболочек, Emgu - одна из них .

1
ответ дан 14 December 2019 в 08:45
поделиться

Я не думаю, что может быть что-нибудь лучше, чем исчерпывающий поиск с каждой стороны по очереди первую точку различия в этом направлении. Если, конечно, вы не знаете факт, который каким-то образом ограничивает набор точек различия.

0
ответ дан 14 December 2019 в 08:45
поделиться