Mam kamerę (iPhone), na obrazie mam obiekt sterujący 3D, który znam bardzo dobrze. (Mój obiekt kontrolny). W ruchu jest także drugi obiekt. Ostatecznym celem jest ustalenie trójwymiarowej trajektorii poruszającego się obiektu na określony czas. (Śledzenie)
Chciałbym zapytać, czy mogę się dowiedzieć?
Odległość telefonu do obiektu kontrolnego (dla celów dyskusji załóżmy, że kamera znajduje się na pewnej wysokości i pewna odległość nie jest znana, ale kamera jest prostopadła do znanej powierzchni)
Drugi obiekt, w którym mogę zlokalizować obiekt w każdej kolejnej ramce. Moim celem jest oszacowanie jego trajektorii 3D, jak wskazałem powyżej.
Pytanie dodatkowe, możemy ustawić system tak, aby odległość telefonu od obiektu kontrolnego można było ustawić (chociaż nie jest to preferowane), czy pomogłoby mi to z drugim punktem?
Odpowiedzi:
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 Z różnią się dla każdego punktu, czy to punkt 2D, czy 3D). Jednorodna prezentacja współrzędnych ułatwia matematykę.
Matryca kamery to3 × 4 matryca projekcyjna ze świata 3D na czujnik obrazu:
Gdziex 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:
Warto również zauważyć, że produkcja krzyżowav × v = 0 .
Teraz spróbujmy rozwiązać macierz projekcjiP. z poprzednich równań. Pomnóżmy równanie projekcji z lewej strony przezx macierz krzyżowa produktu:
Aha! Wynik musi być wektorem zerowym. Jeśli teraz otworzymy równanie, otrzymamy:
Przy odrobinie refaktoryzacji możemy uzyskać matrycę projekcjiP. poza matrycą:
GdzieP.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 stos2 × 12 macierze jedna na drugiej i otrzymacie nową macierz ZA dla którego
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
Na szczęście możemy wymusić rozkład wartości pojedynczej (SVD)
Aby rozwiązać równania, obliczyć SVD macierzyZA i 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:
gdziedo to 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ównaniaX :
Co dzieje się prawie tak samo, jak w przypadku rozwiązania matryc aparatu:
I tak dalej.
źródło