Szacowanie pozycji 3D za pomocą kamery 2D

9

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?

Ktuncer
źródło
Czy znasz literaturę w tej dziedzinie? Jeśli nie, mogę polecić kilka artykułów, ale ostrzegam: matematyka jest zaangażowana.
Emre
@ emre byłoby świetnie, gdybyś mógł podać kilka wskazówek. Matematyka nie stanowi problemu, kochamy matematykę.
Ktuncer,
@emre Rzuciłem okiem na artykuł przeglądowy .. To jest więcej do śledzenia, mogę łatwo śledzić obiekt, to nie jest problem. Mogę wskazać, w którym pikselu znajduje się obiekt. Problem polega na tym, że obiekt znajduje się w przestrzeni 3D. czy to możliwe? Zasadniczo mam inny obiekt w przestrzeni 3D, który znam właściwości, których mogę użyć jako ramy odniesienia, ale to wszystko.
Ktuncer,
Przepraszam, zły papier. Być może możesz dostosować oparte na wizji śledzenie trajektorii 3D dla nieznanych środowisk [PDF]? Używają kamery stereo; czy to dla ciebie możliwość?
Emre,

Odpowiedzi:

15

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: XXω). 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=P.X

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=[0-v3)v2)v3)0-v1-v2)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:

[0-wyw0-x-yx0][P.1,1P.1,2)P.1,3)P.1,4P.2),1P.2),2)P.2),3)P.2),4P.3),1P.3),2)P.3),3)P.3),4]X=[P.3),4W.y-P.2),1Xw-P.2),2)Yw-P.2),4W.w+P.3),1Xy-P.2),3)Zw+P.3),2)Yy+P.3),3)ZyP.1,4W.w+P.1,1Xw-P.3),4W.x+P.1,2)Yw-P.3),1Xx+P.1,3)Zw-P.3),2)Yx-P.3),3)ZxP.2),4W.x+P.2),1Xx-P.1,4W.y-P.1,1Xy+P.2),2)Yx-P.1,2)Yy+P.2),3)Zx-P.1,3)Zy]=0

Przy odrobinie refaktoryzacji możemy uzyskać matrycę projekcji P. poza matrycą:

[0000-Xw-Yw-Zw-W.wXyYyZyW.yXwYwZwW.w0000-Xx-Yx-Zx-W.x-Xy-Yy-Zy-W.yXxYxZxW.x0000][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-Rdo]

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.

buq2
źródło
Czy słusznie jest powiedzieć, że twój sposób obliczenia położenia kamery 3D jest równoważny z OpenCV rozwiązaćPnp? docs.opencv.org/2.4/modules/calib3d/doc/… (wyszukaj na stronie rozwiązaniePlikP. Nie mogę wkleić adresu URL za pomocą #)
gregoiregentil