Calibración de la cámara / modelo de cámara con orificio de pasador y elaboración de la posición 3d

10

Tengo una cámara calibrada y tengo los parámetros intrínsecos. También tengo los parámetros extrínsecos relativos a un punto (el origen mundial) en una superficie plana en el mundo real. Este punto lo he establecido como origen en las coordenadas del mundo real [0,0,0] con una normal de [0,0,1].

A partir de estos parámetros extrínsecos, puedo calcular la posición y la rotación de la cámara en las coordenadas 3D del plano mundial usando esto aquí: http://en.wikipedia.org/wiki/Camera_resectioning

Ahora tengo un segundo punto del que he extraído las coordenadas de la imagen para [x, y]. ¿Cómo obtengo ahora la posición 3D de este punto en el sistema de coordenadas mundial?

Creo que la intuición aquí es que tengo que trazar un rayo que va desde el centro óptico de la cámara (para el que ahora tengo la posición 3D como se describe anteriormente), a través del plano de imagen [x, y] de la cámara y luego a través de mi plano del mundo real que definí en la parte superior.

Ahora puedo intersecar un rayo 3d de coordenadas mundiales con un plano como sé normal y señalarlo en ese plano. Lo que no entiendo es cómo descubro la posición y dirección 3D cuando sale del plano de la imagen a través de un píxel. Es la transformación a través de diferentes sistemas de coordenadas lo que me confunde.

leopardo
fuente
Verifique esta respuesta, puede ayudar. Si crees que algo puede / podría completarse, solo dímelo. dsp.stackexchange.com/a/2737/1473
Jav_Rock

Respuestas:

6

Si tienes extrínsecos, entonces es muy fácil. Tener extrínsecos es lo mismo que tener "pose de cámara" y lo mismo que tener la homografía. Mira esta publicación en stackoverflow.

Tienes extrínsecos, también llamados pose de cámara, que se describe como una traducción y una rotación:

Pose=[R|t]=[R11R12R13txR21R22R23tyR31R32R33tz]

Puedes obtener Homografía de Pose de esta manera:

H=1tz[R1xR2xtxR1yR2ytyR1zR2ztz]

Luego, puede proyectar sus puntos 2D en los puntos 3D correspondientes multiplicando la homografía por los puntos:

p2D=[xy1] add para que sean homogéneosz=1

p3D=Hp2D

p=p/p(z) Normalizar los puntos

Jav_Rock
fuente
¿Qué quieres decir con p (z) aquí?
Belal Homaidan
3

Tiene dos opciones: utilizar la proyección hacia atrás o la proyección entre dos planos (homografía).

Con la proyección hacia atrás, toma una pseudo inversa de la matriz de su cámara y multiplica el resultado con su presentación homogénea del punto de imagen:P

P=K[RRC]Xreprojected=P+x

Ahora tiene una línea 3D que recorre el centro de la cámara y el punto . Si lo desea, puede convertir esto en una presentación más fácil de tratar. Por ejemplo, con un vector de punto y dirección (recuerde normalizar las coordenadas homogéneas tal que el factor de escala antes de los cálculos reales):X V = ω [ X Y Z 1 ] T ω = 1CXV=ω[XYZ1]Tω=1

u=XreprojectedCv=uuL(t)=C+tv

Si tiene el plano puede resolver la ecuación para .Π=[π1π2π3π4]T,π1X+π2Y+π3Z+π4=0L(t)=Πt

Si decide utilizar la homografía, debe calcular la matriz de homografía que se define como la proyección entre el plano de la imagen y el plano del sensor de la cámara:3×3H

Xplane=[XY01]Tx=PXplane=H[XY1]T

Ahora, si sabe : x

Xplane=H1x

Si no calculó la mientras calibraba la cámara (probablemente usando transformación lineal directa, DLT), puede usar la siguiente formulación:H

H=R+1dTNT

Donde es la instancia de la cámara desde el plano y . (Ma, Soatto, Kosecká, Sastry - Una invitación a la visión tridimensional de las imágenes a los modelos geométricos, p. 132)dT=RC

buq2
fuente
2

No se puede conocer la posición 3d del segundo punto. Puede ser cualquiera de los puntos del rayo desde el centro de la cámara hasta el infinito.

Puedes hacer lo siguiente:

  • Cree un espacio 3D predefinido que se asemeje a la escena de la vida real.
  • Obtenga más puntos de imágenes desde un ángulo diferente, utilizando la intersección de los rayos desde diferentes ángulos, puede obtener una aproximación del punto 3d.
Geerten
fuente
Aférrate. ¿Puedo encontrar el punto del mundo 3D en el que el rayo 3D se cruza con la superficie plana, seguramente? Como sé, una coordenada del mundo 3d y una normal del mundo 3d de ese plano ... ¡el punto 3d que estoy tratando de encontrar es el punto en el que se cruza con esa superficie plana! (Lo siento, siento que mi explicación no fue lo suficientemente buena)
Cheetah
¿Qué quieres decir con superficie plana? ¿El plano de la imagen o el plano de las coordenadas del mundo cero? En el caso de este último, puede calcular la intersección, pero eso significa que su escena 3D no es 3d, sino 2d :) (porque es un plano).
Geerten
Sí, lo siento, eso no se me ocurrió. Entiendo lo que estás diciendo, simplemente no tiene sentido para mí visualmente. Entonces, sí, mi escena es en realidad "2d" porque tengo el plano de la imagen y tengo el plano del mundo real, en el que se encuentra el origen del mundo real [0,0,0] y tiene una normal del mundo real de [0,0, 1], por lo tanto, cada punto que se encuentra en este plano del mundo real tiene la forma de [x, y, 0]. Sé que puedo calcular la intersección aunque ax + by + cz + d = 0, pero esto es con lo que estoy teniendo problemas. (Continuará en el próximo comentario)
Cheetah
Tengo un rayo que comienza en el centro / origen de mi cámara para el que tengo el mundo real [x, y, z] y un mundo real normal [nx, ny, nz]. Necesito disparar un rayo desde este punto que se cruza con el plano de la imagen en [u, v] y luego se cruza con el plano del mundo real en [x, y, 0] (es esta x, y lo que quiero obtener). Con lo que tengo problemas es con el primer bit, la intersección con el plano de la imagen. ¿No puedo ver cómo hago eso?
Cheetah
Es posible que desee ver: en.wikipedia.org/wiki/Line-plane_intersection
Geerten