¿Cómo obtengo la calibración de cámara más precisa?

16

En primer lugar, espero que esta sea la placa correcta de Stack Exchange. Mis disculpas si no es así.

Estoy trabajando en algo que requiere que calibre la cámara. He implementado con éxito el código para hacer esto en OpenCV (C ++). Estoy usando las funciones incorporadas del tablero de ajedrez y un tablero de ajedrez que he impreso.

Hay muchos tutoriales en Internet que indican dar más de una vista del tablero de ajedrez y extraer las esquinas de cada cuadro.

¿Hay un conjunto óptimo de vistas para darle a la función la calibración más precisa de la cámara? ¿Qué afecta la precisión de la calibración?

Por ejemplo, si le doy 5 imágenes de la misma vista sin mover nada, da algunos resultados directos cuando intento desenredar la alimentación de la cámara web.

Para su información, cualquier persona que visite: recientemente descubrí que puede obtener una mejor calibración de la cámara mediante el uso de una cuadrícula de círculos asimétricos y la función respectiva de OpenCV.

leopardo
fuente

Respuestas:

8

Debe tomar imágenes para la calibración desde diferentes puntos de vista y ángulos, con la mayor diferencia posible entre los ángulos (los tres ángulos de Euler deben variar), pero el diámetro del patrón todavía se ajusta al campo de visión de la cámara. Cuantas más vistas utilice, mejor será la calibración. Eso es necesario porque durante la calibración se detectan la distancia focal y los parámetros de distorsión, por lo que para obtenerlos por el método de mínimos cuadrados se necesitan diferentes ángulos. Si no está moviendo la cámara, no está obteniendo nueva información y la calibración es inútil. Tenga en cuenta que, por lo general, solo necesita una distancia focal, los parámetros de distorsión generalmente son insignificantes incluso para cámaras de consumo, cámaras web y cámaras de teléfonos celulares. Si ya conoce la distancia focal de la especificación de la cámara, es posible que ni siquiera necesite calibración.

El coeficiente de distorsión está más presente en cámaras "especiales" como gran angular o 360 °.

Aquí está la entrada de Wikipedia sobre calibración . Y aquí hay una distorsión no lineal , que es insignificante para la mayoría de las cámaras.

mirror2image
fuente
Por ángulos de Eulers, supongo que te refieres a girar la cámara alrededor del tablero de ajedrez (con el tablero de ajedrez como pivote) en la x, y y mover la cámara hacia y desde el tablero de ajedrez en la z. Leí sobre alguien que simplemente imprimió tableros de ajedrez transformados y mantuvo la cámara en el mismo lugar. Por ejemplo: i.imgur.com/rYzV4.png e i.imgur.com/McG9z.png . ¿Usar cosas como esta es una mala decisión, ya que puede no representar cómo las cosas se distorsionarían en realidad?
Cheetah
Sí sobre mover la cámara. Sí otra vez sobre mantenerse en su lugar.
mirror2image
@ mirror2image Quiere decir que, en operaciones prácticas, es mejor cambiar los ángulos diferentes. Pero eso significa que diferentes puntos de vista tendrán diferentes sistemas de coordinación mundial. ¿Necesito usar un sistema de coordinación mundial compartido para mantener los puntos de objeto en el mismo sistema de coordinación?
Richard
3

@Ben: el número de vistas depende de la cámara y de la precisión final requerida.

Con lentes de muy alta calidad y baja distorsión (SLR de 35 mm de alta gama) que utilizan muchas imágenes de tablero de ajedrez para mapear las distorsiones puede ser inestable, ya que las distorsiones son fracciones de un píxel.
Todavía necesita varias tomas con el tablero (o la cámara) rotados, ya que el centro de la imagen normalmente está solo dentro de un par de píxeles del valor nominal x / 2, y / 2 y cambiará con el enfoque. Y, por supuesto, el zoom lo cambia todo.

Una vez que tenga el centro del chip de lente y la distancia focal (en X e Y), solo necesita un solo tablero de ajedrez en la toma para darle la posición de la cámara

