W skalibrowanej platformie stereoskopowej, w jaki sposób można uzyskać „matryce kamery” potrzebne do wdrożenia algorytmu triangulacji 3D?

Próbuję zaimplementować (relatywnie prostą) liniową homogeniczną (DLT) metodę triangulacji 3D z „Multiple View Geometry” Hartleya i Zissermana (s. 12.2), w celu wdrożenia ich pełnego „optymalnego algorytmu” w przyszłości. W tej chwili na podstawieto pytanie, Próbuję go uruchomić w Matlab, a później przeniesie go do C ++ i OpenCV, testując zgodność po drodze.

Problem polega na tym, że nie wiem, jak korzystać z danych, które posiadam. Skalibrowałem moją platformę stereo i uzyskałem dwie wewnętrzne matryce kamery, dwa wektory współczynników zniekształceń, macierz rotacji i wektor translacji odnoszące się do dwóch kamer, a także podstawowe i podstawowe macierze. Mam także współrzędne 2D dwóch punktów, które mają być odpowiednikami pojedynczego punktu 3D w układach współrzędnych dwóch obrazów (wykonanych odpowiednio przez pierwszą i drugą kamerę).

Algorytm przyjmuje jako dane wejściowe dwie współrzędne punktu i dwie macierze kamer 4x3 „P i P”. Nie są to oczywiście wewnętrzne matryce kamer (M, M ') uzyskane z kalibracji, ponieważ dla nich są one 3x3, a także dlatego, że sama projekcja z nich używa punktu 3D w dwóch różnych układach współrzędnych, czyli - zewnętrzna ( rotacja / tłumaczenie) brakuje danych.

Książka H&Z zawiera informacje (rozdział 9) na temat odzyskiwania wymaganych macierzy z podstawowej lub podstawowej macierzy przy użyciu rozkładu SVD, ale z dodatkowymi problemami własnymi (np. Niejednoznacznością skali). Czuję, że tego nie potrzebuję, ponieważ mam wyraźnie zdefiniowaną rotację i tłumaczenie.

Pytanie brzmi zatem: czy byłoby poprawne użycie pierwszej wewnętrznej macierzy, z dodatkową kolumną zer jako pierwszej „matrycy kamery” (P = [M | 0]), a następnie pomnożenie drugiej wewnętrznej macierzy przez zewnętrzną macierz składa się z macierzy rotacji i wektora translacji jako dodatkowej kolumny, aby uzyskać drugą wymaganą „matrycę kamery” (P '= M' * [R | t])? A może powinno być inaczej?

Dzięki!

questionAnswers(1)

yourAnswerToTheQuestion