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ω=1X←Xω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=⎡⎣⎢0v3−v2−v30v1v2−v10⎤⎦⎥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:
⎡⎣⎢0w−y−w0xy−x0⎤⎦⎥⎡⎣⎢P1,1P2,1P3,1P1,2P2,2P3,2P1,3P2,3P3,3P1,4P2,4P3,4⎤⎦⎥X=⎡⎣⎢P3,4Wy−P2,1Xw−P2,2Yw−P2,4Ww+P3,1Xy−P2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1Xw−P3,4Wx+P1,2Yw−P3,1Xx+P1,3Zw−P3,2Yx−P3,3ZxP2,4Wx+P2,1Xx−P1,4Wy−P1,1Xy+P2,2Yx−P1,2Yy+P2,3Zx−P1,3Zy⎤⎦⎥=0
P
⎡⎣⎢⎢⎢0Xw−Xy0Yw−Yy0Zw−Zy0Ww−Wy−Xw0Xx−Yw0Yx−Zw0Zx−Ww0WxXy−Xx0Yy−Yx0Zy−Zx0Wy−Wx0⎤⎦⎥⎥⎥⎡⎣⎢⎢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[R−RC]
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.