Martin Beckett
fuente
Sigo recibiendo una calibración realmente mala y, sinceramente, no puedo entender por qué. Tengo un tablero de ajedrez impreso en la pared y estoy moviendo la cámara a diferentes posiciones para que tenga diferentes vistas en el tablero de ajedrez, pero cada vez que uso la función de distorsión en opencv y sale muy extraño y distorsionado en comparación con el original. Mi cámara es una Microsoft LifeCam Studio 1080p.
Cheetah
@Ben Desactiva cualquier enfoque automático. En cámaras web de lentes pequeñas, la distancia focal y el centro de la lente cambian con el enfoque. ¿Estás girando lo suficiente para que quede bien en el centro? ¿Tienen cuadrados saliendo a las esquinas? Finalmente verifique que todos los objetivos tengan todos los cuadrados detectados.
Martin Beckett
El enfoque automático ya se ha deshabilitado. Definir lo suficiente? Estoy intentando ángulos tan extremos como puedo para recoger los puntos. No estoy seguro de lo que quieres decir con "cuadrados que salen a las esquinas", si te refieres a la función que dibuja las esquinas extraídas en la imagen, entonces sí. Ya tengo el cheque para ver que se hayan detectado todas las esquinas. Creo que mi problema PUEDE estar en lo que establecí en la distancia focal inicial en la matriz intrínseca que paso a la función de calibración. He intentado 1: 1, 16: 9 (lo que creo que es la relación de aspecto de la cámara web) y también he intentado NADA (que puedes hacer)
Cheetah
@Martin ¿Es posible realizar la calibración manteniendo la cámara en posición de papelería y cambiando la orientación del tablero de ajedrez sin cambiar la distancia entre la cámara y el tablero de ajedrez?
@Santosh: sí, eso es obviamente exactamente equivalente. Debe asegurarse de haber cubierto muchos ángulos diferentes
Martin Beckett el
3

Decidí publicar esta respuesta aquí porque hace un tiempo, esto surgió como el mejor resultado en Google y sus sugerencias me ayudaron. Así que decidí compartir mi experiencia también.

Después de pasar innumerables horas tratando de obtener la mejor calibración estéreo en un Kinect, compartí mis consejos y hallazgos en una publicación de blog aquí .

Aunque está orientado a la calibración estéreo y más específicamente a Kinect, creo que los consejos ayudarán a cualquiera que esté tratando de calibrar una cámara.

Además, en caso de que muera algún día u olvide renovar mi hosting, aquí hay una cita modificada de la publicación:

  1. Asegúrese de tener el patrón de calibración más grande posible. Sigue lo que dije arriba. Obtenga un bonito patrón impreso profesionalmente. Asegúrese de que cada cuadrado sea de al menos 8 cm x 8 cm. Además, asegúrese de que un lado del patrón de calibración tenga un número impar de cuadrados y el otro lado tenga un número par de cuadrados (por ejemplo, 9 × 6 o 7 × 8). Es importante para detectar la pose del objetivo correctamente. Además, algunas cajas de herramientas no podrán detectar el patrón en este requisito no se cumple. Como se mencionó anteriormente, los patrones que utilicé que son adecuados para imprimir en hojas grandes se cargan aquí (para cuadrados de 9 cm) y aquí (para cuadrados de 10 cm).
  2. Asegúrese de que su patrón impreso tenga suficiente borde blanco alrededor, de lo contrario, la mayoría de las cajas de herramientas no lo detectarán fácilmente.
  3. Asegúrese de que el Kinect no se mueva. Usé una montura para montar mi Kinect en un trípode.
  4. Intente obtener tantas imágenes del objetivo de calibración como pueda. Mi mejor calibración se obtuvo usando 300 imágenes, a distancias tan bajas como 0.5 metros hasta 10 metros de la cámara. Asegúrese de girar el patrón alrededor de los ejes X, Y y Z. También intente "en mosaico" la vista con imágenes tomadas a la misma distancia: es decir, tome una imagen, mueva el objetivo al siguiente mosaico en el campo de visión, tome otra y repita hasta que haya "mosaico" todo el actual campo de visión. El objetivo es cubrir todo el campo de visión a cada distancia tanto como sea posible.
  5. Utilice la aplicación de calibración estéreo de MATLAB si es posible. Le permite deshacerse de los valores atípicos después de cada fase de calibración.
