¿Cómo puedo proyectar un plano arbitrario identificado por 4 puntos sobre un plano 2D?
-
26-09-2019 - |
Pregunta
El asunto que estamos tratando de resolver el problema de la localización de un punto en dos representaciones diferentes de un avión. El primer avión que tenemos se hace girar para crear perspectiva; la segunda es una vista en 2D de ese mismo plano. Tenemos 4 puntos en cada uno de los planes que sabemos que son equivalentes. La pregunta es si tenemos un punto arbitrario en el plano 1, ¿cómo encontrar el punto correspondiente en el plano 2?
Es mejor probablemente para ilustrar el caso de uso con el fin de mejor aclarar la cuestión. Hemos ilustrado una imagen de la izquierda.
diagrama de diseño 2D del espacio
Así lo dado que tenemos son los cuadrados rojos de ambas imágenes. Tenga en cuenta que si es posible, me gustaría que sea posible que el espacio 2D no es necesariamente un cuadrado. Estos están disponibles para nosotros antes de tiempo y conocido. También tengo puntos verdes dispuestas en el plano de la primera imagen. Me gustaría ser capaz de hacer una proyección del punto en la imagen 1 en el espacio en la imagen 2.
Tenga en cuenta también para la imagen 1 no tengo una ventana definida o posición de los ojos. Sólo sé que el cuadrado rojo de la imagen 1 es una transformación de la imagen de forma cuadrada roja 2 y que la imagen 2 se encuentra en el espacio 2D.
Solución
Este es un caso especial de la búsqueda de correspondencias entre los cuadriláteros que preservan las líneas rectas. Estos por lo general se denominan transformaciones homográficas. Aquí, uno de los quads es un cuadrado, por lo que este es un caso especial popular. Puede Google en estos términos ( "quad quad", etc.) para encontrar explicaciones y código, pero aquí hay algunos para usted.
perspectiva Transformar Estimación
extraer una imagen de cuadrilátero a un rectángulo
proyectiva de urdido y cartografía
ProjectiveMappings para ImageWarping por Paul Heckbert.
La matemática no es particularmente agradable, pero no es tan difícil tampoco. También se puede encontrar un código de uno de los enlaces anteriores.