Ocena pozycji kamery krok po kroku dla wizualnego śledzenia i markerów planarnych

21

Od jakiegoś czasu pracuję nad oszacowaniem pozycji kamery dla aplikacji rozszerzonej rzeczywistości i śledzenia wizualnego i myślę, że chociaż jest wiele szczegółowych informacji na temat zadania, wciąż istnieje wiele zamieszania i nieporozumień.

Myślę, że kolejne pytania zasługują na szczegółową odpowiedź krok po kroku.

  • Jakie są nieodłączne elementy aparatu?
  • Co to są elementy zewnętrzne aparatu?
  • Jak obliczyć homografię z markera płaskiego?
  • Jeśli mam homografię, jak mogę uzyskać pozę do kamery?
Jav_Rock
źródło
Rozmyślam nad renormalizacją, którą wykonujesz: 1. H to homografia znaleziona na podstawie danych przy użyciu procedury (powiedzmy SVD). 2. inv (K) * H = A to rzecz, nad którą pracujesz tutaj. Następnie tworzysz q1 = a1 / norm (a1) i q2 = a2 / norm (a2) jako ortonormalne kolumny macierzy obrotu, i czynisz q3 = q1xq2 ... Następnie bierzesz t / (coś), aby uzyskać wektor translacji. Jak to jest, możesz po prostu podzielić q1 i q2 według różnych rzeczy i jak wybrać, przez co podzielić t? Czy też jest to pomysł, że procedura SVD i mnożenie przez inv (K) dają coś blisko, ale nie całkiem ortogonalnej / ortonormalnej macierzy rotacji, więc th
user2600616
Ale jak mogę zdobyć punkt 3D (X, Y, 1)?
waschbaer,

Odpowiedzi:

19

Ważne jest, aby zrozumieć, że jedynym problemem tutaj jest uzyskanie parametrów zewnętrznych. Wartości wewnętrzne kamery można mierzyć off-line i do tego celu istnieje wiele aplikacji.

Jakie są nieodłączne elementy aparatu?

Aparat wewnętrzne parametry zazwyczaj nazywa się macierz kalibracji kamery, . Możemy pisaćK

K=[αusu00αvv0001]

gdzie

  • i α V jest współczynnikiem skalowania w U i V współrzędnych kierunkach i jest proporcjonalna do ogniskowej F aparatu: α U = k u f i α V = K v C . k u i k v to liczba pikseli na jednostkę odległości wkierunkach u i v .αuαvuvfαu=kufαv=kvfkukvuv

  • nazywa się punktem głównym, zwykle współrzędnymi środka obrazu.c=[u0,v0]T

  • jest pochyleniem, tylko niezerowym, jeśli u i v nie są prostopadłe.suv

Kamera jest skalibrowana, gdy znane są wewnętrzne wartości. Można to zrobić łatwo, więc nie jest to cel w wizji komputerowej, ale trywialny krok off-line.

Co to są elementy zewnętrzne aparatu?

Zewnętrzne elementy aparatu lub parametry zewnętrzne jest matrycą 3 × 4 , która odpowiada transformacji euklidesowej ze światowego układu współrzędnych do układu współrzędnych kamery. R oznacza 3 x 3 macierzy rotacji i t do translacji.[R|t]3×4R3×3t

Aplikacje do wizji komputerowej koncentrują się na szacowaniu tej matrycy.

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

Jak obliczyć homografię z markera płaskiego?

Homografia to jednorodna matryca , która odnosi się do płaszczyzny 3D i projekcji obrazu. Jeśli mamy płaszczyznę Z = 0, homografia H odwzorowuje punkt M = ( X , Y , 0 ) T na tej płaszczyźnie i odpowiadający jej punkt 2D m pod rzutem P = K [ R | t ] jest3×3Z=0HM=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

Aby obliczyć homografię, potrzebujemy par punktowych kamera światowa. Jeśli mamy znacznik planarny, możemy przetworzyć jego obraz w celu wyodrębnienia elementów, a następnie wykryć te elementy w scenie, aby uzyskać dopasowania.

