Cómo verificar la exactitud de la calibración de una cámara web?


Soy totalmente nuevo en las técnicas de calibración de cámaras... Estoy usando la técnica de tablero de ajedrez OpenCV... Estoy usando una webcam de Quantum...

Aquí están mis observaciones y pasos..

  1. He mantenido cada lado cuadrado de ajedrez = 3.5 cm. Es un tablero de ajedrez de 7 x 5 con 6 x 4 esquinas internas. Estoy tomando un total de 10 imágenes en diferentes vistas/poses a una distancia de 1 a 1.5 m de la webcam.
  2. Estoy siguiendo el código C en Aprendiendo OpenCV por Bradski para la calibración. mi código para la calibración es

    cvCalibrateCamera2(object_points,image_points,point_counts,cvSize(640,480),intrinsic_matrix,distortion_coeffs,NULL,NULL,CV_CALIB_FIX_ASPECT_RATIO);
    
  3. Antes de llamar a esta función estoy haciendo el primer y segundo elemento a lo largo de la diagonal de la matriz intrínseca como uno para mantener la relación de distancias focales constante y utilizando CV_CALIB_FIX_ASPECT_RATIO

  4. Con el cambio en la distancia del tablero de ajedrez el fx y fy están cambiando con fx:fy casi igual a 1. hay cx y cy valores en orden de 200 a 400. los fx y fy son en el orden de 300 - 700 cuando cambio la distancia.

  5. Actualmente he puesto todos los coeficientes de distorsión a cero porque no conseguí buen resultado incluyendo coeficientes de distorsión. ¡Mi imagen original se veía hermosa que la no distorsionada!!

Estoy haciendo la calibración correctamente?. ¿Debería usar otra opción que no sea CV_CALIB_FIX_ASPECT_RATIO?. En caso afirmativo, ¿cuál?

Author: Francesco Callari, 2012-10-09

2 answers

Hmm, ¿estás buscando "guapo"o " preciso"?

La calibración de la cámara es uno de los pocos sujetos en visión artificial donde la precisión puede cuantificarse directamente en términos físicos y verificarse mediante un experimento físico. Y la lección habitual es que (a) sus números son tan buenos como el esfuerzo (y el dinero) que pone en ellos, y (b) la precisión real (a diferencia de lo imaginado) es costosa, por lo que debe averiguar de antemano lo que su aplicación realmente requiere en el camino de Precision.

Si busca las especificaciones geométricas de incluso combinaciones de lentes/sensores muy baratas (en el rango de megapíxeles y superiores), se hace evidente que la precisión de calibración sub-sub-mm es teóricamente alcanzable dentro de un volumen de espacio de mesa. Simplemente calcule (a partir de la hoja de especificaciones del sensor de su cámara) el ángulo sólido atravesado por un píxel: quedará deslumbrado por la resolución espacial que tiene al alcance de su billetera. Sin embargo, en realidad lograr algo REPETIBLE cerca de esa precisión teórica requiere trabajo.

