Nesnenizde bilinen 6 nokta (bilinen 3D koordinatları, ve ) varsa, nesnenin koordinat sistemiyle ilgili kameranın konumunu hesaplayabilirsiniz.X,YZ
Önce bazı temel bilgiler.
Homojen koordinat, homojen koordinat ölçek faktörü olarak eklediğimiz öklid koordinatının vektör sunumudur. . Kendi hesaplamalarınızda mümkün olduğunca sık tutmaya çalışın (yani homojen koordinatı son öğesiyle bölerek "normalleştirdiğiniz" anlamına gelir: ). Ayrıca, 2D için (bu ve(X,Y,Z)ωX=ω[XYZ1]Tω=1X←Xωx=ω[XY1]ω,X,YZ2D veya 3D nokta olsun, her nokta için farklıdır). Homojen koordinat sunumu matematiği kolaylaştırır.
Kamera matrisi, 3D dünyasından görüntü sensörüne projeksiyon matrisidir:3×4
x=PX
Burada (piksel birimleri ile) görüntü sensörü üzerindeki bir nokta ve bir (kendi birimler olarak milimetre sahip sağlar ki) 3D noktası öngörülmüştür.xX
İki 3 vektör arasındaki çapraz ürünün, matris-vektör-çarpma olarak tanımlanabileceğini hatırlıyoruz:
v×u=(v)xu=⎡⎣⎢0v3−v2−v30v1v2−v10⎤⎦⎥u
Ayrıca çapraz üretim not etmek de yararlıdır .v×v=0
Şimdi projeksiyon matrisini önceki denklemlerden çözmeye çalışalım . Projeksiyon denklemini sol taraftan s çapraz ürün matrisi ile :Px
(x)xx=(x)xPX=0
Aha! Sonuç sıfır vektör olmalıdır. Şimdi denklemi açarsak:
⎡⎣⎢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
Biraz yeniden düzenleme ile projeksiyon matrisini matrisin dışına çıkarabiliriz :P
⎡⎣⎢⎢⎢0Xw−Xy0Yw−Yy0Zw−Zy0Ww−Wy−Xw0Xx−Yw0Yx−Zw0Zx−Ww0WxXy−Xx0Yy−Yx0Zy−Zx0Wy−Wx0⎤⎦⎥⎥⎥⎡⎣⎢⎢P1P2P3⎤⎦⎥⎥=0
Nerede Pn devri n: kamera matrisinin th satırı P. Önceki (büyük) matris denkleminin son satırı, ilk iki satırın doğrusal birleşimidir, bu nedenle ek bilgi getirmez ve dışarıda bırakılabilir.
Küçük bir duraklama, böylece zorlarımızı toplayalım. Bilinen her 3D-> 2D yazışma için önceki matris denkleminin oluşturulması gerektiğini unutmayın (en az 6 tane olmalıdır).
Şimdi, her nokta yazışması için, yukarıdaki matrisin ilk iki satırını hesaplayın, 2×12 matrislerin üst üste gelmesi ve yeni matris elde edilmesi A hangisi için
A⎡⎣⎢P1P2P3⎤⎦⎥=0
12 bilinmeyen ve (en azından) 12 denklemimiz olduğu için bu çözülebilir. Tek sorun şu ki önemsiz cevabı istemiyoruz
⎡⎣⎢P1P2P3⎤⎦⎥=0
Neyse ki zorlamak için tekil değer ayrışmasını (SVD) kullanabiliriz
∥⎡⎣⎢P1P2P3⎤⎦⎥∥=1
Denklemleri çözmek için matrisinin SVD'sini hesaplayın ve en küçük öz değerine karşılık gelen tekil vektörü seçin. Bu vektör, A matrisinin null vektörü ve aynı zamanda kamera matrisi için çözümdür . Sadece, ayrıştırılması ve form .AP[P1P2P3]TP
Şimdi nesneye olan mesafeyi bilmek istediniz. şöyle tanımlanır:P
P=K[R−RC]
burada , nesnelerin başlangıç noktasına göre kamera konumudur. Bu çözülebilecek hesaplayarak ler boş vektör.CPP
(Hartley, Zisserman - Bilgisayarlı Görmede Çoklu Görünüş Geometrisi)
Son olarak, iki kare için kamera konumunu hesapladığınızda, için iki denklemi çözerek bilinmeyen nesnelerin konumlarını (veya nesnenin bazı noktalarının konumlarını) hesaplayabilirsiniz :X
x1=P1Xx2=P2X
Bu, kamera matrislerini nasıl çözdüğümüzle neredeyse aynı şekilde gider:
(x1)xP1X=0(x2)xP2X=0
Ve bunun gibi.