Paso a paso Estimación de pose de cámara para seguimiento visual y marcadores planos

21

He estado trabajando en el tema de la estimación de pose de cámara para aplicaciones de realidad aumentada y seguimiento visual durante un tiempo y creo que aunque hay mucha información detallada sobre la tarea, todavía hay muchas confusiones y malentendidos.

Creo que las siguientes preguntas merecen una respuesta detallada paso a paso.

  • ¿Qué son las cámaras intrínsecas?
  • ¿Qué son las cámaras extrínsecas?
  • ¿Cómo calculo la homografía a partir de un marcador plano?
  • Si tengo homografía, ¿cómo puedo obtener la pose de la cámara?
Jav_Rock
fuente
Estoy confuso en la renormalización que haces: 1. H es la homografía encontrada a partir de los datos usando algún procedimiento (digamos SVD). 2. inv (K) * H = A es con lo que trabajas aquí. Luego haces q1 = a1 / norma (a1) y q2 = a2 / norma (a2) como columnas ortonormales de una matriz de rotación, y haces q3 = q1xq2 ... Luego tomas t / (algo) para obtener el vector de traducción. ¿Cómo es que puedes dividir q1 y q2 por cosas posiblemente diferentes, y cómo eliges por qué dividir t? ¿O es la idea de que el procedimiento SVD y la multiplicación por inv (K) dar algo cerca , pero no es ortogonal / ortonormal rotación de la matriz, por lo º
user2600616
Pero, ¿cómo podría obtener un punto 3D (X, Y, 1)?
waschbaer

Respuestas:

19

Es importante entender que el único problema aquí es obtener los parámetros extrínsecos. La intrínseca de la cámara se puede medir fuera de línea y hay muchas aplicaciones para ese propósito.

¿Qué son las cámaras intrínsecas?

Parámetros intrínsecos de la cámara por lo general se llama la matriz de calibración de la cámara, K . Podemos escribir

K=[αtustu0 00 0αvv0 00 00 01]

dónde

  • y α v son el factor de escala en lasdirecciones de coordenadas u y v , y son proporcionales a la distancia focal f de la cámara: α u = k u f y α v = k v f . k u y k v son el número de píxeles por unidad de distancia en lasdirecciones u y v .αtuαvtuvFαtu=ktuFαv=kvFktukvtuv

  • se llama el punto principal, generalmente las coordenadas del centro de la imagen.do=[tu0 0,v0 0]T

  • es la inclinación, solo que no es cero si u y v no son perpendiculares.stuv

Una cámara se calibra cuando se conocen intrínsecos. Esto se puede hacer fácilmente para que no se considere un objetivo en la visión por computadora, sino un paso trivial fuera de línea.

¿Qué son las cámaras extrínsecas?

Cámara extrínseca o parámetros externos es una matriz de 3 × 4 que corresponde a la transformación euclidiana de un sistema de coordenadas mundiales al sistema de coordenadas de la cámara. R representa una matriz de rotación 3 × 3 y t una traslación.[REl |t]3×4 4R3×3t

Las aplicaciones de visión por computadora se centran en estimar esta matriz.

[REl |t]=[R11R12R13TXR21R22R23TyR31R32R33Tz]

¿Cómo calculo la homografía a partir de un marcador plano?

La homografía es una matriz homogénea que relaciona un plano 3D y su proyección de imagen. Si tenemos un plano Z = 0, la homografía H que mapea un punto M = ( X , Y , 0 ) T en este plano y su correspondiente punto 2D m debajo de la proyección P = K [ R | t ] es3×3Z=0 0HMETRO=(X,Y,0 0)TmetroPAGS=K[REl |t]

metro~=K[R1R2R3t][XY0 01]

=K[R1R2t][XY1]

H=K[R1R2t]

Para calcular la homografía necesitamos pares de puntos mundo-cámara. Si tenemos un marcador plano, podemos procesar una imagen del mismo para extraer características y luego detectar esas características en la escena para obtener coincidencias.

Solo necesitamos 4 pares para calcular la homografía usando Transformación lineal directa.

Si tengo homografía, ¿cómo puedo obtener la pose de la cámara?

La homografía y la cámara plantean K [ R | t ] contienen la misma información y es fácil pasar de una a otra. La última columna de ambos es el vector de traducción. La columna uno H 1 y dos H 2 de homografía también son la columna uno R 1 y dos R 2 de la matriz de pose de cámara. Solo queda la columna tres R 3 de [ R | t ] , y como tiene que ser ortogonal, se puede calcular como el producto cruzado de las columnas uno y dos:HK[REl |t]H1H2R1R2R3[REl |t]

R3=R1R2

[REl |t]

Jav_Rock
fuente
44
Creo que es engañoso decir que la calibración es "fácil y no el objetivo de CV". En el caso habitual, también necesitamos estimar los parámetros de distorsión. En lugar de la autocalibración, recomendaría la calibración plana (Zhang: una nueva técnica flexible para la calibración de la cámara), ya que es más flexible si se puede realizar un procedimiento de calibración por separado. También tiene un pequeño error en "Si tengo homografía, ¿cómo puedo obtener la pose de la cámara?" ya que no tiene en cuenta la calibración (H_ {calib} = K ^ -1H).
buq2
3
La pose de la cámara de la homografía está mal. Hay varias formas de hacerlo ', algunos de ellos son altamente no triviales.
mirror2image
No veo por qué está mal. Lo calculo de esta manera y funciona. ¿Por qué dices que está mal?
Jav_Rock
3
Escribiste en la última sección que H ^ 1 y R ^ 1 e iguales, pero en la tercera sección declaras que H = K [RT], lo que significaría que R ^ 1 es en realidad K ^ -1H ^ 1. Pero esto no es estrictamente cierto ya que hay un número infinito de H que satisfará las ecuaciones y causará problemas al resolver R ^ 1, R ^ 2 y T (la escala desconocida). Su respuesta no tiene en cuenta la robusta calibración intrínseca y de distorsión y algunas de las ecuaciones son incorrectas, por lo que esta no es una buena respuesta para la pregunta.
buq2
Sí, me faltaba la matriz de kalibración en el paso tres, ya que tomé esto de mi código y lo multipliqué por K en una función diferente de los códigos.
Jav_Rock
3

Si bien explica muy bien el caso bidimensional, la respuesta propuesta por Jav_Rock no proporciona una solución válida para las posturas de la cámara en el espacio tridimensional. Tenga en cuenta que para este problema existen múltiples soluciones posibles.

Este artículo proporciona fórmulas cerradas para descomponer la homografía, pero las fórmulas son algo complejas.

OpenCV 3 ya implementa exactamente esta descomposición ( decomposeHomographyMat ). Dada una homografía y una matriz intrínseca correctamente escalada, la función proporciona un conjunto de cuatro rotaciones y traslaciones posibles.

La matriz intrínseca en este caso debe darse en unidades de píxeles, lo que significa que su punto principal suele ser (imageWidth / 2, imageHeight / 2)y su distancia focal suele ser focalLengthInMM / sensorWidthInMM * imageHeight.

Emiswelt
fuente
¿Qué es una matriz intrínseca correctamente escalada?
Guig
1
He actualizado mi respuesta. Por favor ver arriba.
Emiswelt
Hola @Emiswelt, ¿no es la distancia focal focalLengthInMM / sensorWidthInMM * imageWidth? ¿Por qué eliges la altura?
El Marce