Aquí hay algunas recomendaciones (de la experiencia personal) para obtener una buena experiencia de calibración con equipos de cosecha propia.

  1. Si su método utiliza un blanco plano ("tablero de ajedrez" o similar), fabrique uno bueno. Elija un respaldo muy plano (para el tamaño que menciona el vidrio de la ventana de 5 mm de espesor o más es excelente, aunque obviamente frágil). Verifique su planitud contra otro borde (o, mejor, un rayo láser). Imprimir el patrón en papel grueso que no se estirará demasiado fácilmente. Colóquelo después de imprimir en el respaldo antes de pegar y verifique que los lados cuadrados sean casi ortogonales. Las impresoras de chorro de tinta o láser baratas no están diseñadas para una precisión geométrica rigurosa, no confíe en ellas ciegamente. La mejor práctica es usar una imprenta profesional (incluso una Kinko's hará un trabajo mucho mejor que la mayoría de las impresoras domésticas). Luego, coloque el patrón con mucho cuidado en el respaldo, utilizando pegamento en aerosol y lentamente limpiar con un paño suave para evitar burbujas y estiramientos. Espere un día o más para que el pegamento se cure y la tensión del pegamento-papel alcance su estado estable a largo plazo. Finalmente mida las posiciones de las esquinas con una buena pinza y una lupa. Usted puede salirse con la suya con un solo número para el tamaño cuadrado "promedio", pero debe ser un promedio de medidas reales, no de esperanzas y oraciones. La mejor práctica es utilizar realmente una tabla de posiciones medidas.

  2. Cuida tu cambios de temperatura y humedad: el papel adsorbe el agua del aire, el soporte se dilata y se contrae. Es sorprendente la cantidad de artículos que puede encontrar que reportan precisiones de calibración submilimétrica sin citar las condiciones ambientales (o la respuesta objetivo a ellas). No hace falta decir que, en su mayoría son basura. El coeficiente de dilatación de temperatura más baja del vidrio en comparación con la chapa metálica común es otra razón para preferir el primero como respaldo.

  3. No hace falta decir que debe desactivar la función de enfoque automático de su cámara, si tiene una: enfocar físicamente mueve una o más piezas de vidrio dentro de su lente, cambiando así (ligeramente) el campo de visión y (generalmente mucho) la distorsión de la lente y el punto principal.

  4. Coloque la cámara en un soporte estable que no vibre fácilmente. Enfocar (y f-detener la lente, si tiene un iris) como se necesita para la aplicación (no la calibración - el procedimiento de calibración y el objetivo deben ser diseñado para las necesidades de la aplicación, no al revés). Ni siquiera pensar de tocar la cámara o lente después. Si es posible, evite las lentes "complejas", por ejemplo, las lentes de zoom o las de ángulo muy amplio. Las lentes ojo de pez o anamórficas requieren modelos mucho más complejos de lo que OpenCV pone a disposición.

  5. Toma muchas medidas e imágenes. Desea cientos de medidas (esquinas) por imagen y decenas de imágenes. En cuanto a los datos, cuantos más, mejor. Un 10x10 tablero de ajedrez es el mínimo absoluto que consideraría. Normalmente trabajaba en 20x20.

  6. Extienda el volumen de calibración al tomar fotografías. Lo ideal es que sus mediciones se distribuyan uniformemente en el volumen de espacio con el que trabajará. Lo más importante, asegúrese de ángulo del objetivo significativamente con respecto al eje focal en algunas de las imágenes - para calibrar la distancia focal que necesita para " ver " alguna perspectiva real escorzo. Para obtener mejores resultados, utilice una plantilla mecánica repetible para mover el objetivo. Uno bueno es un plato giratorio de un eje, que le dará un excelente modelo previo para el movimiento del objetivo.

  7. Minimice las vibraciones y el desenfoque de movimiento asociado al tomar fotos.

  8. Usa buena iluminación. Realmente. Es increíble la frecuencia con la que veo que la gente se da cuenta al final del juego de que necesitas fotones para calibrar cualquier cámara: -) Usa iluminación ambiental difusa y rebota en blanco cartas a ambos lados del campo de visión.

  9. Mira lo que está haciendo tu código de extracción de esquina. Dibuje las posiciones de esquina detectadas en la parte superior de las imágenes (en Matlab u Octave, por ejemplo) y juzgue su calidad. Eliminar valores atípicos tempranamente usando umbrales ajustados es mejor que confiar en el robustifier en su código de ajuste de paquete.

  10. Restringe tu modelo si puedes. Por ejemplo, no intente estimar el punto principal si no tiene una buena razón para hacerlo cree que su objetivo es significativamente fuera del centro w.r.t la imagen, la fijan en el centro de la imagen en su primer intento. La ubicación del punto principal suele ser poco observada, porque está inherentemente confundida con el centro de la distorsión no lineal y por el componente paralelo al plano de imagen de la traducción del objetivo a la cámara. Hacerlo bien requiere un procedimiento cuidadosamente diseñado que produce tres o más puntos de fuga independientes de la escena y un muy buen bracketing de la distorsión no lineal. Del mismo modo, a menos que tenga razones para sospechar que el eje focal del objetivo está realmente inclinado w.r.t. el plano del sensor, fije en cero el componente (1,2) de la matriz de la cámara. En términos generales, utilice el modelo más simple que satisfaga sus medidas y las necesidades de su aplicación (esa es la maquinilla de afeitar de Ockam para usted).

  11. Cuando tiene una solución de calibración de su optimizador con un error RMS lo suficientemente bajo (unas pocas décimas de un píxel, por lo general, ver también la respuesta de Josh a continuación), trazar el patrón XY de los errores residuales (predicted_xy-measured_xy para cada esquina en todas las imágenes) y ver si es una nube redonda centrada en (0, 0). Los "grupos" de valores atípicos o la no redondez de la nube de residuos están gritando campanas de alarma de que algo está muy mal, lo más probable es que los valores atípicos o un modelo de distorsión de lente inapropiado.

  12. Tome imágenes adicionales para verificar la precisión de la solución-úselas para verificar que la distorsión de la lente realmente se elimina, y que la homografía plana predicha por el modelo calibrado realmente coincide con la recuperada de las esquinas medidas.

 96
