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?
Odpowiedzi:
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
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 αv u v f αu=kuf αv=kvf ku kv u v
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.s u v
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.
Niektóre linki:
ftp://svr-ftp.eng.cam.ac.uk/pub/reports/mendonca_self-calibration.pdf
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×4 R 3×3 t
Aplikacje do wizji komputerowej koncentrują się na szacowaniu tej matrycy.
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×3 Z=0 H M=(X,Y,0)T m P=K[R|t]
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:H K[R|t] H1 H2 R1 R2 R3 [R|t]
Ze względu na redundancję należy znormalizować dzielenie przez, na przykład, element [3,4] macierzy.[R|t]
źródło
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 zwyklefocalLengthInMM / sensorWidthInMM * imageHeight
.źródło
focalLengthInMM / sensorWidthInMM * imageWidth
? Dlaczego zamiast tego wybierasz wysokość?