Tengo una cámara fija con conocidos cameraMatrix
y distCoeffs
. También tengo un tablero de ajedrez que también está arreglado, transform
y los rotation
vectores también se calculan usando solvePnP
.
Me pregunto cómo es posible obtener la ubicación 3D de un punto 2D en el mismo plano en el que se encuentra el tablero de ajedrez, como en la imagen a continuación:
Una cosa segura es que la Z de ese punto es 0, pero cómo obtener X e Y de ese punto.
opencv
2d-3d-conversion
EBAG
fuente
fuente
Respuestas:
Puede resolver esto con 3 simples pasos:
Paso 1:
Calcule el vector de dirección 3D, expresado en el marco de coordenadas de la cámara, del rayo correspondiente al punto de imagen 2D dado invirtiendo el modelo de proyección de la cámara:
Paso 2:
Calcule la dirección 3D del vector de este rayo en el marco de coordenadas adjunto al tablero de ajedrez, usando la pose relativa entre la cámara y el tablero de ajedrez:
Paso 3:
Encuentre el punto 3d deseado calculando la intersección entre el rayo 3d y el plano del tablero de ajedrez con Z = 0:
fuente
Dado que su caso se limita a las llanuras, la forma más sencilla es utilizar la homografía.
Primero distorsiona tu imagen. Luego use findHomography para calcular la matriz de Homography que transforma su coordenada de píxeles (imagen) en coordenada real (espacio euclidiano, por ejemplo, en cm). Algo similar a este:
fuente