Cara memperkirakan oktaf dan ukuran untuk fitur visual yang diposisikan di sudut Harris

9

Saat ini saya sedang bekerja dengan dan membandingkan kinerja beberapa fitur detektor yang disediakan oleh OpenCV sebagai dasar untuk pencocokan fitur visual.

Saya menggunakan deskriptor SIFT . Saya telah menyelesaikan pencocokan yang memuaskan (setelah menolak kecocokan yang buruk) ketika mendeteksi fitur MSER dan DoG (SIFT) .

Saat ini, saya sedang menguji kode saya dengan GFTT (Good Features to Track - Harris corner) untuk mendapatkan perbandingan, dan juga karena dalam aplikasi final, satu set fitur GFTT akan tersedia dari proses pelacakan fitur visual.

Saya menggunakan cv::FeatureDetector::detect(...)yang menyediakan saya dengan std::vector<cv::KeyPoint>penuh terdeteksi fitur / keypoints / daerah bunga . Struktur cv::KeyPointberisi informasi dasar tentang lokasi fitur, serta informasi tentang sizedan octavedi mana titik kunci telah terdeteksi.

Hasil pertama saya dengan GFTT sangat buruk sampai saya membandingkan tipikal sizedan octaveparameter dalam berbagai jenis fitur:

  • MSER menetapkan ukuran (antara 10 dan 40px) dan membiarkan oktaf ke 0
  • DoG (SIFT) mengatur ukuran dan oktaf ( rasio ukuran / oktaf antara 20 dan 40)
  • GFTT parameter selalu : size = 3 , oktaf = 0

Saya kira itu karena tujuan utama fitur GFTT tidak untuk digunakan dalam pencocokan tetapi hanya dalam pelacakan. Ini menjelaskan rendahnya kualitas hasil pencocokan, karena deskriptor yang diekstraksi dari fitur sekecil itu berhenti bersifat diskriminatif dan tidak berubah-ubah untuk banyak hal , termasuk pergeseran kecil, 1-piksel.

Jika saya secara manual mengatur sizedari GFTT ke 10-12 , saya mendapatkan hasil yang baik, sangat mirip dengan ketika menggunakan MSER atau DoG (SIFT) .

Pertanyaan saya adalah: apakah ada cara yang lebih baik untuk menentukan berapa banyak untuk meningkatkan size(dan / atau octave) daripada hanya-berjalan-dengan-10-lihat-jika-itu-berhasil ? Saya ingin menghindari sizepeningkatan hardcoding jika mungkin dan menentukan secara pemrograman, tetapi hardcoding tidak apa - apa selama saya memiliki beberapa argumen yang solid yang mendukung pilihan saya pada algoritma baru size/ sizekenaikan / sizeestimasi .

