Bagaimana cara menghitung vektor perpindahan 2D untuk pendaftaran gambar biner?

8

Input saya adalah beberapa gambar biner seperti:gambar biner pertama yang didaftarkangambar biner kedua untuk didaftarkan

Mereka memiliki konten yang sama secara global tetapi mungkin tidak terdaftar karena diproduksi dari kamera tangan. Yang ingin saya hitung adalah vektor perpindahan 2D dari gambar pertama ke kedua. Saya menggunakan OpenCV dan upaya pertama saya adalah menghitung titik fitur (algoritma SURF) dan transformasi affine antara kedua gambar. Tapi tentu saja, deskripsi fitur agak buruk pada gambar biner, oleh karena itu pencocokannya sulit dan peta yang cocok sangat tidak akurat.

Adakah yang tahu bagaimana saya bisa melakukan ini?

Stéphane Péchard
sumber

Jawaban:

6

Saya agak terkejut bahwa fitur poin tidak berfungsi dengan baik. Saya telah berhasil mendaftarkan bentuk seperti milik Anda menggunakan salah satu

  • Poin Harris, ini adalah detektor sudut, dalam kombinasi dengan algoritma RANSAC. Lihat wiki atau Peter Kovesi di situsnya
  • Menggunakan detektor fitur seperti SURF atau SIFT dalam kombinasi dengan peta tepi gambar sebelum deteksi fitur diikuti oleh beberapa bentuk pencocokan yang kuat.

EDIT

Saya mencobanya dengan matlab dan mencoba beberapa variasi pada tema ini. Saat ini saya gunakan

  • Fitur SIFT dari peta tepi untuk memastikan rotasi dan penskalaan, meskipun mereka sangat kecil di antara gambar yang Anda berikan
  • RANSAC untuk pencocokan yang kuat
  • Korelasi silang untuk memastikan terjemahan antara dua gambar

Pertandingan yang kuat Sebelum registrasi Setelah pendaftaran

Sumber di github .

Alternatif untuk RANSAC bisa menjadi pendekatan Hough transform voting / binning yang diusulkan oleh penemu SIFT, David Lowe.

Maurits
sumber
Saya tahu Harris, tetapi saya tidak memiliki algoritma pencocokan yang cepat dan kuat untuk memastikan saya mendapatkan poin yang sama dari satu gambar ke gambar lainnya. Plus, Ransac tidak dapat digunakan seperti di OpenCV ...
Stéphane Péchard
Terima kasih banyak atas usaha Anda. Ini menunjukkan cara yang bagus untuk melakukan ini. Saya akhirnya memodifikasi cara saya melakukan apa yang perlu saya lakukan, karena fitur perhitungan dan pencocokan terlalu intensif untuk CPU bagi saya. Bagaimanapun, terima kasih, Anda melakukan pekerjaan dengan baik!
Stéphane Péchard
Stephane, dapatkah Anda menambahkan solusi Anda ke situs ini?
Maurits
1
baik, masalahnya adalah saya tidak menjawab pertanyaan yang diajukan sehingga tidak relevan untuk menempatkannya di sini. Apa yang saya lakukan adalah deteksi gumpalan gambar dan deskripsi masing-masing gumpalan dengan jumlah minimum poin yang mungkin. Saya ingin perpindahan 2D untuk menghitung akumulasi temporal, tapi saya tidak akan melakukannya lagi, karena deskripsi vektor gumpalan sudah cukup.
Stéphane Péchard