Homografía para cambiar el punto de vista de una imagen (o cómo funciona el visor de Street View si así se entiende mejor)

Guillermo Luijk

Gurú Fujista
En una fotografía obtenida con proyección rectilínea (la que hacen el 99,9% de cámaras del mundo), es posible cambiar el punto de vista, es decir la dirección en la que se apuntó la cámara, con una matriz de rotación que modele 3 movimientos básicos:
  • Yaw/Paneo: rotación a izquierda/derecha
  • Cabeceo/Pitch: rotación arriba/abajo
  • Roll/Alabeo: rotación sobre el eje de la cámara

yawpitchroll.png



Esto es lo que hace en sus tripas cualquier visor panorámico como el Street View de Google, y también seguramente la corrección de perspectiva de tu revelador RAW. El cálculo de la matriz para cada uno de los ajustes se puede ver a continuación. Además definidos varios ajustes podemos agruparlos en una única matriz final multiplicando las matrices parciales. Aplicada la matriz de rotación final sobre la imagen, todos los cambios se realizarán de golpe con una sola interpolación de la imagen:

matriz_rotacion.png



Con Gemini Pro y tras algunas iteraciones para poder añadir un parámetro de zoom y cambiar un par de detalles, he obtenido una función en C++ ultrarrápida que aplica las transformaciones definidas por cualquier matriz de rotación sobre cualquier imagen. Solo necesita el parámetro de la distancia focal con que fue obtenida dicha imagen. Aquí se muestra una escena de partida sobre la que se aplica una rotación completa que incluye cambios de roll, pitch y yaw:

computervision1.jpg


computervision2.jpg



Pero he ido un paso más allá: si en una escena real existe algún rectángulo que por efecto de la perspectiva aparece en la fotografía como un trapezoide irregular, podemos realizar una corrección del punto de vista hasta llevar la cámara a una dirección perpendicular a dicho rectángulo, con lo que este aparecerá en sus dimensiones reales.

He pedido a Gemini que, a partir de la localización de las 4 esquinas del trapezoide (marcado en amarillo), devuelva la matriz de rotación que aplicada a la imagen apuntará la cámara de forma perpendicular a dicho rectángulo, restaurando sus proporciones reales. Un ejemplo de rotación radical con este método:

computervision3.jpg


computervision4.jpg



Lo que me ha construido Gemini Pro en un par de horas de juego, incomprensiblemente no lo hace ningún programa profesional de tratamiento de imágenes: Photoshop, Lightroom o Capture One. Permiten definir el trapezoide irregular pero luego ninguno de ellos puede, a partir de él, restaurar la relación de aspecto real del objeto. Esto es algo utilísimo, por no decir imprescindible, en fotografía de arquitectura y de interiorismo.

Pasado a limpio: Cambio del punto de vista de cámara mediante homografías con R

Salu2!
 
Última edición:
Muy interesante. Yo soy menos ambicioso y las numerosas fotografías de construcciones que hago, incluso con panorámicas, las corrijo a base de prueba y error con las herramientas de ACR, Lightroom o Photoshop, aunque tengo que hacerlo en varios pasos y por aproximaciones sucesivas. Saludos y gracias por compartir tu trabajo.
AH! Y en los museos de pintura cuando fotografío cuadros no frontalmente para evitar reflejos, también será útil el sistema para obtener una visión frontal.
 

AH! Y en los museos de pintura cuando fotografío cuadros no frontalmente para evitar reflejos, también será útil el sistema para obtener una visión frontal.
Ese ejercicio precisamente lo hice:

Desde esta fotografía:

toro512.jpg



Obtener sus dimensiones reales:

torocorregido512.jpg



Quiero pensar que la corrección manual de perspectiva de ACR y demás, es decir ésa en la que tú vas tanteando rotación, tilt,..., se respetan estas dimensiones. Lo que es incomprensible es que no ocurra lo mismo en la modalidad donde tú defines dos parejas de lados paralelos, que es comodísimo.

Salu2!
 
Ese ejercicio precisamente lo hice:

Desde esta fotografía:

toro512.jpg



Obtener sus dimensiones reales:

torocorregido512.jpg



Quiero pensar que la corrección manual de perspectiva de ACR y demás, es decir ésa en la que tú vas tanteando rotación, tilt,..., se respetan estas dimensiones. Lo que es incomprensible es que no ocurra lo mismo en la modalidad donde tú defines dos parejas de lados paralelos, que es comodísimo.

Salu2!
Realmente para ajustar la relación de aspecto, que no sé si las transformaciones que hago la mantienen exactamente, me fijo en alguna parte de la imagen que me pueda ayudar o si quierom exactitud consulto las dimensiones del cuadro en internet. No es lo mejor, pero... Muchas gracias y saludos.
 
Atrás
Arriba