Реєстрація масштабово-інваріантного зображення на основі полярного DFT


10

Я намагаюся зробити реєстрацію зображень за допомогою фазової кореляції, як описано в статті Reddy Chatterji . У моєму випадку зображення можуть бути масштабовані та перекладені відносно один одного.

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

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]

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

Але ігноруючи масштаб, той же підхід до кореляції фаз працює чудово для перекладу; і тому я підозрюю, що у мене проблема з моїм полярно-полярним перетворенням. Ось приклад, де я вирішив для перекладу - ліве зображення є оригінальним, а праве обрізане та перекладене - рішення показано вгорі оригіналу:

Переклад один працює

Для логополярного перетворення спочатку перетворюю на полярний простір: де - оригінальне зображення, - це радіус зображення (половина ширини) та - кількість зразків у напрямку . Потім я зражу з цього зразка, щоб перетворити в журнал полярний простір: де як описано в 1, так що він охоплює весь полярний простір.

Я^(ρ,θ)=Я(r+ρcos(2πθNθ),r-ρгріх(2πθNθ))
ЯrNθθ
Я^лог(ρ,θ)=Я^(журналб(ρ),θ)
б=(2r)-Nρ

Ось приклади зображень у лог-полярному просторі з (на випадок, якщо щось явно не так):ρ=θ=256

Вхід Полярний

Нарешті, це показує фактичне перетворення зображення, яке проходить перед етапом кореляції фаз (верхній - величина DFT після високочастотного фільтра, нижній - у полярному просторі журналу):

Полярний журнал DFT

Я використовую OpenCV, який має методи LogPolar і PhaseCorrelate. Хоча PhaseCorrelate, як і моя ручна реалізація, дає мені правильну відповідь для перекладу, це невірно в масштабі. Оскільки використання OpenCV LogPolar або моєї власної не впливає на правильність, я повинен щось пропустити.

Будь-яка допомога буде вдячна.


1
Ви зрозуміли, що не так?
Mr.WorshipMe

1
@ Mr.WorshipMe На жаль, ні.
Дрю Каммінз

@Drew Cummins, я думаю, це було завдяки використаному тестовим зображенням, оскільки відбувся різкий перехід від фону. Як щодо інших тестових зображень? Також, з останньої цифри, були очевидні відмінності між двома величинами, тому краще виконати належну попередню обробку вікон перед DFT.
lxg

Пару днів до того, як я знайшов цей папір, і я без успіху намагався реалізувати алгоритм. Мені було цікаво, чи можете ви поділитися своєю реалізацією для початківця :)
Alexis España

Відповіді:


1

Якщо ви хочете чогось справді надійного, але це може бути дорожче обчислювально, ви можете перевірити алгоритм, який я реалізував тут . Він реалізує документ "Робоча реєстрація зображень за допомогою полярно-полярної трансформації" ( pdf ). Він також має перевагу в тому, що він є інваріантним обертанням, крім перекладу та інваріантності масштабу. У моєму додатку (мистецтві) вдалося зареєструвати навіть подібні на вигляд зображення, а не просто перетворені версії одного зображення.


0

Я думаю, це пов'язано з конкретними проблемами впровадження. Наприклад, (1) краще виконати попередню обробку вікон перед DFT; (2) ви можете перевірити функцію Highpass (), і ви можете звернутися до тієї, яка є у статті Reddy Chatterji (23) - (24). Також існує обмеження для значення масштабу, і ви можете спробувати інші значення масштабу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.