вычисление корреляции между двумя (двоичными) изображениями - PullRequest
0 голосов
/ 05 ноября 2011

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

Предположим, шаблонное изображение имеет размер 3x2, а большое изображение - 20x20. То, что я сделал в первую очередь, это серые изображения. Затем я получил среднее значение серого (опять же для обоих). После этого я проверил пиксель за пикселем, является ли текущий пиксель ниже или выше среднего. Если он ниже, то я покрасил пиксель в черный цвет, если он выше, тогда пиксель будет белым. Так что в основном это оставляет меня с двоичным изображением. Где 1 == белый и 0 == черный.

Двоичное значение моего шаблона изображения: 101010

Затем на большом изображении я начинаю сканировать каждый пиксель, чтобы увидеть, соответствует ли он шаблону. Поэтому я начинаю с x = 0, y = 0 на большом изображении и сравниваю первые три пикселя на оси X из первых двух строк на оси Y с теми, что на шаблонном изображении. Двоичное значение для этого: 111010

Итак, следующий шаг - проверить корреляцию, верно? Теперь вот сложная часть для меня, потому что я не уверен, правильно ли я делаю. Но вот что я придумала:

101010 (шаблонное изображение)

Сумма = 3

Среднее = 0,5

Стандартное отклонение = 4,2

111010 (большое изображение, первый раздел)

Сумма = 4

Среднее = 0,66

Стандартное отклонение = 2,82

Затем я попытался вычислить корреляцию следующим образом:

enter image description here

Что дало мне следующий результат: r = -0,04

Поскольку это число совсем не близко к 1, это означает, что нет тесной корреляции, верно? Или, может быть, мне нужно сравнить его с n-2 = критическим значением. Так что в этом случае 6-2 = 4. Поскольку он не близок к 4, это также означает, что корреляции нет, верно?

И что это значит, когда оно близко к -1, значит ли это, что корреляция еще меньше?

И самое главное, мои расчеты верны ..? Или я все еще что-то упускаю .. ??

1 Ответ

1 голос
/ 05 ноября 2011

Я еще раз взглянул на ваш вопрос. Я думаю, что вы путаете взаимную корреляцию с сверткой .

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...