Я пытаюсь выполнить регистрацию изображения с использованием фазовой корреляции, как описано в статье Редди Чаттерджи . В моем случае изображения могут быть масштабированы и переведены относительно друг друга.
Алгоритм нахождения относительного масштаба, насколько я понимаю, таков (см. Блок -схему из статьи ):
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 или мой собственный не влияет на правильность, я должен что-то упустить.
Любая помощь будет оценена.
источник
Ответы:
Если вы хотите что-то действительно надежное, но это может быть более затратным в вычислительном отношении, вы можете проверить алгоритм, который я реализовал здесь . В нем реализована статья «Надежная регистрация изображений с использованием лог-полярного преобразования» ( pdf ). Он также имеет преимущество, заключающееся в том, что он инвариантен к вращению, в дополнение к инварианту к трансляции и масштабированию. В моем приложении (art) оно могло регистрировать даже похожие изображения, а не только преобразованные версии одного и того же изображения.
источник
Я думаю, это связано с конкретными проблемами реализации. Например, (1) лучше выполнить предварительную обработку окон перед DFT; (2) вы можете проверить функцию Highpass () и обратиться к ней в статье Редди Чаттерджи (23) - (24). Кроме того, существует предел для значения шкалы, и вы можете попробовать другие значения шкалы.
источник