Мой босс и я не согласны с тем, что происходит с методом CV_TM_CCORR_NORMED для matchTemplate(); в openCV.
Не могли бы вы объяснить, что здесь происходит, особенно аспект квадратного корня этого уравнения.
Мой босс и я не согласны с тем, что происходит с методом CV_TM_CCORR_NORMED для matchTemplate(); в openCV.
Не могли бы вы объяснить, что здесь происходит, особенно аспект квадратного корня этого уравнения.
Корреляция — это сходство двух сигналов, векторов и т. д. Предположим, у вас есть векторы
template=[0 1 0 0 1 0 ] A=[0 1 1 1 0 0] B =[ 1 0 0 0 0 1]
если вы выполняете корреляцию между векторами и шаблоном, чтобы получить, какой из них более похож, вы увидите, что A
похож на template
больше, чем B
, потому что 1 размещены в соответствующих индексах. Это означает, что чем больше ненулевых элементов соответствует, тем больше корреляция между векторами.
В изображениях в градациях серого значения находятся в диапазоне 0-255. Давайте сделаем это:
template=[10 250 36 30] A=[10 250 36 30] B=[220 251 240 210]
.
Здесь ясно, что A
такое же, как template
, но корреляция между B
и template
больше, чем A
и template
. В нормированной кросс-корреляционной части знаменателя часть формулы решает эту проблему. Если вы проверите приведенную ниже формулу, то увидите, что знаменатель для B(x)template
будет намного больше, чем A(x)template
.
Формула, указанная в документации opencv:
На практике, если вы используете взаимную корреляцию, если в части изображения есть яркость, корреляция между этой частью и вашим шаблоном будет больше. Но если вы используете нормализованную взаимную корреляцию, вы получите лучший результат.
Подумайте, формула такова:
Перед умножением поэлементно вы нормализуете две матрицы. Разделив корень квадрата из суммы всех элементов в матрице, вы удалите выигрыш; если все элементы большие, то делитель большой.
Думайте, что вы делите сумму всех элементов в матрице. Если значение пикселя находится в более яркой области, то значения пикселей его соседей будут высокими. Путем деления суммы его соседства вы удаляете эффект освещения. Это для обработки изображений, где значения пикселей всегда положительны. Но для 2D-матрицы могут быть отрицательные значения, поэтому при возведении в квадрат игнорируется знак.