Я пытаюсь выполнить регистрацию изображения с использованием фазовой корреляции, как описано в статье Редди Чаттерджи . В моем случае изображения могут быть масштабированы и переведены относительно друг друга.
Алгоритм нахождения относительного масштаба, насколько я понимаю, таков (см. Блок -схему из статьи ):
F1 = DFT(I1)
F2 = DFT(I2)
H1 = Highpass(F1)
H2 = Highpass(F2)
L1 = LogPolar(Magnitude(H1))
L2 = LogPolar(Magnitude(H2))
PC = PhaseCorrelate(L1,L2)
PM = norm(PC)
R = IDFT(PhaseCorr/PM)
P = Peak(R)
Scale = LogBase^P[1]
Шкала дает мне, казалось бы, бессмысленные значения (сильно отличается от изображения к изображению и никогда не исправить).
Но игнорируя масштаб, тот же подход фазовой корреляции прекрасно работает для перевода; и поэтому я подозреваю, что у меня проблема с лог-полярным преобразованием. Вот пример, где я решил перевести - левое изображение - оригинал, а правое - обрезано и переведено - решение показано поверх оригинала:
Наконец, это показывает фактическое преобразование, через которое проходят изображения до шага фазовой корреляции (верх - это постполосный фильтр с амплитудой ДПФ, снизу - в лог-полярном пространстве):
Я использую OpenCV, который имеет методы LogPolar и PhaseCorrelate. Хотя PhaseCorrelate, как и моя ручная реализация, дает мне правильный ответ для перевода, он некорректен в масштабе. Поскольку использование OpenCV LogPolar или мой собственный не влияет на правильность, я должен что-то упустить.
Любая помощь будет оценена.