Я намагаюся зробити реєстрацію зображень за допомогою фазової кореляції, як описано в статті 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, так що він охоплює весь полярний простір.
Ось приклади зображень у лог-полярному просторі з (на випадок, якщо щось явно не так):
Нарешті, це показує фактичне перетворення зображення, яке проходить перед етапом кореляції фаз (верхній - величина DFT після високочастотного фільтра, нижній - у полярному просторі журналу):
Я використовую OpenCV, який має методи LogPolar і PhaseCorrelate. Хоча PhaseCorrelate, як і моя ручна реалізація, дає мені правильну відповідь для перекладу, це невірно в масштабі. Оскільки використання OpenCV LogPolar або моєї власної не впливає на правильність, я повинен щось пропустити.
Будь-яка допомога буде вдячна.