Contents — find the section you need

Los puntos correspondientes en "el mismo plano" —una mesa, un póster, la superficie de una carretera— capturados en dos imágenes se relacionan mediante una relación mucho más simple que la de una escena 3D general. Independientemente de la posición de la cámara, los puntos en ese plano pueden transformarse entre sí utilizando únicamente una matriz 3\times3. Esta matriz es la homografía (una transformación proyectiva). Mientras que el libro "Epipolar Geometry Primer" trata sobre restricciones de correspondencia que presuponen la profundidad de la escena, la homografía es un caso opuesto, ya que maneja correspondencias que no dependen en absoluto de la profundidad; y solo utilizando ambas adecuadamente se obtiene una visión completa de la geometría de dos vistas.

0. Resumen de 30 segundos

  • Una homografía H es una matriz 3\times3 que representa una correspondencia de imagen \tilde{\mathbf{x}}'\sim H\tilde{\mathbf{x}}, ya sea para puntos en el mismo plano o para una cámara que experimenta una rotación pura. Tiene 8 grados de libertad, con ambigüedad de escala.

  • El método DLT (Transformación Lineal Directa) construye dos ecuaciones lineales por cada correspondencia de punto y resuelve H linealmente mediante SVD a partir de 4 o más correspondencias. La normalización de Hartley es eficaz para la estabilización numérica.

  • Dado que las correspondencias reales incluyen discrepancias, los valores atípicos se eliminan con RANSAC antes de la estimación final. El tamaño mínimo de la muestra es de 4 puntos, lo que mantiene el número de iteraciones de estimación robusta por debajo del de la estimación de la Matriz Esencial/Fundamental.

  • Con una cámara calibrada, se descompone en la forma H=K(R+\mathbf{t}\mathbf{n}^\mathsf{T}/d)K^{-1} en rotación R, dirección de traslación y normal del plano \mathbf{n}. Sin embargo, en general, existen múltiples soluciones candidatas físicamente plausibles, y se necesita información adicional para reducirlas.

  • Para escenas planas o rotación pura, la homografía es un modelo más apropiado que la Matriz Esencial o Fundamental. No detectar esta degeneración implica intentar forzosamente la reconstrucción 3D en una situación donde recuperar la profundidad es fundamentalmente imposible.

1. ¿Qué es la homografía?: Transformación Proyectiva Planar

Cuando las coordenadas homogéneas \tilde{\mathbf{x}}=(x,y,1)^\mathsf{T} y \tilde{\mathbf{x}}'=(x',y',1)^\mathsf{T} en dos imágenes satisfacen la relación:

\tilde{\mathbf{x}}' \sim H\tilde{\mathbf{x}}

mediante alguna matriz 3\times3, denominamos H una homografía. \sim significa igual hasta la escala; multiplicar H por cualquier constante distinta de cero representa la misma transformación; por lo tanto, los grados de libertad de H son 9-1=8.

Diagram 1 · Use the button to switch views
Cuatro puntos correspondientes en un plano mapeados de la Imagen 1 a la Imagen 2 mediante la homografía H, en contraste con el caso de paralaje de profundidad donde una sola H es insuficiente
Diagram 2 · Use the button to switch views

Existen, en términos generales, dos condiciones físicas bajo las cuales se cumple una homografía. Primero, todos los puntos 3D correspondientes se encuentran en un solo plano. En segundo lugar, incluso para una escena con estructura 3D general, si la cámara no se traslada y solo rota (panorámica/inclinación), la relación puede describirse mediante una homografía independientemente de la profundidad. Esto se debe a que, cuando la cámara solo rota, no se produce paralaje.

2. Estimación mediante el método DLT

A partir de una única correspondencia (x,y)\to(x',y'), podemos derivar una restricción lineal para cada elemento h_1,\dots,h_9 de H (denominada \mathbf{h}=\operatorname{vec}(H)). Al expandir la condición de que el producto vectorial \tilde{\mathbf{x}}'\times H\tilde{\mathbf{x}}=\mathbf{0} sea cero, obtenemos las siguientes dos ecuaciones independientes por correspondencia.

