4 votos

¿Cómo encontrar una matriz de transformación de 2D a 3D para la proyección, la rotación y la traslación en perspectiva?

He leído Encontrar una matriz de transformación 3D basada en las coordenadas 2D pero creo que mi situación es diferente porque creo que necesito una matriz 4x3, no una matriz 3x3. No estoy seguro, pero esto podría ser porque tengo la rotación y la traducción, además de sólo la transformación de la perspectiva.

Esta es la configuración:

Supongamos que tenemos varios puntos 2D en una imagen (x1,y1) (x2,y2) (x3,y3) (x4,y4)

suponga que también tiene varios puntos 3D correspondientes en un arbitrario plano: (X1,Y1,Z1) (X2,Y2,Z2) (X3,Y3,Z3) (X4,Y4,Z4)

para transformar de 2D a 3D utilizando coordenadas homogéneas podemos utilizar

(X,Y,Z,W) = M*(x,y,1). Aquí M debe ser una matriz de 4x3

Así, un punto 2D-homogenousCoords se transforma en un punto 3D-homogenousCoords.

Entonces, podría dividir (X,Y,Z,W) por W para obtener (X,Y,Z,1), que es una forma en la que puedo leer los verdaderos valores X,Y,Z en coordenadas "regulares".

Ahora, aquí hay un problema. No sé cuál es W para cualquiera de mis puntos (X,Y,Z). (Si supiera el W de cada punto, creo que hay una manera estándar de álgebra lineal para encontrar M.)

Así que para encontrar M, multiplico las cosas de la siguiente manera:

X = M11*x + M12*y + M13*1

Y = M21*x + M22*y + M23*1

Z = M31*x + M32*y + M33*1

W = M41*x + M42*y + M43*1

pero estas X,Y,Z,W son las coordenadas homogéneas, así que para obtener las coordenadas X,Y,Z "reales":

X = (M11*x + M12*y + M13*1) / (M41*x + M42*y + M43*1)

Y = (M21*x + M22*y + M23*1) / (M41*x + M42*y + M43*1)

Z = (M31*x + M32*y + M33*1) / (M41*x + M42*y + M43*1)

Además, puedo eliminar un parámetro de cada ecuación multiplicando cada ecuación por (1/M43)/(1/M43). Entonces también puedo cambiar el nombre de la relación de los parámetros. Me queda:

X = (a1*x + a2*y + a3*1) / (a10*x + a11*y + 1)

Y = (a4*x + a5*y + a6*1) / (a10*x + a11*y + 1)

Z = (a7*x + a8*y + a9*1) / (a10*x + a11*y + 1)

Finalmente introduzco todos los valores (X,Y,Z) y (x,y,z) que tengo en múltiples instancias de estas ecuaciones y reordeno algebraicamente todo para obtener la forma clásica A=Bx, donde x es el vector de a's desconocidas (a1 ... a11).

Una vez que tenga de a1 a a11, podría volver atrás y averiguar cuáles eran los componentes originales de M. En cualquier caso, ahora puedo proyectar puntos de 2D a 3D utilizando la transformación de perspectiva, incluso si hay rotación o traslación.

Mi pregunta es si esta es la mejor manera de encontrar este tipo de transformación general de perspectiva 2D a 3D.

0 votos

0 votos

0 votos

@user7530 Esos enlaces son muy útiles. Parece que encontrar la proyección de la perspectiva se reduce a resolver un sistema de ecuaciones lineales. Todavía me pregunto cuáles son exactamente los pasos para pasar de la ecuación matricial original al sistema de ecuaciones.

3voto

Rob Dickerson Puntos 758

Parece que estás tratando de resolver un mapa de puntos 2D a puntos 3D, así que estoy un poco confundido... una transformación de proyección mapearía los puntos 3D a los puntos 2D (y la inversa es, por supuesto, imposible, ya que cada punto en el plano de proyección podría estar en cualquier lugar en un rayo de la cámara a través del plano).

A continuación, fíjate en que no hay diferencia entre transformar primero un objeto en 3D, y luego proyectarlo a través de una cámara fija, frente a dejar el objeto en su sitio y proyectarlo a través de una cámara de posición y orientación desconocidas. En este caso adoptaré el primer enfoque.

