найти все пики в фазовой корреляционной матрице в opencv

Я пишу программу на C ++ с OpenCv, которая должна найти фазовая корреляция Матрица между двумя изображениями и найти все пики, присутствующие выше порога отклика. Я нашел функцию с именем phaseCorrRes (), но она возвращает только самый высокий пик, используя minMaxLoc (). Как мне изменить эту функцию, чтобы восстановить все пики?

1

Решение

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

  1. Преобразование изображений в частотную область с помощью DFT (дискретное преобразование Фурье).
  2. Из полученной сложной матрицы получают фазы.
  3. Рассчитайте соотношение.
  4. Применить некоторое пороговое значение.

Для этого вам нужно:

  1. dft()
  2. phase()
  3. matchTemplate() с method = CV_TM_CCORR_NORMED
  4. threshold() с type = THRESH_TOZERO

Надеюсь, это поможет вам.

3

Другие решения

Лучше всего следовать последовательности, как указано в phaseCorrRes (). мы можем просто добавить еще два шага после выполнения FFTShift (), которые являются нормализацией и порогом. Теперь, если мы просто изменим пиксели вблизи и на каждом пике, извлеченном с помощью minMaxLoc (), на 0 (т.е. черный), мы можем итеративно найти все пики с помощью minMaxLoc (). Однако просто измените функцию, создав копию функции в программе, а не в исходном коде.

1

По вопросам рекламы [email protected]