Fundamentos de calibración de cámara - Guía práctica de parámetros intrínsecos y corrección de distorsión
Qué es la calibración de cámara - Por qué es necesaria
La calibración de cámara es el proceso de determinar los parámetros internos de la cámara (distancia focal, punto principal, coeficientes de distorsión). Estos parámetros describen cómo los puntos del mundo tridimensional se proyectan en el plano de imagen bidimensional. Una calibración precisa es la base para aplicaciones de visión por computador como medición, reconstrucción 3D y realidad aumentada.
Por qué es necesaria la calibración: todas las lentes de cámaras reales introducen distorsión (las líneas rectas se curvan); diferentes cámaras tienen distintas distancias focales y tamaños de sensor que afectan la relación de proyección; la medición precisa y la reconstrucción 3D requieren un modelo geométrico exacto de la cámara.
Escenarios de aplicación: estimación de distancia a obstáculos en conducción autónoma, medición dimensional en inspección industrial, colocación correcta de objetos virtuales en aplicaciones AR, corrección de distorsión en panorámicas y cálculo de profundidad en visión estéreo.
El modelo de cámara estenopeica - Descripción matemática de la proyección
El modelo de cámara estenopeica es el modelo matemático fundamental que describe la proyección de 3D a 2D. Asume que los rayos de luz pasan a través de un orificio infinitamente pequeño (estenopeico) y se proyectan en el plano de imagen.
Matriz intrínseca K: matriz 3x3 que contiene la distancia focal (fx, fy, en píxeles) y las coordenadas del punto principal (cx, cy, posición en píxeles del centro de la imagen). Proyecta puntos 3D del sistema de coordenadas de la cámara a coordenadas de píxel.
Parámetros extrínsecos: matriz de rotación R (3x3) y vector de traslación t (3x1), que describen la posición y orientación de la cámara en el sistema de coordenadas del mundo. Convierten coordenadas del mundo a coordenadas de cámara.
Ecuación de proyección: s * [u, v, 1]^T = K * [R | t] * [X, Y, Z, 1]^T. Donde (X,Y,Z) son coordenadas del mundo, (u,v) son coordenadas de píxel y s es el factor de escala.
Limitaciones del modelo estenopeico: no considera la distorsión de la lente (las lentes reales curvan las líneas rectas), no considera la profundidad de campo (todas las distancias aparecen nítidas), no considera las aberraciones ópticas. En la práctica se necesita añadir un modelo de distorsión sobre el modelo estenopeico.
Modelos de distorsión de lentes - Distorsión radial y tangencial
Las lentes reales introducen dos tipos principales de distorsión: radial y tangencial.
Distorsión radial: causada por la forma esférica de la lente. Se divide en distorsión de barril (los bordes de la imagen se expanden hacia afuera, común en lentes gran angular) y distorsión de cojín (los bordes se contraen hacia adentro, común en teleobjetivos). Se describe con un modelo polinomial: r_distorted = r * (1 + k1*r² + k2*r⁴ + k3*r⁶), donde r es la distancia al centro de la imagen y k1/k2/k3 son los coeficientes de distorsión.
Distorsión tangencial: causada por la falta de paralelismo perfecto entre la lente y el sensor. Produce un efecto de inclinación en la imagen. Se describe con dos parámetros p1 y p2. Generalmente es mucho menor que la distorsión radial.
Modelo de distorsión de OpenCV: usa 5 parámetros (k1, k2, p1, p2, k3) para describir la distorsión. Para lentes ojo de pez, se usa el modelo de proyección equidistante (4 parámetros k1-k4).
Impacto de la distorsión: es más evidente en los bordes de la imagen (mayor distorsión a mayor distancia del centro). Para lentes normales, la distorsión en la zona central es despreciable; para lentes gran angular y ojo de pez, la distorsión es muy significativa y debe corregirse.
Procedimiento del método de calibración de Zhang
El método de Zhang (Zhang's Method) es el método de calibración de cámara más ampliamente utilizado, empleando un patrón de tablero de ajedrez plano como objetivo de calibración.
Preparación: imprimir un patrón de tablero de ajedrez de alta calidad (recomendado 9x6 u 11x8 esquinas internas), pegado sobre una superficie rígida y plana. Asegurar la precisión de impresión (error de tamaño de cuadrado menor a 0.1mm).
Captura de imágenes de calibración: tomar 15-25 fotos del tablero desde diferentes ángulos y distancias. Cubrir todas las áreas de la imagen (no solo el centro). Incluir diferentes ángulos de inclinación (15-45°). Asegurar que el tablero esté completamente dentro del encuadre y nítido.
Detección de esquinas: usar findChessboardCorners() de OpenCV para detectar las esquinas internas del tablero. cornerSubPix() refina a precisión subpíxel. Las imágenes donde la detección falla deben excluirse.
Cálculo de calibración: cv2.calibrateCamera() recibe las coordenadas de esquinas de todas las imágenes y las coordenadas del mundo correspondientes, y devuelve la matriz intrínseca K, los coeficientes de distorsión y los parámetros extrínsecos de cada imagen.
Evaluación de precisión: calcular el error de reproyección (proyectar los puntos 3D de vuelta a la imagen usando los resultados de calibración y comparar con las esquinas detectadas). Una buena calibración tiene un error de reproyección menor a 0.5 píxeles, excelente si es menor a 0.1 píxeles.
Implementación y aplicaciones de la corrección de distorsión
Una vez completada la calibración, se utilizan los parámetros obtenidos para corregir la distorsión de las imágenes.
Corrección de distorsión con OpenCV: cv2.undistort(img, K, dist_coeffs) completa la corrección en un paso. O usar el método de dos pasos initUndistortRectifyMap() + remap(), que precalcula la tabla de mapeo para procesar múltiples imágenes a alta velocidad.
Características de la imagen corregida: las líneas rectas se restauran (el método de verificación más intuitivo); pueden aparecer áreas negras en los bordes (el área válida después de la corrección es menor que la imagen original); se puede elegir recortar los bordes negros o mantener el área completa corregida.
Escenarios de aplicación:
- Aplicaciones de medición: en la imagen corregida, la distancia en píxeles es proporcional a la distancia real, permitiendo mediciones precisas
- Aplicaciones de costura: las imágenes con distorsión corregida facilitan la coincidencia de características y el ensamblaje
- Aplicaciones AR: los parámetros correctos de cámara aseguran la alineación de objetos virtuales con la escena real
- Visión estéreo: después de la calibración binocular, la rectificación epipolar simplifica la búsqueda de correspondencias a un problema unidimensional
Técnicas de calibración de alta precisión y resolución de problemas
Consejos prácticos para mejorar la precisión de calibración y resolver problemas comunes.
Técnicas para mejorar la precisión:
- Usar un tablero de calibración más grande (que cubra más área de la imagen)
- Aumentar el número de capturas (20 o más)
- Asegurar que el tablero esté perfectamente plano (la curvatura introduce errores sistemáticos)
- Cubrir las áreas de los bordes de la imagen (la distorsión es máxima en los bordes, se necesitan más restricciones)
- Usar imágenes de alta resolución y detección precisa de esquinas subpíxel
- Fijar la apertura (cambiar la apertura modifica ligeramente la distancia focal)
Problemas comunes:
- Error de reproyección excesivo (>1 píxel): verificar la planitud del tablero, excluir imágenes borrosas, aumentar el número de imágenes
- Fallo en la detección de esquinas: ajustar la iluminación para evitar reflejos, asegurar contraste suficiente, verificar que los parámetros de tamaño del tablero sean correctos
- Imagen distorsionada después de la corrección: posiblemente los parámetros de tamaño del tablero son incorrectos o el orden de las esquinas es inconsistente
Calibración en línea: para escenarios que requieren actualización en tiempo real de la calibración (como deriva de la distancia focal por cambios de temperatura), se pueden usar características geométricas conocidas de la escena (como líneas rectas de edificios) para auto-calibración en línea.