Регистрация масштабируемого инвариантного изображения на основе Log-Polar DFT


10

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

Алгоритм нахождения относительного масштаба, насколько я понимаю, таков (см. Блок -схему из статьи ):

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]

Шкала дает мне, казалось бы, бессмысленные значения (сильно отличается от изображения к изображению и никогда не исправить).

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

Работает только перевод

я^(ρ,θ)знак равноя(р+ρсоз(2πθNθ),р-ρгрех(2πθNθ))
ярNθθ
я^Lог(ρ,θ)знак равноя^(журналб(ρ),θ)
бзнак равно(2р)-Nρ1, чтобы охватить все полярное пространство.

ρзнак равноθзнак равно256

Бревно Полярное

Наконец, это показывает фактическое преобразование, через которое проходят изображения до шага фазовой корреляции (верх - это постполосный фильтр с амплитудой ДПФ, снизу - в лог-полярном пространстве):

Бревно Полярное из DFT

Я использую OpenCV, который имеет методы LogPolar и PhaseCorrelate. Хотя PhaseCorrelate, как и моя ручная реализация, дает мне правильный ответ для перевода, он некорректен в масштабе. Поскольку использование OpenCV LogPolar или мой собственный не влияет на правильность, я должен что-то упустить.

Любая помощь будет оценена.


1
Вы выяснили, что случилось?
Mr.WorshipMe

1
@ Mr.WorshipMe К сожалению, нет.
Дрю Камминс

@ Дрю Камминс, я думаю, это из-за того, что вы использовали тестовое изображение, потому что был резкий переход от фона. Как насчет других тестовых изображений? Кроме того, из последнего рисунка были очевидные различия между двумя величинами, поэтому лучше предварительно выполнить надлежащую предварительную обработку окон перед DFT.
LXG

За пару дней до того, как я нашел эту статью, и я безуспешно пытался реализовать алгоритм. Мне было интересно, если вы могли бы поделиться своей реализацией для начинающих :)
Alexis España

Ответы:


1

Если вы хотите что-то действительно надежное, но это может быть более затратным в вычислительном отношении, вы можете проверить алгоритм, который я реализовал здесь . В нем реализована статья «Надежная регистрация изображений с использованием лог-полярного преобразования» ( pdf ). Он также имеет преимущество, заключающееся в том, что он инвариантен к вращению, в дополнение к инварианту к трансляции и масштабированию. В моем приложении (art) оно могло регистрировать даже похожие изображения, а не только преобразованные версии одного и того же изображения.


0

Я думаю, это связано с конкретными проблемами реализации. Например, (1) лучше выполнить предварительную обработку окон перед DFT; (2) вы можете проверить функцию Highpass () и обратиться к ней в статье Редди Чаттерджи (23) - (24). Кроме того, существует предел для значения шкалы, и вы можете попробовать другие значения шкалы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.