Estimasi Posisi 3D menggunakan kamera 2D

9

Saya memiliki kamera (iPhone), saya memiliki objek kontrol 3D pada gambar yang saya tahu sifat-sifatnya dengan sangat baik. (Objek kontrol saya). Ada juga objek sekunder yang bergerak. Tujuan utamanya adalah untuk menetapkan lintasan 3D dari objek bergerak untuk periode waktu tertentu. (Pelacakan)

Saya suka bertanya, bisakah saya mencari tahu?

  • Jarak ponsel ke objek kontrol (untuk diskusi, mari kita asumsikan kamera berada pada ketinggian tertentu dan jarak tertentu tidak diketahui tetapi kamera tegak lurus ke permukaan yang diketahui)

  • Objek sekunder tempat saya dapat menemukan objek di setiap frame berikutnya. Tujuan saya adalah memperkirakan lintasan 3D-nya seperti yang telah saya sebutkan di atas.

Pertanyaan bonus, kita dapat membuat sistem sedemikian rupa sehingga jarak ponsel ke objek kontrol dapat diatur (meskipun tidak disukai), apakah ini membantu saya dengan poin kedua?

Ktuncer
sumber
Apakah Anda akrab dengan literatur di bidang ini? Jika tidak, saya dapat merekomendasikan beberapa makalah, tetapi diperingatkan: matematika terlibat.
Emre
@ Lebih baik jika Anda bisa memberikan beberapa petunjuk. Matematika itu tidak masalah, kami cinta matematika.
Ktuncer
@emre Aku memang melihat sekilas ulasan makalah .. Ini lebih untuk pelacakan, saya dapat melacak objek dengan mudah, itu bukan masalah. Saya bisa menunjukkan titik di mana pixel objeknya. Masalahnya adalah di mana objek berada dalam ruang 3D. Apakah ini mungkin? Pada dasarnya, saya memiliki objek lain dalam ruang 3D yang saya tahu properti yang dapat saya gunakan sebagai kerangka referensi, tetapi hanya itu.
Ktuncer
Maaf, kertas salah. Mungkin Anda dapat mengadaptasi Pelacakan Lintasan 3D Berbasis Visi untuk Lingkungan Tidak Dikenal [PDF]? Mereka menggunakan kamera stereo; Apakah itu kemungkinan bagi Anda?
Emre

Jawaban:

15

Jika objek Anda memiliki 6 titik yang diketahui (dikenal koordinat 3D, dan ) Anda dapat menghitung lokasi kamera yang terkait dengan sistem koordinat objek.X,YZ

Pertama, beberapa dasar.

Koordinat homogen adalah presentasi vektor koordinat euclidean di mana kita telah menambahkan apa yang disebut faktor skala sehingga koordinat adalah . Dalam perhitungan Anda sendiri, usahakan untuk menjaga sesering mungkin (artinya Anda "menormalkan" koordinat homogen dengan membaginya dengan elemen terakhir: ). Kita juga dapat menggunakan presentasi homogen untuk titik 2D sedemikian rupa sehingga (ingat bahwa ini dan(X,Y,Z)ωX=ω[XYZ1]Tω=1XXωx=ω[XY1]ω,X,YZberbeda untuk setiap titik, baik itu titik 2D atau 3D). Presentasi koordinat yang homogen membuat matematika lebih mudah.

Matriks kamera adalah matriks proyeksi dari dunia 3D ke sensor gambar:3×4

x=PX

Di mana adalah titik pada sensor gambar (dengan satuan piksel) dan adalah titik 3D yang diproyeksikan (katakanlah ia memiliki milimeter sebagai unitnya).xX

Kita ingat bahwa produk silang antara dua vektor 3 dapat didefinisikan sebagai perkalian vektor-vektor sedemikian rupa sehingga:

v×u=(v)xu=[0v3v2v30v1v2v10]u

Juga berguna untuk mencatat bahwa produksi silang .v×v=0

Sekarang mari kita coba untuk menyelesaikan matriks proyeksi dari persamaan sebelumnya. Mari kita gandakan persamaan proyeksi dari sisi kiri dengan matriks produk silang :Px

(x)xx=(x)xPX=0

Aha! Hasilnya harus nol vektor. Jika sekarang kita buka persamaan yang kita dapatkan:

[0wyw0xyx0][P1,1P1,2P1,3P1,4P2,1P2,2P2,3P2,4P3,1P3,2P3,3P3,4]X=[P3,4WyP2,1XwP2,2YwP2,4Ww+P3,1XyP2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1XwP3,4Wx+P1,2YwP3,1Xx+P1,3ZwP3,2YxP3,3ZxP2,4Wx+P2,1XxP1,4WyP1,1Xy+P2,2YxP1,2Yy+P2,3ZxP1,3Zy]=0

P

[0000XwYwZwWwXyYyZyWyXwYwZwWw0000XxYxZxWxXyYyZyWyXxYxZxWx0000][P1P2P3]=0

Dimana adalah transpos dari : th deretan kamera matriks . Baris terakhir dari persamaan matriks (besar) sebelumnya adalah kombinasi linear dari dua baris pertama, sehingga tidak membawa informasi tambahan dan dapat ditinggalkan.PnnP

Jeda kecil sehingga kami bisa mengumpulkan barang-barang kami. Perhatikan bahwa persamaan matriks sebelumnya harus dibentuk untuk setiap korespondensi 3D-> 2D yang diketahui (harus ada setidaknya 6 dari mereka).

Sekarang, untuk setiap korespondensi poin, hitung dua baris pertama dari matriks di atas, susun matriks di atas satu sama lain dan Anda mendapatkan matriks baru yang2×12A

A[P1P2P3]=0

Karena kita memiliki 12 yang tidak diketahui dan (setidaknya) 12 persamaan, ini dapat diselesaikan. Satu-satunya masalah adalah kita tidak ingin memiliki jawaban sepele di mana

[P1P2P3]=0

Untungnya kita dapat menggunakan dekomposisi nilai singular (SVD) untuk memaksa

[P1P2P3]=1

Jadi untuk menyelesaikan persamaan, hitung SVD dari matriks dan pilih vektor singular yang sesuai dengan nilai eigen terkecil. Vektor ini adalah vektor nol dari matriks A dan juga solusi untuk kamera matriks . Hanya unstack yang dan bentuk .AP[P1P2P3]TP

Sekarang Anda ingin tahu jarak ke objek. didefinisikan sebagai:P

P=K[RRC]

di mana adalah lokasi kamera relatif terhadap objek asal. Ini dapat diselesaikan dari dengan menghitung vektor nol s.CPP

(Hartley, Zisserman - Geometri Tampilan Ganda dalam Penglihatan Komputer)

Akhirnya, ketika Anda menghitung lokasi kamera untuk dua frame, Anda dapat menghitung lokasi objek yang tidak diketahui (atau lokasi beberapa titik objek) dengan menyelesaikan dua persamaan untuk :X

x1=P1Xx2=P2X

Yang hampir sama dengan cara kita memecahkan matriks kamera:

(x1)xP1X=0(x2)xP2X=0

Dan seterusnya.

buq2
sumber
Apakah benar mengatakan bahwa cara Anda menghitung posisi 3D kamera setara dengan OpenCV resolpnp? docs.opencv.org/2.4/modules/calib3d/doc/… (mencari resolPnP di halaman. Saya tidak bisa menempelkan URL dengan #)
gregoiregentil