Author: Francesco Callari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-18 04:59:04

Esta es una respuesta bastante tardía, pero para la gente que viene a esto desde Google:

La forma correcta de comprobar la precisión de calibración es utilizar el error de reproyección proporcionado por OpenCV. No estoy seguro de por qué esto no se mencionó en ninguna parte de la respuesta o comentarios, no es necesario calcular esto a mano - es el valor devuelto de calibrateCamera. En Python es el primer valor devuelto (seguido de la matriz de la cámara, etc.).

El error de reproyección es el error RMS entre donde el los puntos se proyectarían utilizando los coeficientes intrínsecos y dónde están en la imagen real. Normalmente debería esperar un error RMS de menos de 0.5 px - puedo obtener rutinariamente alrededor de 0.1 px con cámaras de visión artificial. El error de reproyección se utiliza en muchos documentos de visión por computadora, no hay una manera significativamente más fácil o más precisa de determinar qué tan buena es su calibración.

A menos que tenga un sistema estéreo, solo puede averiguar dónde está algo en el espacio 3D hasta un rayo, en lugar de un punto. Sin embargo, como se puede calcular la pose de cada imagen de calibración plana, es posible determinar dónde debe caer cada esquina del tablero de ajedrez en el sensor de imagen. El proceso de calibración (más o menos) intenta averiguar dónde caen estos rayos y minimiza el error en todas las diferentes imágenes de calibración. En el artículo original de Zhang, y las evaluaciones posteriores, alrededor de 10-15 imágenes parecen ser suficientes; en este punto, el error no disminuye significativamente con la adición de más imágenes.

Otros paquetes de software como Matlab le darán estimaciones de errores para cada intrínseco individual, por ejemplo, distancia focal, centro de proyección. No he podido hacer que OpenCV escupiera esa información, pero tal vez esté ahí en alguna parte. La calibración de la cámara ahora es nativa en Matlab 2014a, pero aún puede obtener la caja de herramientas de calibración de la cámara, que es extremadamente popular entre la visión por computadora usuario.

Http://www.vision.caltech.edu/bouguetj/calib_doc /

La inspección visual es necesaria, pero no suficiente cuando se trata de sus resultados. Lo más sencillo es buscar que las líneas rectas en el mundo se vuelvan rectas en tus imágenes no distorsionadas . Más allá de eso, es imposible estar realmente seguro de si sus cámaras están bien calibradas con solo mirar las imágenes de salida.

La rutina proporcionada por Francesco es buena, siga eso. Yo uso un tablero de estante como mi avión, con el patrón impreso en papel de póster. Asegúrese de que las imágenes están bien expuestas-evitar la reflexión especular! Uso un patrón estándar de 8x6, he probado patrones más densos, pero no he visto una mejora tal en la precisión que hace una diferencia.

Creo que esta respuesta debería ser suficiente para la mayoría de las personas que desean calibrar una cámara, de manera realista, a menos que esté tratando de calibrar algo exótico como un ojo de pez o lo esté haciendo por razones educativas, OpenCV/Matlab es todo lo que necesita. El método de Zhang se considera lo suficientemente bueno como para que prácticamente todos en la investigación de visión por computadora lo usen, y la mayoría de ellos usan la caja de herramientas de Bouguet o OpenCV.

 29
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-09 14:44:09