\begin{bmatrix} -x & -y & -1 & 0 & 0 & 0 & x'x & x'y & x' \\ 0 & 0 & 0 & -x & -y & -1 & y'x & y'y & y' \end{bmatrix}\mathbf{h}=\mathbf{0}

Con 4 correspondencias, obtenemos 8 ecuaciones, que (en posición general) determinan de forma única el sistema de 8 grados de libertad H. En el caso realista de que se disponga de 5 o más correspondencias, se encuentra la solución de mínimos cuadrados para A\mathbf{h}=\mathbf{0} para la matriz A apilando todas las correspondencias; es decir, el vector singular derecho correspondiente al valor singular más pequeño de A, mediante la descomposición en valores singulares (SVD). Este es el método DLT (Transformación Lineal Directa).

Al igual que con el algoritmo de 8 puntos en geometría epipolar, el uso directo de coordenadas de píxeles sin procesar tiende a ser numéricamente deficiente. La implementación estándar es la DLT normalizada de Hartley: se aplica una transformación de similitud T,T' a cada conjunto de puntos de la imagen para que tenga centroide cero y distancia media \sqrt{2}, se resuelve en ese marco normalizado y, finalmente, se transforman las coordenadas de nuevo con H=T'^{-1}H_{\text{norm}}T.

3. Estimación robusta mediante RANSAC

Dado que las correspondencias reales incluyen discrepancias, aplicar DLT directamente a cada correspondencia provoca que los valores atípicos distorsionen gravemente la solución. RANSAC repite el siguiente proceso:

  1. Se seleccionan aleatoriamente 4 correspondencias y se construye una hipótesis para H mediante DLT.

  2. Para cada correspondencia, se calcula el error de reproyección entre la posición predicha por H y el punto correspondiente real.

  3. Se adopta la hipótesis con el mayor número de correspondencias (valores válidos) dentro del umbral.

  4. Se resuelve DLT una vez más utilizando todos los valores válidos finales y, si es necesario, se finaliza con una optimización no lineal (minimización directa del error de reproyección).

El número de iteraciones necesarias se puede estimar, dados un índice de coincidencias w, un tamaño mínimo de muestra s=4 y una probabilidad de éxito objetivo p, como:

N=\frac{\log(1-p)}{\log\!\left(1-w^{s}\right)}

Para el mismo índice de coincidencias, la homografía s=4 requiere menos iteraciones que la estimación de la matriz esencial/fundamental, que necesita s=5 – 8. Esta es una de las razones por las que es práctica común, justo después de la coincidencia SIFT u ORB, realizar primero una verificación geométrica aproximada con homografía antes de pasar a la estimación 3D completa.

4. Descomposición de H: Extracción de rotación, traslación y normal del plano

Si la cámara está calibrada y se conocen los parámetros intrínsecos K_1,K_2, la homografía normalizada \tilde H = K_2^{-1}HK_1 se puede escribir, utilizando la normal unitaria del plano \mathbf{n} (en el sistema de coordenadas de la cámara 1), la distancia al plano d y la pose relativa R,\mathbf{t}, como:

\tilde H = R+\frac{\mathbf{t}\,\mathbf{n}^\mathsf{T}}{d}

Si la cámara experimenta una rotación pura sin traslación, \mathbf{t}=\mathbf{0}, entonces \tilde H=R — la matriz de rotación misma.

El proceso de recuperación de R,\mathbf{t}/d,\mathbf{n} a partir de \tilde H se denomina descomposición de homografía. Se conocen varios algoritmos, incluyendo el método clásico de Faugeras-Lustman y el método analítico de Malis-Vargas, que obtienen una solución analítica mediante la descomposición en valores propios de \tilde H^\mathsf{T}\tilde H. Sin embargo, desde un punto de vista puramente matemático, pueden quedar hasta cuatro soluciones físicamente posibles (incluyendo aquellas que corresponden a cambios de signo o reflexiones). En la práctica, estas se reducen utilizando:

  • Profundidad positiva (quiralidad): los puntos triangulados deben estar frente a ambas cámaras.

  • Plausibilidad de la normal del plano: consistencia con una dirección normal aproximada ya conocida de la aplicación, como el suelo o una pared.

  • Consistencia entre múltiples fotogramas: incluso si hay ambigüedad en un solo fotograma, el seguimiento a lo largo del tiempo revela que las soluciones no naturales carecen de continuidad.