M2X
fuente
2

Aquí hay una lista de 'mejores prácticas' para la calibración de la cámara que originalmente publiqué aquí: https://calib.io/blogs/knowledge-base/calibration-best-practices

  • Elija el objetivo de calibración de tamaño correcto. Lo suficientemente grande como para restringir adecuadamente los parámetros. Preferiblemente debería cubrir aprox. la mitad del área total cuando se ve fronto-paralelo en las imágenes de la cámara.
  • Realice la calibración a la distancia de trabajo aproximada (WD) de su aplicación final. La cámara debe enfocarse a esta distancia y el enfoque no debe modificarse después de la calibración.
  • El objetivo debe tener un alto recuento de características. Usar patrones finos es preferible. Sin embargo, en algún momento la detección sufre robustez. Nuestra recomendación es utilizar recuentos de patrones finos para cámaras de más de 3MPx y si la iluminación está controlada y es buena.
  • Recoge imágenes de diferentes áreas e inclinaciones. Mueva el objetivo para cubrir completamente el área de la imagen y apunte a una cobertura uniforme. La distorsión de la lente puede determinarse adecuadamente solo a partir de imágenes fronto-paralelas, pero la estimación de la distancia focal depende de la observación del escorzo. Incluya ambas imágenes frontoparallel e imágenes tomadas con el tablero inclinado hasta +/- 45 grados en dirección horizontal y vertical. Inclinar más no suele ser una buena idea, ya que la precisión de localización de la característica se ve afectada.
  • Use buena iluminación. Esto a menudo se pasa por alto, pero es muy importante. El objetivo de calibración debe estar iluminado de manera difusa por medio de iluminación de fotografía controlada. Las fuentes puntuales fuertes dan lugar a una iluminación desigual, posiblemente haciendo que la detección falle y sin utilizar muy bien el rango dinámico de la cámara. Las sombras pueden hacer lo mismo.
  • Tener suficientes observaciones. Por lo general, la calibración debe realizarse en al menos 6 observaciones (imágenes) de un objetivo de calibración. Si se usa una cámara de orden superior o un modelo de distorsión, más observaciones son beneficiosas.
  • Considere el uso de objetivos codificados de forma exclusiva, como los tableros CharuCo. Estos le permiten recopilar observaciones desde los bordes del sensor de la cámara y la lente y, por lo tanto, restringen muy bien los parámetros de distorsión. Además, le permiten recopilar datos incluso cuando los puntos de características individuales no cumplen con los otros requisitos.
  • La calibración es tan precisa como el objetivo de calibración utilizado. Utilice objetivos impresos con láser solo para validar y probar.
  • Montaje adecuado del objetivo de calibración y la cámara. Para minimizar la distorsión e inclinarse en objetivos más grandes, móntelos verticalmente o acostados sobre un soporte rígido. Considere mover la cámara en estos casos en su lugar. Use un trípode de calidad y evite tocar la cámara durante las adquisiciones.
  • Eliminar malas observaciones. Inspeccione cuidadosamente los errores de reproyección. Tanto por vista como por función. Si alguno de estos aparece como valores atípicos, excluirlos y recalibrar.

Aquí se encuentra una herramienta en línea para generar archivos PDF para objetivos de calibración: https://calib.io/pages/camera-calibration-pattern-generator

Jakob
fuente
Hola, bienvenido a DSP SE. Las respuestas de autopromoción generalmente no son bienvenidas aquí. Por favor considere hacer una respuesta de mayor calidad.
jojek