Saya telah berhasil menguji algoritma korelasi fase 1D untuk menentukan pergeseran vertikal antara dua gambar sintetis.
Namun, ketika saya pindah ke gambar asli, itu tidak dapat mendeteksi terjemahan sama sekali (puncaknya terletak pada 0, yang merupakan hasil yang salah).
Saya memiliki gambar-gambar berikut:
Dan menghasilkan korelasi fase (Magnitude, Real, Imaginary):
Garis pemindaian pertama gambar benar-benar putih, tetapi pergeserannya jelas lebih besar (20 piksel).
Hasil yang diharapkan adalah garis putih pada baris ke-20 yang hanya terjadi pada gambar sintetis atau noise ringan.
Algoritme saya sangat sederhana - untuk setiap kolom gambar:
- Hitung 1D FT kolom gambar sumber dan target (
a=FT(A)
,b=FT(B)
) - Compute cross-power spectrum (
cross_power = a *. conj(b) / |a *. conj(b)|
) -*.
menunjukkan mutliplikasi pointwise,conj(x)
menunjukkan konjugat kompleks - Hitung korelasi fase (
phase = IFT(cross_power)
) - Temukan besaran maksimum di setiap kolom
phase
. - Temukan lokasi puncak konsensus (mis. Median lokasi puncak yang terdeteksi)
Bisakah Anda memberi tahu saya cara meningkatkan algoritma korelasi fase awal untuk menangani gambar dunia nyata (berisik)?
Haruskah saya lebih suka menggunakan NCC (Normalized Cross Correlation) daripada korelasi fase berbasis FFT?
MEMPERBARUI
Saya sedang bereksperimen dengan zero padding untuk mengesampingkan kesalahan yang diperkenalkan oleh pengalihan sirkuler (hanya penggeseran gambar sederhana yang diinginkan) dan menguji ini pada gambar asli dari Wikipedia:
Puncak tunggal jelas ada sebagaimana mestinya:
Namun - jika saya melakukan sedikit penghalusan (Gaussian blur) untuk mengurangi kebisingan dan benar-benar meningkatkan hasilnya, korelasi fasa keluar benar-benar hancur:
Berikut adalah versi yang disempurnakan - puncak aslinya lebih lemah (mengapa ??) dan muncul puncak baru di sekitar nol shift (mengapa ??):
Jawaban:
Versi satu dimensi
Versi satu dimensi yang Anda daftarkan tidak akan berfungsi. Ketika ada pergeseran gambar yang cukup besar (lebih dari satu atau dua piksel dalam gambar dunia nyata), tidak akan ada yang terkait dengan piksel kolom.
Untuk contohnya, cobalah:
Sehingga kita memiliki I5:
dan I6:
Maka korelasi fase satu dimensi adalah:
sedangkan korelasi fase dua dimensi adalah:
Agak sulit dilihat, tetapi ada puncak yang sangat tinggi di sudut kanan bawah gambar. Tidak ada puncak yang jelas ada dalam versi satu dimensi.
Mengapa perataan tidak membantu? # 1
Apa korelasi coba lakukan adalah menemukan variasi "serupa" di setiap gambar. Jika sinyal yang mendasarinya cukup acak, maka ini akan bekerja dengan baik: korelasi white noise dengan dirinya sendiri memberikan puncak yang sangat bagus di titik asal, dan mendekati nol di tempat lain.
Menghaluskan gambar "acak" dengan Gaussian akan memiliki efek memperlancar korelasi yang Anda harapkan --- menyebarkan energi di puncak mana pun di area yang lebih luas.
Menghaluskan memiliki efek sebaliknya dari "pra-pemutihan" gambar. Pra-pemutihan (seperti namanya) mencoba untuk membuat gambar lebih seperti white noise --- yang memiliki bentuk terbaik jika kita melakukan deteksi berbasis korelasi (di mana puncaknya terlokalisasi dengan baik).
Apa yang lebih baik Anda lakukan adalah menggunakan
diff
operasi matlab untuk cara pra-pemutihan gambar yang sederhana, namun sangat efektif.Lihat contoh ini.
Mengapa perataan tidak membantu? # 2
Mengapa perataan menyebabkan puncak ekstra?
Jika Anda menghaluskan setiap gambar dengan kernelk ( x , y) lalu kita dapatkan:
Sekarang,
Yang saya duga sedang terjadi (walaupun saya tidak yakin) adalah bahwa mungkin kernel Anda memiliki nilai mendekati nol dalam domain frekuensi, menyebabkan masalah numerik?
Jika saya menerapkan kernel:
ke gambar acak saya, lalu saya dapatkan:
untuk korelasi dua dimensi, yang membuat puncak lebih tersebar, tetapi tidak menunjukkan masalah yang Anda lihat.
sumber
Cara termudah untuk mendapatkan kinerja yang baik dari korelasi fase dengan memutihkan sinyal adalah dengan mengambil log besarnya. Anda juga dapat menyaring suara dari permukaan korelasi yang dihasilkan. Untuk perinciannya lihat “Memperbaiki Korelasi Fase untuk Registrasi Gambar”, Prosiding (ICVNZ2011) Image and Vision Computing New Zealand 2011, hal.488-493,, http://www98.griffith.edu.au/dspace/bitstream/handle/ 10072/44512 / 74188_1.pdf? Sequence = 1
sumber