La función decomposeHomographyMat de OpenCV realiza esta descomposición y proporciona funciones de filtrado (como filterHomographyDecompByVisibleRefpoints, que selecciona la solución más cercana a una normal de plano conocida) que ayudan a evaluar las múltiples opciones.

5. Relación con la geometría epipolar: Cuando H es la respuesta correcta

Como vimos en la Introducción a la Geometría Epipolar, la correspondencia entre dos vistas en una escena 3D general se describe mediante la Matriz Fundamental/Esencial. La homografía es un caso especial de esta, y la elección entre ellas es la siguiente:

Situación Modelo adecuado Razón
Estructura 3D general, con traslación F (sin calibrar) / E (calibrada) La paralaje depende de la profundidad y no se puede comprimir en un solo plano.

La escena completa, o la región de interés, es un solo plano. Los puntos en un plano se describen con exactitud mediante una homografía.

La cámara experimenta una rotación pura (solo panorámica/inclinación). Sin traslación, no hay paralaje, por lo que la ecuación se degenera.

Al observar una escena distante, la paralaje es minúscula (aproximación práctica). La paralaje debida a las diferencias de profundidad queda oculta por el ruido de píxeles.

El problema radica en que la existencia de múltiples coincidencias para la ecuación y la constatación de que la escena es realmente plana o que la cámara rota puramente a veces pueden ser difíciles de distinguir a simple vista. Incluso en una escena 3D general, una pared o una mesa que domine el campo de visión pueden ajustarse perfectamente a una homografía. El proceso de inicialización de ORB-SLAM maneja esta ambigüedad estimando tanto H como F en paralelo mediante RANSAC, evaluando la bondad de ajuste de cada uno y seleccionando automáticamente el modelo más adecuado a la estructura de la escena y al movimiento de la cámara. El punto clave a nivel de implementación es el uso de una puntuación que considera la diferencia en los grados de libertad de cada modelo (un concepto relacionado con GRIC), en lugar de simplemente comparar el número de puntos coincidentes.

6. Aplicaciones: Unión de imágenes, seguimiento de planos en realidad aumentada y estimación del plano del suelo

La unión de imágenes (composición panorámica) —que combina varias imágenes tomadas mediante la rotación de la cámara en su lugar— es una aplicación representativa de la homografía. Se estima la homografía entre imágenes adyacentes, y cada una se transforma a un marco de referencia común y se fusiona. Cuando la suposición de que la cámara gira casi exclusivamente deja de ser válida (al grabar mientras se camina o se enfoca un sujeto cercano en la escena), el paralaje produce imágenes fantasma y duplicadas.

Seguimiento de anclaje de plano en RA detecta un plano, como un escritorio o un póster, en el primer fotograma y, al rastrear la homografía en cada fotograma subsiguiente, puede determinar de forma estable la pose relativa a ese plano, fotograma a fotograma. Usando la matriz R,\mathbf{t}/d descompuesta, se puede superponer un objeto virtual anclado al sistema de coordenadas del plano sin inconsistencias visuales.

Estimación del plano del suelo aprovecha el conocimiento previo de que una carretera o superficie de suelo es "casi plana". La detección del plano del suelo en cámaras de vehículos o robots utiliza métodos que rastrean la homografía entre fotogramas consecutivos y detectan regiones que se desvían de ella (obstáculos, objetos que no son el suelo). Este enfoque detecta una ruptura de la consistencia geométrica, en lugar de reconocer el objeto en sí.

7. Ejemplo de implementación en OpenCV

import cv2 as cv
import numpy as np

orb = cv.ORB_create(nfeatures=3000)
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
matches = cv.BFMatcher(cv.NORM_HAMMING).knnMatch(des1, des2, k=2)
good = [m for m, n in matches if m.distance < 0.75 * n.distance]

p1 = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
p2 = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)

# threshold is the allowed reprojection error, in pixels. USAC_MAGSAC is also selectable in place of RANSAC.
H, mask = cv.findHomography(p1, p2, method=cv.RANSAC, ransacReprojThreshold=3.0)
inliers = mask.ravel().astype(bool)

# if K is known, decompose into candidate solutions
num_solutions, Rs, ts, ns = cv.decomposeHomographyMat(H, K)

