Saya mencoba melakukan registrasi gambar menggunakan korelasi fase seperti yang dijelaskan dalam makalah Reddy Chatterji . Dalam kasus saya, gambar dapat diskalakan dan diterjemahkan relatif satu sama lain.
Algoritma untuk menemukan skala relatif, seperti yang saya pahami, adalah (lihat: diagram alur dari makalah ):
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]
Skala memberi saya nilai yang tampaknya tidak masuk akal (sangat berbeda dari gambar ke gambar dan tidak pernah benar).
Tetapi mengabaikan skala, pendekatan korelasi fase yang sama berfungsi dengan baik untuk terjemahan; jadi saya curiga ada masalah dengan transformasi log-polar saya. Berikut ini adalah contoh, di mana saya telah menyelesaikan terjemahan - gambar kiri adalah asli dan kanan telah dipotong dan diterjemahkan - solusinya ditampilkan di atas orignal:
Untuk log-polar transform, saya pertama kali berubah menjadi ruang
Terakhir, ini menunjukkan transformasi aktual yang dilalui gambar sebelum langkah korelasi fase (atas adalah DFT magnitude post highpass filter, dasarnya adalah dalam ruang log kutub):
Saya menggunakan OpenCV, yang memiliki metode LogPolar dan PhaseCorrelate. Sementara PhaseCorrelate, seperti implementasi manual saya, memberi saya jawaban yang benar untuk terjemahan, itu salah dalam skala. Karena menggunakan OpenCV LogPolar atau milik saya sendiri tidak memengaruhi kebenaran, saya pasti melewatkan sesuatu.
Bantuan apa pun akan dihargai.
sumber
Jawaban:
Jika Anda menginginkan sesuatu yang benar-benar kuat, tetapi itu mungkin lebih mahal secara komputasi, Anda mungkin ingin memeriksa algoritma yang saya terapkan di sini . Ini mengimplementasikan makalah, "Pendaftaran Gambar Robust Menggunakan Log-Polar Transform" ( pdf ). Ini juga memiliki keuntungan menjadi rotasi-invarian, selain terjemahan dan skala invarian. Dalam aplikasi saya (seni), itu mampu mendaftarkan bahkan gambar yang tampak serupa, tidak hanya mengubah versi gambar yang sama.
sumber
Saya kira itu karena masalah implementasi yang spesifik. Sebagai contoh, (1) lebih baik untuk melakukan pra-pemrosesan windowing sebelum DFT; (2) Anda dapat memeriksa fungsi Highpass (), dan Anda dapat merujuk pada yang ada di kertas Reddy Chatterji Persamaan (23) - (24). Juga, ada batas untuk nilai skala, dan Anda dapat mencoba nilai skala lainnya.
sumber