Eu tenho uma câmera fixa com conhecidos cameraMatrix
e distCoeffs
. Eu também tenho um tabuleiro de xadrez que também é fixo transform
e o rotation
vetor e também são calculados usando solvePnP
.
Gostaria de saber como é possível obter a localização 3D de um ponto 2D no mesmo plano em que o tabuleiro de xadrez está localizado, como na figura abaixo:
Uma coisa é certa: o Z desse ponto é 0, mas como obter X e Y desse ponto.
opencv
2d-3d-conversion
EBAG
fonte
fonte
Respostas:
Você pode resolver isso com 3 etapas simples:
Passo 1:
Calcule o vetor de direção 3d, expresso no quadro de coordenadas da câmera, do raio correspondente ao ponto de imagem 2D especificado, invertendo o modelo de projeção da câmera:
Passo 2:
Calcule a direção 3d do vetor desse raio no quadro de coordenadas anexado ao tabuleiro de xadrez, usando a pose relativa entre a câmera e o tabuleiro de xadrez:
Etapa 3:
Encontre o ponto 3d desejado calculando a interseção entre o raio 3d e o plano do tabuleiro de xadrez com Z = 0:
fonte
Como o seu caso é limitado às planícies, a maneira mais simples é usar a homografia.
Primeiro, não distorça sua imagem. Em seguida, use findHomography para calcular a matriz de homografia que transforma sua coordenada de pixel (imagem) em coordenada real (espaço euclidiano, por exemplo, em cm). Algo semelhante a este:
fonte