Jeśli obiekt ma 6 znanych punktów (znane współrzędne 3D, X, Y i Z) możesz obliczyć położenie kamery związane z układem współrzędnych obiektów.
Najpierw podstawy.
Współrzędna jednorodna jest wektorową prezentacją współrzędnej euklidesowej ( X, Y, Z) w którym dołączyliśmy tzw. współczynnik skali ω tak, że homogeniczna współrzędna jest X =ω[XYZ1]T.. W swoich własnych obliczeniach staraj się zachowaćω = 1 tak często, jak to możliwe (co oznacza, że „normalizujesz” jednorodną współrzędną dzieląc ją na ostatni element: X ←Xω). Możemy również zastosować jednorodną prezentację dla punktów 2D, takich jakx =ω [XY1] (pamiętaj, że te ω , X, Y i Zróżnią się dla każdego punktu, czy to punkt 2D, czy 3D). Jednorodna prezentacja współrzędnych ułatwia matematykę.
Matryca kamery to 3 × 4 matryca projekcyjna ze świata 3D na czujnik obrazu:
x =PX
Gdzie x jest punktem na czujniku obrazu (z jednostkami pikseli) i X jest rzutowanym punktem 3D (powiedzmy, że ma milimetry jako swoje jednostki).
Pamiętamy, że iloczyn krzyżowy między dwoma wektorami 3 można zdefiniować jako mnożenie macierzy-wektora tak, że:
v × u =( v)xu =⎡⎣⎢0v3)-v2)-v3)0v1v2)-v10⎤⎦⎥u
Warto również zauważyć, że produkcja krzyżowa v × v = 0.
Teraz spróbujmy rozwiązać macierz projekcji P.z poprzednich równań. Pomnóżmy równanie projekcji z lewej strony przezxmacierz krzyżowa produktu:
( x)xx =( x)xP.X = 0
Aha! Wynik musi być wektorem zerowym. Jeśli teraz otworzymy równanie, otrzymamy:
⎡⎣⎢0w- y- w0xy- x0⎤⎦⎥⎡⎣⎢P.1 , 1P.2 , 1P.3 , 1P.1 , 2P.2 , 2P.3 , 2P.1 , 3P.2 , 3P.3 , 3P.1 , 4P.2 , 4P.3 , 4⎤⎦⎥X=⎡⎣⎢P.3 , 4W.y-P.2 , 1Xw -P.2 , 2Yw -P.2 , 4W.w +P.3 , 1Xy-P.2 , 3Zw +P.3 , 2Yy+P.3 , 3ZyP.1 , 4W.w +P.1 , 1Xw -P.3 , 4W.x +P.1 , 2Yw -P.3 , 1Xx +P.1 , 3Zw -P.3 , 2Yx -P.3 , 3ZxP.2 , 4W.x +P.2 , 1Xx -P.1 , 4W.y-P.1 , 1Xy+P.2 , 2Yx -P.1 , 2Yy+P.2 , 3Zx -P.1 , 3Zy⎤⎦⎥= 0
Przy odrobinie refaktoryzacji możemy uzyskać matrycę projekcji P. poza matrycą:
⎡⎣⎢⎢⎢0Xw- Xy0Yw- Yy0Zw- Zy0W.w- W.y- Xw0Xx- Yw0Yx- Zw0Zx- W.w0W.xXy-Xx0Yy-Yx0Zy-Zx0W.y-W.x0⎤⎦⎥⎥⎥⎡⎣⎢⎢P.1P.2)P.3)⎤⎦⎥⎥= 0
Gdzie P.n jest transpozycja n: th rząd matrycy kamery P.. Ostatni wiersz poprzedniego (dużego) równania macierzowego jest liniową kombinacją pierwszych dwóch wierszy, więc nie przynosi żadnych dodatkowych informacji i można go pominąć.
Mała przerwa, abyśmy mogli zebrać nasze mocne strony. Należy zauważyć, że poprzednie równanie macierzowe musi zostać utworzone dla każdej znanej korespondencji 3D-> 2D (musi być ich co najmniej 6).
Teraz, dla każdej korespondencji punktowej, oblicz pierwsze dwa rzędy powyższej macierzy, ułóż je w stos 2 × 12 macierze jedna na drugiej i otrzymacie nową macierz ZA dla którego
ZA⎡⎣⎢P.1P.2)P.3)⎤⎦⎥= 0
Ponieważ mamy 12 niewiadomych i (co najmniej) 12 równań, można to rozwiązać. Jedyny problem polega na tym, że nie chcemy mieć banalnej odpowiedzi gdzie
⎡⎣⎢P.1P.2)P.3)⎤⎦⎥= 0
Na szczęście możemy wymusić rozkład wartości pojedynczej (SVD)
∥⎡⎣⎢P.1P.2)P.3)⎤⎦⎥∥ = 1
Aby rozwiązać równania, obliczyć SVD macierzy ZAi wybierz wektor w liczbie pojedynczej odpowiadający najmniejszej wartości własnej. Ten wektor jest wektorem zerowym macierzy A, a także rozwiązaniem matrycy kameryP.. Po prostu rozpakuj[P.1P.2)P.3)]T. i forma P..
Teraz chciałeś poznać odległość do obiektu. P. jest zdefiniowany jako:
P.= K.[R- R C]
gdzie doto lokalizacja kamery względem początku obiektów. Można to rozwiązać zP. obliczając P.s zerowy wektor.
(Hartley, Zisserman - Geometria wielu widoków w wizji komputerowej)
Na koniec, obliczając położenie kamery dla dwóch klatek, możesz obliczyć położenie nieznanych obiektów (lub położenia niektórych punktów obiektu), rozwiązując dwa równania X:
x1=P.1Xx2)=P.2)X
Co dzieje się prawie tak samo, jak w przypadku rozwiązania matryc aparatu:
(x1)xP.1X = 0(x2))xP.2)X = 0
I tak dalej.