Mam stały aparat ze znanymi cameraMatrix
i distCoeffs
. Mam również szachownicę, która jest również naprawiona, transform
a rotation
wektor jest również obliczany za pomocą solvePnP
.
Zastanawiam się, w jaki sposób można uzyskać lokalizację 3D punktu 2D na tej samej płaszczyźnie, na której znajduje się szachownica, jak na poniższym obrazku:
Jedno jest pewne, że Z tego punktu wynosi 0, ale jak uzyskać X i Y tego punktu.
opencv
2d-3d-conversion
EBAG
źródło
źródło
Odpowiedzi:
Możesz to rozwiązać za pomocą 3 prostych kroków:
Krok 1:
Obliczyć wektor kierunku 3d, wyrażony w ramce współrzędnej kamery, promienia odpowiadającego danemu punktowi obrazu 2d, odwracając model projekcji kamery:
Krok 2:
Obliczyć kierunek 3d wektora tego promienia w ramce współrzędnych przymocowanej do szachownicy, używając względnej pozycji między kamerą a szachownicą:
Krok 3:
Znajdź żądany punkt 3d, obliczając przecięcie promienia 3d z płaszczyzną szachownicy za pomocą Z = 0:
źródło
Ponieważ twoja sprawa ogranicza się do równin, najprostszym sposobem jest użycie homografii.
Najpierw cofnij zniekształcenie obrazu. Następnie użyj findHomography, aby obliczyć macierz homografii, która przekształci twoją współrzędną pikselową (obraz) w rzeczywistą współrzędną (przestrzeń euklidesowa np. W cm). Coś podobnego do tego:
źródło