Potrzebujemy tylko 4 par do obliczenia homografii za pomocą bezpośredniej transformacji liniowej.

Jeśli mam homografię, jak mogę uzyskać pozę do kamery?

Homografia i kamera stanowią K [ R | t ] zawierają te same informacje i można je łatwo przekazywać między sobą. Ostatnia kolumna obu to wektor translacji. Kolumna jeden H 1 i dwa H 2 z homography również kolumna R 1 i dwa R 2 matrycy kamery ułożenia. Pozostawia się ją na kolumnę three R 3 w [ R | t ] , a ponieważ musi być ortogonalny, można go obliczyć jako krzyżowy produkt z kolumn pierwszego i drugiego:HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

Ze względu na redundancję należy znormalizować dzielenie przez, na przykład, element [3,4] macierzy.[R|t]

Jav_Rock
źródło
4
Myślę, że mylące jest twierdzenie, że kalibracja jest „łatwa, a nie celem CV”. W zwykłym przypadku musimy również oszacować parametry zniekształcenia. Zamiast samokalibracji zaleciłbym kalibrację planarną (Zhang - nowa elastyczna technika kalibracji kamery), ponieważ jest bardziej elastyczna, jeśli można wykonać oddzielną procedurę kalibracji. Masz również mały błąd w „Jeśli mam homografię, jak mogę uzyskać pozę kamery?” ponieważ nie bierzesz pod uwagę kalibracji (H_ {calib} = K ^ -1H).
buq2
3
pozycja kamery z homografii jest nieprawidłowa. Można to zrobić na kilka sposobów - niektóre z nich są wysoce nietrywialne.
mirror2image
Nie rozumiem, dlaczego jest źle. Obliczam to w ten sposób i działa. Dlaczego mówisz, że to źle?
Jav_Rock
3
W ostatniej sekcji napisałeś, że H ^ 1 i R ^ 1 i równe, ale w trzeciej sekcji stwierdzasz, że H = K [RT], co oznaczałoby, że R ^ 1 to w rzeczywistości K ^ -1H ^ 1. Nie jest to jednak do końca prawdą, ponieważ istnieje nieskończona liczba H, która spełni równania i spowoduje problemy przy rozwiązywaniu R ^ 1, R ^ 2 i T (skala nieznana). Twoja odpowiedź nie uwzględnia solidnej kalibracji wewnętrznej i zniekształcenia, a niektóre równania są błędne, z tego powodu nie jest to dobra odpowiedź na pytanie.
buq2
Tak, brakowało mi macierzy kalibracji w kroku trzecim, ponieważ wziąłem to z mojego kodu i mnożę przez K w innej funkcji kodów.
Jav_Rock
3

Bardzo dobrze wyjaśniając przypadek dwuwymiarowy, odpowiedź zaproponowana przez Jav_Rock nie zapewnia prawidłowego rozwiązania dla pozycji kamery w przestrzeni trójwymiarowej. Zauważ, że dla tego problemu istnieje wiele możliwych rozwiązań.

Ten dokument zawiera zamknięte formuły do ​​rozkładania homografii, ale formuły są nieco złożone.

OpenCV 3 już implementuje dokładnie ten rozkład ( decomposeHomographyMat ). Biorąc pod uwagę homografię i poprawnie skalowaną macierz wewnętrzną, funkcja zapewnia zestaw czterech możliwych rotacji i tłumaczeń.

Matryca wewnętrzna w tym przypadku musi być podana w jednostkach pikseli, co oznacza, że ​​zwykle jest to twój główny punkt, (imageWidth / 2, imageHeight / 2)a ogniskowa zwykle focalLengthInMM / sensorWidthInMM * imageHeight.

Emiswelt
źródło
Co to jest poprawnie wyskalowana matryca wewnętrzna?
Guig
1
Zaktualizowałem swoją odpowiedź. Patrz wyżej.
Emiswelt,
Hej, Emiswelt, czy nie jest ogniskowa focalLengthInMM / sensorWidthInMM * imageWidth? Dlaczego zamiast tego wybierasz wysokość?
El Marce