17 votos

Obtener la Matriz de Transformación de los puntos

He construido una pequeña aplicación C# que permite la visualización de transformaciones perpectivas con una matriz, en el espacio 2D XYW. Ahora me gustaría poder calcular la matriz a partir de las cuatro esquinas del cuadrado transformado. Aquí hay una captura de pantalla para ayudarte a entender con qué estoy trabajando:

Screenshot

La idea es permitir al usuario mover las esquinas del cuadrado y actualizar la matriz. Las esquinas se encuentran actualmente en (1,1), (1,-1), (-1,-1), (-1,1). ¿Existe un algoritmo que calcule una matriz de 3x3 con cuatro puntos 2D?

Si lo entiendo correctamente, cada matriz corresponde a un conjunto de cuatro puntos, y cada conjunto de cuatro puntos corresponde a una o más matrices equivalentes ("equivalente" significa "producir transformaciones idénticas").

Busqué un algoritmo para hacer esto, pero no tuve mucha suerte.

Descubrí que podía hacerlo creando ocho ecuaciones, una para cada variable en los cuatro puntos, y luego fijando uno de los valores de la matriz en uno, y resolviendo los otros ocho con álgebra. Sin embargo, las ecuaciones se vuelven demasiado complicadas para hacer todo esto con éxito en lápiz y papel.


Este es el proceso que usé para intentar que funcionara.

Así que esta es la fórmula básica de transformación de la matriz.

$ \begin {pmatrix}a & b & c \\ d & e & f \\ g & h & i \end {pmatrix} \begin {pmatrix}x \\ y \\ z \end {pmatrix}= \begin {pmatrix}ax+by+cz \\ dx+ey+fz \\ gx+hy+iz \end {pmatrix}$

El punto resultante se convierte entonces de coordenadas homogéneas a euclidiano.

$ \begin {pmatrix}x \\ y \\ z \end {pmatrix}$ = $ \begin {pmatrix} \frac {x}{z} \\ \frac {y}{z} \end {pmatrix}$

Así que dada una colección de puntos, los transformamos así.

$ \begin {pmatrix}a & b & c \\ d & e & f \\ g & h & i \end {pmatrix} \begin {pmatrix}x_{n} \\ y_{n} \\ z_{n} \end {pmatrix}= \begin {pmatrix}x'_{n} \\ y'_{n} \end {pmatrix}$

Estas son las fórmulas utilizadas para la transformación.

$x'_{n}=$$ \frac {ax_{n}+by_{n}+cz_{n}}{gx_{n}+hy_{n}+iz_{n}}$

$y'_{n}=$$ \frac {dx_{n}+ey_{n}+fz_{n}}{gx_{n}+hy_{n}+iz_{n}}$

Luego definimos cuatro puntos de base, que son las esquinas de nuestro cuadrado.

$x'_{0}=1$

$y'_{0}=1$

$z'_{0}=1$

$x'_{1}=1$

$y'_{1}=-1$

$z'_{1}=1$

$x'_{2}=-1$

$y'_{2}=-1$

$z'_{2}=1$

$x'_{3}=-1$

$y'_{3}=1$

$z'_{3}=1$

Esto nos da el siguiente sistema de ecuaciones, en la forma que nos permite determinar los puntos transformados de la matriz.

$x'_{0}=$$ \frac {a+b+c}{g+h+i}$

$y'_{0}=$$ \frac {d+e+f}{g+h+i}$

$x'_{1}=$$ \frac {a-b+c}{g-h+i}$

$y'_{1}=$$ \frac {d-e+f}{g-h+i}$

$x'_{2}=$$ \frac {-a-b+c}{-g-h+i}$

$y'_{2}=$$ \frac {-d-e+f}{-g-h+i}$

$x'_{3}=$$ \frac {-a+b+c}{-g+h+i}$

$y'_{3}=$$ \frac {-d+e+f}{-g+h+i}$

Ahora queremos invertir la transformación, y encontrar la matriz que produce los puntos anteriores. Dado que tenemos 9 incógnitas y 8 ecuaciones, necesitamos añadir otra ecuación.

$i=1$

Ahora todo lo que queda es resolver las ecuaciones del sistema para encontrar las fórmulas de los valores de la matriz. No soy lo suficientemente paciente ni lo suficientemente bueno en álgebra para hacer esto yo mismo, así que usé una calculadora en línea para resolver el sistema de ecuaciones. Las fórmulas que daba casi funcionaban, pero tenía algunos problemas con las coordenadas y.

Creo que esto se puede reducir a dos preguntas:

  1. ¿Están mal los cálculos anteriores, o la calculadora en línea tiene un error?

  2. ¿Hay un algoritmo más fácil para esto?

4voto

Por el momento no se puede hacer de forma totalmente automática. Algo de edición \cleaning se requerirá en cualquier caso. Y como dijo Mapperz, la tarea es mejor resolverla con herramientas especiales. ¿Sabe usted acerca de Rastreo fácil ? Este es un software comercial pero hay una versión antigua gratuita 8.65.

2voto

CodingBytes Puntos 102

Cuando la imagen de un cuadrado en el espacio puede ser un cuadrilátero arbitrario (un no paralelogramo), entonces el mapa en cuestión no puede ser lineal y no se obtiene aplicando una matriz a las coordenadas de los puntos originales en el espacio. En su lugar, las funciones del mapa son de la forma $$ \xi ={a_1 x+ b_1 y+ c_1 \over a_2 x+ b_2 y + c_2}\ , \qquad \eta ={a_3 x+ b_3 y+ c_3 \over a_4 x+ b_4 y + c_4}\ .$$ Aquí $( \xi , \eta )$ son coordenadas en la pantalla de la imagen, y $(x,y)$ son coordenadas en el plano en el que se encuentra el cuadrado original. Los coeficientes $a_1$ , $ \ldots $ , $c_4$ que aparecen en estas fórmulas dependen de las diversas elecciones realizadas: Ubicación de los orígenes en el plano original y en el plano de la imagen, sistemas de coordenadas adoptados en estos planos, posición de estos planos vs. el centro $O$ de la perspectiva utilizada.

Tal vez la siguiente fuente sea de alguna ayuda: http://www.geometrictools.com/Documentation/PerspectiveMappings.pdf

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X