Penelope
sumber
1
Hey @ penelope: lihat tautan ini orang ini sudah melakukan pekerjaan yang bagus. [ Computer-vision-talks.com/2011/08/08 ...
@Sistu, hei itu tampak seperti perbandingan umum yang sangat baik dari deskriptor dalam kasus umum, dan dengan objek planar, tapi saya sedang mengerjakan jenis gambar tertentu dan saya perlu melakukan tes saya sendiri. Selain itu, pertanyaannya jauh lebih spesifik daripada "Saya butuh bahan referensi membandingkan kinerja berbagai jenis decriptor". Tautan yang bagus, akan memeriksanya.
penelope

Jawaban:

4

Saya tidak yakin sebenarnya ada respons yang baik untuk pertanyaan Anda: skala-ruang hal SIFT dan SURF sebenarnya dikembangkan untuk secara otomatis memperkirakan ukuran lingkungan yang relevan "baik" di sekitar titik kunci seperti sudut (yang merupakan fitur bagus apa untuk melacak adalah).

Sekarang, jawaban yang lebih positif adalah:

  • membangun basis data titik kunci dan kecocokan yang baik (misalnya menggunakan pola kalibrasi persegi) dan membuat penilaian kinerja otomatis pada basis data ini untuk menemukan ukuran yang benar. Tugas ini sebenarnya dapat benar-benar otomatis (lihat karya Mikolajczyk dan Schmid tentang evaluasi pencocokan poin)

  • tempelkan fitur bagus Anda dalam piramida gambar untuk juga memiliki semacam skala yang terkait dengannya. Anda dapat mencari referensi pada FAST multi-skala dan poin bunga Harris, yang melakukan sesuatu yang sangat mirip dengan prosedur ini.

Untuk menemukan ukuran blok maksimum secara heuristik, Anda dapat menghitung estimasi gambar Anda dengan blur kotak (yang kurang lebih seperti yang dilakukan operator blockSize) dan melihat kapan sudut menghilang. Namun perlu dicatat bahwa lebih banyak blur mengambil sudut dari lokasi aslinya.

Jika Anda benar-benar mencari beberapa perbaikan cepat dan kotor, coba ukuran antara 5x5 dan 11x11 (ukuran khas yang digunakan dalam pencocokan blok stereo). Jika Anda mencari kriteria yang memuaskan secara intelektual, maka cobalah untuk memaksimalkan kemungkinan pencocokan yang baik dari dua titik fitur di bawah tingkat kebisingan Anda.

sansuiso
sumber
Saya sedang mencari solusi yang sedikit lebih cepat dan kotor dari apa yang Anda usulkan. Juga, saya hanya bisa menentukan apakah cuaca cocok atau tidak baik setelah saya mendapatkan titik kunci saya diekstraksi dan dicocokkan dengan sesuatu. Bahkan jika saya mencocokkan mereka secara acak, saya mendapatkan beberapa pertandingan yang bagus - jadi saran pertama Anda tidak begitu membantu. Adapun bagian kedua, lebih cepat dan kotor: Saya tahu tidak ada parameter yang sempurna, tetapi seperti yang saya katakan, meningkatkan ukuran menjadi 12 membantu - kualitasnya sebanding dengan SIFT dan pencocokan MSER. Saya hanya tidak punya argumen apa pun untuk memilih 12 lebih dari 100 atau lebih dari 34 ...
penelope
0

Untuk membantu Anda menentukan parameter terbaik untuk detektor, OpenCV memiliki AjusterAdapter untuk tujuan itu. Saya tidak pernah menggunakannya sendiri tetapi mungkin cara standar untuk secara sistematis menentukan parameter. Perlu diketahui juga bahwa meskipun Keypoints memiliki beberapa properti, tidak semua masuk akal untuk semua algoritma. Karena struktur Keypoint digunakan untuk algoritma yang berbeda, ia memiliki semua bidang itu tetapi kadang-kadang tidak digunakan, itu sebabnya Anda mendapatkan oktaf = 0; IMO.

Rui Marques
sumber
Saya tahu bahwa beberapa jenis fitur kadang-kadang bukan tipe terbaik untuk beberapa tujuan, tetapi karya terbaru telah mencoba pendekatan di mana mereka menggunakan lebih dari 1 jenis v.fitur / bidang minat dan mencapai hasil yang lebih baik dengan kombinasi daripada dengan jenis tunggal apa pun. sendiri (saya dapat menambahkan tautan ke karya jika Anda tertarik). Juga, apa yang saya lakukan adalah setidaknya penelitian bagian, jadi mencoba dan mengevaluasi hasil yang dicapai dengan berbagai jenis penekanan titik adalah apa yang seharusnya saya lakukan, bahkan jika beberapa hasil tersebut tidak sebagus keadaan modern. seni. Saya akan melihat AdjusterAdapter, terima kasih.
penelope
Saya hanya melihat melalui fungsi yang disediakan antarmuka. Itu hanya dapat menambah atau mengurangi jumlah fitur yang terdeteksi oleh detektor. Selain itu, saya tidak memiliki masalah dengan fitur yang terdeteksi. Saya hanya ingin cara untuk menyesuaikan ukuran mereka sehingga mereka bisa lebih baik digunakan dalam mencocokkan (meningkatkan ukuran menjadi 10 melakukan itu, tapi saya tidak punya argumentasi konkret (cukup) untuk pilihan itu)
penelope