Tenemos unos puntos en 3D y les aplicamos una transformación afín, luego proyectamos a través de una cámara en el origen mirando hacia abajo el $z$ eje, con el plano de proyección que pasa por $z=1$ . Esto hace que la matriz de proyección $P: (x,y,z) \to (u,v,w)$ fácil: es sólo la identidad.

Antes de proyectar aplicamos alguna transformación afín $Mq + t$ a los puntos 3D $q$ . Obsérvese que no restringimos $M$ para que sólo rote y escale aquí: para ello tendríamos que añadir restricciones adicionales (no lineales) a los coeficientes de $M$ . El resumen es que tendrá que suministrar más del mínimo teórico de cuatro puntos correspondientes para determinar el mapa (y obtendrá cizallamiento si sus puntos correspondientes no provienen de un movimiento + proyección euclidiana de buena fe).

Así que ahora el mapa total se puede escribir como

$$\left[\begin{array}{c}u\\v\\w\end{array}\right] = \left[\begin{array}{cccc}m_{11} & m_{12} & m_{13} & t_x\\m_{21} & m_{22} & m_{23} & t_y\\m_{31} & m_{32} & m_{33} & t_z\end{array}\right]\left[\begin{array}{c}x\\y\\z\\1\end{array}\right].$$

Desde $(u,v,w) \sim (u/w,v/w,1)$ este mapa es invariante de la escala, por lo que también podríamos establecer $m_{33} = 1$ . También podemos escribirlo en forma de bloque (que resultará útil) como

$$\left[\begin{array}{c}u\\v\\w\end{array}\right] = \left[\begin{array}{c}N_{uv}\\N_w\end{array}\right]\left[\begin{array}{c}x\\y\\z\\1\end{array}\right].$$

Como usted dice, sólo sabemos $u/w$ y $v/w$ para los puntos correspondientes, no $u,v,w$ . Bueno, $$\left[\begin{array}{c}u/w\\v/w\end{array}\right] = N_{uv}\left[\begin{array}{c}x\\y\\z\\1\end{array}\right]/N_w \left[\begin{array}{c}x\\y\\z\\1\end{array}\right],$$ or $$N_w \left[\begin{array}{c}x\\y\\z\\1\end{array}\right]\left[\begin{array}{c}u/w\\v/w\end{array}\right] = N_{uv}\left[\begin{array}{c}x\\y\\z\\1\end{array}\right]$$

que es un sistema de dos ecuaciones lineales en 11 incógnitas. Introduciendo $5\frac{1}{2}$ Los puntos correspondientes le permitirán resolver $N$ .

0 votos

Esta respuesta es muy útil y creo que puedo seguir la misma lógica para el caso que me interesa que es de 2D a 3D. Sobre este punto, no veo por qué proyectar de 2D a 3D es imposible siempre y cuando proyecte sobre un plano en 3D. El contexto de este problema está en la visión por ordenador. Quiero hacer una foto de una pared que tiene fiduciales. Conozco la ubicación 3D de los fiduciales por haberlos medido, y encuentro la ubicación 2D de los fiduciales en la imagen. Al encontrar el mapeo 2D a 3D, puedo determinar la posición proyectada en 3D de cualquier punto en la imagen.

0 votos

Sí, eso debería funcionar igual, lo más fácil es probablemente parametrizar el espacio usando (u, v, n) donde u y v son dos vectores tangentes ortogonales de tu plano y n es la normal del plano, entonces todo lo anterior se aplica casi sin cambios.

0voto

user106688 Puntos 6

Supongo que lo que necesitas lo puedes encontrar en este artículo de arXiv.org aquí: Una nueva forma de factorizar las cámaras lineales .

La introducción de las detiniciones 2.1 y 2.2 en este artículo permite convertir las coordenadas 3D en coordenadas 2D y en sentido contrario.

Se introducen principalmente para factorizar $3\times 4$ matrices de la cámara en la visión por ordenador. Para las definiciones de los factores de las matrices izquierda y central/paralela, es mejor consultar otro artículo de arXiv.org aquí para más interpretaciones.

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