1 Introducción
1.1 ¿Qué es la homografía? 1.2 Alineación de imágenes mediante homografía 1.3 Aplicaciones de la homografía: Mosaico panorámico
2 Cálculo de la homografía
3 Resumen
4 Referencias
La historia bíblica del edificio de Babel ilustra cómo la falta de comunicación puede frustrar planes ambiciosos. Este concepto se relaciona con el término "homografía", que aunque suena complejo, representa un concepto fundamental en visión por computadora.
1 Introduccción
1.1 ¿Qué es la homografía?
Imagínese dos imágenes de una superficie plana (por ejemplo, una revista). Los puntos rojos representan coordenadas físicas correspondientes entre ambas imágenes. En términos de visión por computadora, estos son puntos de correspondencia.
La homografía es una matriz 3x3 que mapea puntos de una imagen a sus correspondientes en otra imagen. Matemáticamente se representa como:
Considerando un conjunto de puntos de correspondencia, la homografía opera de la siguiente manera:
1.2 Alineación de imágenes mediante homografía
Esta relación es válida para todos los puntos que estén en el mismo plano del mundo real. Por ejemplo, al aplicar la homografía a una imagen de libro, se alineará con la imagen correspondiente del mismo libro. Sin embargo, puntos fuera de este plano (como mesas o pisos) no se alinearán correctamente. Para escenas con múltiples planos, se requiere aplicar distintas homografías por cada superficie.
1.3 Aplicaciones de la homografía: Mosaico panorámico
Al conocer la homografía entre dos imágenes, es posible mapear una imagen a la otra. Esto es especialmente útil para escenas con múltiples planos. Al rotar la cámara y capturar imágenes, sus regiones comunes pueden alinearse para crear un mosaico panorámico. Este proceso básico utiliza la homografía y técnicas de fusión inteligente.
2 Cálculo de la homografía
Para estimar la homografía entre dos imágenes se necesitan al menos 4 puntos de correspondencia. Si se disponen de más puntos, el cálculo será más robusto. La matriz H tiene 8 grados de libertad, por lo que se requieren 8 ecuaciones. Cada par de puntos proporciona 2 ecuaciones. OpenCV calcula la homografía óptima para todos los puntos. El código siguiente muestra el proceso:
C++:
// Ejemplo_Homografia.cpp
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main() {
Mat srcImage = imread("./image/libro2.jpg");
vector<Point2f> srcPoints = {{141, 131}, {480, 159}, {493, 630}, {64, 601}};
Mat dstImage = imread("./image/libro1.jpg");
vector<Point2f> dstPoints = {{318, 256}, {534, 372}, {316, 670}, {73, 473}};
Mat homography = findHomography(srcPoints, dstPoints);
Mat result;
warpPerspective(srcImage, result, homography, dstImage.size());
imshow("Imagen Original", srcImage);
imshow("Imagen Destino", dstImage);
imshow("Imagen Transformada", result);
waitKey(0);
return 0;
}
Python:
import cv2
import numpy as np
if __name__ == '__main__':
src = cv2.imread('./image/libro2.jpg')
src_pts = np.array([[141, 131], [480, 159], [493, 630], [64, 601]])
dst = cv2.imread('./image/libro1.jpg')
dst_pts = np.array([[318, 256], [534, 372], [316, 670], [73, 473]])
H, _ = cv2.findHomography(src_pts, dst_pts)
output = cv2.warpPerspective(src, H, (dst.shape[1], dst.shape[0]))
cv2.imshow("Imagen Original", src)
cv2.imshow("Imagen Destino", dst)
cv2.imshow("Resultado", output)
cv2.waitKey(0)
3 Resumen
Para insertar un anuncio virtual en una imagen, siga estos pasos:
- Seleccionar 4 puntos en la imagen de destino (por ejemplo, esquinas de un cartel)
- Definir puntos de referencia en la imagen de origen (0,0), (ancho-1, 0), etc.
- Calcular la homografía con findHomography
- Aplicar la transformación perspecitva a la imagen de origen
Este proceso se puede implementar con código similar al mostrado en el ejemplo.
4 Referencias
https://www.learnopencv.com/homography-examples-using-opencv-python-c/https://blog.csdn.net/baishuo8/article/details/80777995