Menghitung homografi berdasarkan garis yang terdeteksi

12

Saya tahu Anda dapat menghitung homografi dari gambar ke bidang kamera menggunakan titik korespondensi antara "model sempurna" dan titik gambar.

Saya melakukannya untuk lapangan sepakbola, dan telah menggunakan deteksi tepi untuk menemukan garis putih di lapangan.

Tapi kamera tidak (selalu) menutupi semua pitch, jadi saya tidak bisa melihat semua sudut ... dan saya hanya sudut yang 100% diketahui poin dalam model (tidak ada poin berbeda lainnya).

Jadi masalahnya adalah bahwa kecuali jika garis berpotongan dengan garis lain dan membentuk sudut, saya hanya tahu titik-titik gambar dari garis, bukan itu sesuai dengan koordinat "dunia nyata / sempurna" dalam model.

Apakah ada cara saya bisa menggunakan garis yang terdeteksi untuk menghitung homografi, atau bahkan hanya satu set kandidat homografi , bahkan jika garis yang terdeteksi tidak berpotongan satu sama lain dan membuat sudut?

Contoh gambar, menunjukkan pitch, bidang pandang kami, dan titik-titik pitch di mana saya dapat mengetahui koordinat dunia nyata / model yang sesuai (lingkaran hijau), dan contoh 2 garis yang mungkin sama sekali tidak berguna karena di bidang pandang kami , Saya tidak tahu persis di titik mana mereka memulai atau berhenti di dunia nyata / model lapangan yang sesuai:

masukkan deskripsi gambar di sini Garis merah adalah contoh garis yang ingin saya gunakan, tetapi saya tidak tahu koordinat dunia nyata mereka, dan agak sulit untuk memperkirakannya karena tergantung pada pose kamera, titik koresponden bisa "di mana saja".

Henrik Kjus Alstad
sumber
2
Apakah Anda memiliki beberapa contoh gambar? Atau setidaknya sketsa kasus yang mungkin untuk deteksi garis? Saya pikir jawaban singkat untuk pertanyaan Anda adalah "ya, Anda bisa", tetapi lebih banyak detail dari Anda akan membantu memberikan jawaban yang lebih terperinci :)
penelope
2
Bisakah Anda memberikan contoh gambar? Apakah Anda mengatakan bahwa segmen garis yang terdeteksi tidak berpotongan atau sudahkah Anda mencoba memperluas segmen yang terdeteksi ke garis dan kemudian mencoba menemukan persimpangan?
ppalasek
3
Saya menambahkan contoh gambar ke pertanyaan
Henrik Kjus Alstad
1
Apakah Anda pernah memikirkan hal ini? Saya tertarik dengan hasilnya juga.

Jawaban:

3

Saya akan menjelaskan dua pendekatan untuk ini:

1) Satu pendekatan akan membutuhkan algoritma pencocokan garis. Setelah mencocokkan garis, Anda bisa menggunakan titik akhir garis untuk menghitung homografi. Untuk mencapai itu deskriptor berbasis EDLine atau LSD baru-baru ini diusulkan dalam OpenCV. Juga, hashing dan pencocokan cepat dari mereka juga diterapkan. Lihat videonya di sini:

http://www.youtube.com/watch?v=MqMjvSkM39k

http://www.youtube.com/watch?v=naSWTlbg3To

Repositori opencv_contrib baru-baru ini berisi kode sumber untuk metode ini.

Jika titik akhir garis berisik, Anda dapat langsung menggunakan garis untuk menghitung homografinya. Makalah seperti itu kemudian akan membaca:

Laporan Internal: 2005-V04 Komputasi Homografi dari Tiga Garis atau Poin dalam Gambar. Pasangan G. Lopez-Nicolas, JJ Guerrero, OA Pellejero, C. Sagues

Laporan Internal: 2003-V01 Pencocokan garis yang kuat dan estimasi homografi secara bersamaan G. Lopez-Nicolas

Pencocokan Garis Probabilistik dengan Homografinya Taemin Kim, Jihwan Woo, dan In So Kweon

2) Ada satu metode khusus untuk bidang yang diberikan di sini:

" Menggunakan fitur garis dan elips untuk perbaikan video hoki siaran .", Gupta, Ankur, James J. Little, dan Robert J. Woodham Computer and Robot Vision (CRV), Konferensi Kanada 2011 tentang. IEEE, 2011.

dan

" Menggabungkan korespondensi garis dan titik untuk estimasi homografi .", Dubrofsky, Elan, dan Robert J. Woodham . Simposium Internasional tentang Komputasi Visual. Springer Berlin Heidelberg, 2008.

Idenya adalah sebagai berikut: Setiap baris, ditentukan oleh koefisiennya memetakan ke pada gambar lain menggunakan:li=(u,v,1)Tli=(x,y,1)T

li=HTli

Dalam bentuk ini persamaan dapat langsung dicolokkan ke metode DLT:

Ai=[u0uxv0vx10x0uuy0vvy01y]

Satu-satunya perbedaan adalah normalisasi, yang akan Anda temukan dalam referensi di atas.

Menambahkan Elips: Setiap titik kebohongan pada irisan kerucut jika . Ini menimbulkan hubungan transformasi:xCxTCx=0

C=HTCH1

Referensi di atas juga menjelaskan cara memasukkan batasan ini ke algoritma DLT.

Dengan menggunakan elips dan garis, dimungkinkan untuk memperoleh hubungan proyektif yang kuat.

Tolga Birdal
sumber
2

Jika garis tidak paralel, Anda dapat menghitung titik persimpangan mereka dan menggunakannya sebagai titik referensi. Dalam lukisan Anda, Anda dapat menggunakan titik ungu juga:

masukkan deskripsi gambar di sini

By the way, persimpangan garis tidak perlu berada di gambar. Selama garisnya paralel

Jika garisnya paralel, Anda bisa menggunakannya untuk mendapatkan kendala tambahan. Misalnya jika Anda memiliki N <4 poin dan garis K Anda mungkin dapat memperkirakan transformasi

Ingatlah bahwa persamaan transformasi proyektif adalah:

x=(a11x+a12y+a13)(a31x+a32y+1)y=(a21x+a22y+a23)(a31x+a32y+1)

Tujuan Anda adalah untuk menemukan koefisiena11,a12,a13,a21,a22,a23,a31,a32

Jadi, jika ada garis yang memetakan ke , maka:ax+by+c=0Ax+By+C

Ax+By+C=0A(a21x+a22y+a23)+B(a21x+a22y+a23)+C(a31x+a32y+1)=0

Itu dapat ditulis ulang sebagai:

(AxAyABxByBCxCy)(a11a12a13a21a22a23a31a32)=C

( x , y ) a x + b y + c = 0A,B,C adalah nilai yang diketahui, karena Anda menghitung persamaan garis. Anda dapat memasukkan titik mana saja untuk yang , dan mendapatkan kendala tambahan. Gabungkan keduanya bersama dengan kendala yang Anda dapatkan dari poin, dan Anda mungkin mendapatkan informasi tambahan. Perhatikan bahwa Anda tidak akan mendapatkan lebih banyak informasi dari lebih dari dua titik, karena titik ketiga mana pun akan menambahkan garis dependen linier ke dalam matriks batasan.(x,y)ax+by+c=0

Referensi tambahan " Estimasi homografi oleh Elan Dubrovsky " - Lihat bagian 2.3.1, estimasi homografi dari garis.

Andrey Rubshtein
sumber