Tenga en cuenta que la matriz H devuelta por findHomography es ambigua en cuanto a la escala. Al igual que con la Matriz Esencial en la Introducción a la Geometría Epipolar, el vector de traslación obtenido mediante descomposición también determina únicamente una dirección; su escala absoluta debe proporcionarse por otros medios (una distancia conocida entre planos, una línea base estéreo, un sensor inercial, etc.).

8. Condiciones Difíciles

  • Planaridad rota: incluso una escena que parece plana puede incluir objetos con grosor real (libros, bordes de letreros, plantas), y los puntos sobre ellos se convierten en valores atípicos sistemáticos. Relajar el umbral de RANSAC permite que puntos no planos se incluyan, distorsionando la propia H.

  • La suposición de rotación pura deja de ser válida: si la unión de imágenes a mano incluye incluso una ligera traslación, los sujetos más cercanos se desplazan más, produciendo imágenes fantasma. Es preferible usar un trípode o rotar cerca del centro óptico del objetivo.

  • Configuraciones degeneradas: si los puntos de correspondencia se concentran a lo largo de una sola línea en la imagen o dentro de una región estrecha, la matriz DLT se vuelve mal condicionada y el error aumenta bruscamente en las regiones extrapoladas de H (áreas alejadas de los puntos de correspondencia).

  • Patrones repetitivos o planos de baja textura: con un patrón repetitivo como un suelo de baldosas o una ventana reticular, los descriptores locales por sí solos no pueden distinguir una correspondencia correcta de una discrepancia desplazada un período.

  • Ambigüedad en la descomposición: si K es imprecisa o el ruido es elevado, puede resultar imposible identificar de forma unívoca la solución físicamente correcta entre las múltiples candidatas de la descomposición. Siempre combine esto con información previa adicional (dirección normal, profundidad positiva).

9. Resumen

La homografía es un marco que representa con precisión dos situaciones limitadas pero frecuentes en la práctica —la correspondencia en un plano o una cámara que experimenta una rotación pura— mediante una única matriz 3\times3. El método DLT es el punto de partida de mínimos cuadrados, RANSAC es la contramedida para los valores atípicos y la descomposición es la etapa final que extrae la rotación, la traslación y la normal físicas. Sobre todo, lo importante es discernir cuándo la homografía es el modelo adecuado y cuándo se debe recurrir a la Matriz Fundamental/Esencial; si se comete un error en este límite, se termina intentando recuperar una profundidad inexistente en una escena que no es más que un plano.

Comprueba tu comprensión
¿Puede una homografía alinear objetos a diferentes profundidades?

La traslación general deja paralaje para los objetos fuera del plano.

Verifique las suposiciones de escena plana o rotación pura antes de usar una sola homografía. ## Referencias - [Hartley y Zisserman, Geometría de múltiples vistas en visión por computadora (página oficial de los autores)](https://www.robots.ox.ac.uk/~vgg/hzbook/) - [Fischler y Bolles, Consenso de muestra aleatoria (Comunicaciones de la ACM, 1981)](https://doi.org/10.1145/358669.358692) - [Malis y Vargas, Comprensión más profunda de la descomposición de homografía para el control basado en visión (Informe de investigación INRIA RR-6303, 2007)](https://inria.hal.science/inria-00174036) - [Mur-Artal, Montiel y Tardós, ORB-SLAM: Un sistema SLAM monocular versátil y preciso (IEEE TRO, 2015)](https://doi.org/10.1109/TRO.2015.2463671) - [OpenCV — Conceptos básicos de la homografía explicados con código (https://docs.opencv.org/4.x/d9/dab/tutorial_homography.html) - Referencia de OpenCV: findHomography / decomposeHomographyMat (https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html) - Módulo de unión de imágenes de OpenCV (https://docs.opencv.org/4.x/d1/d46/group__stitching.html)

What to read next

Review the backgroundIntroducción al flujo óptico: lectura de la velocidad y la estructura a partir del movimiento de la imagen.Continue the seriesGeometría epipolar: lectura de la profundidad y el movimiento de la cámara a partir de dos imágenes.Explore another aspect of this fieldLab de brillo y luminancia — exposición, gamma y recorte