Что означают TM_CCORR и TM_CCOEFF в opencv? - PullRequest
1 голос
/ 02 апреля 2019

Что означают TM_CCORR и TM_CCOEFF в opencv? Я обнаружил, что TM_CCORR обозначает коэффициент корреляции. Однако TM_CCOEFF также должен быть коэффициентом корреляции из-за его наименования.

Знаете ли вы, что обозначают аббревиатуры?

TM_SQDIFF = T emplate M atching Sq uare Diff erence

TM_CCOEFF = T emplate M atching C orrelation Coeff icient?

TM_CCORR = T emplate M atching Corr восторг ???

1 Ответ

4 голосов
/ 02 апреля 2019

Как упоминает HansHire, в официальной документации представлены формулы, используемые для суммирования пикселей при скольжении окон.Кроме того, документы Python OpenCV показывают примеры:

TM_CCOEFF

TM_COEFF

TM_CCORR

TM_CORR

Обратите внимание, что в документах написано:

Вы можете видеть, что результат с использованием cv2.TM_CCORR не так хорош, как мы ожидали.

Если вы хотитеиспользовать скриншоты или фрагменты изображений (а-ля Sikuli ), которые всегда остаются неизменными (не кадры реальной камеры, где освещение / преобразования могут меняться), а затем использовать matchTemplate, в противном случае попытайтесь избежать этого.Это очень хорошо только для конкретных случаев использования, и между практическими результатами нет большой разницы между различными функциями суммирования.

Чтобы ответить на ваш комментарий о том, что обозначают сокращения TM_CCORR и TM_CCOEFF?:

Честно говоря, я не знаю, но это не помешает мне догадаться:)))

Моя догадка, основанная на формулах документации, заключается в том, что TM_CCORR является прямой («самой простой») корреляцией между шаблоном и изображением:

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

Поскольку шаблон «скользит» по изображению, вычисляется результирующее изображение.

TM_CCOEFF, но вместо текущего пикселя шаблона (T) появляется более сложный «коэффициент» (T') используется (T(x′,y′)−1/(w⋅h)⋅∑x″,y″T(x″,y″)) (что аналогично (I' использует).

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

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

Для каждого из этих 3 основных методов существуют нормативные версии.

Хорошо, это мое понимание значения аббревиатуры (например, прямой (точкапродукт) корреляция против более запутанной (без каламбура) корреляции)

Но что это значит?

В практическом плане я бы в основном обратил внимание наo тот факт, что TM_CCORR и TM_CCOEFF делают наиболее вероятное совпадение с самым ярким пикселем, в то время как TM_SQDIFF является противоположным: самые темные значения, скорее всего, совпадают (см. примеры изображений, связанных).

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

Для оперативных данных, которые не являются скриншотами или шаблонами, которые являются частью одного и того же изображения (а-ля "где Уолдо"), я бы посмотрел на обнаружение объектов (например, обучение SVM с использованием HOG в качестве дескриптора функции)

...