Cómo se implementa la Corrección de perspectiva

Guillermo Luijk

Fujista Habitual
Aprovechando una discusión de otra red he hecho un ejercicio de aplicar por código una corrección de distorsión de perspectiva (mal llamada así, porque lo que alteramos realmente es la dirección de observación) a una fotografía donde las líneas verticales no convergen por haber tenido que apuntar la cámara hacia arriba.

Esta transformación, que es la misma que aplican en sus tripas Photoshop y todos los programas con este tipo de corrección, tiene una solución única y de formulación cerrada resultado de resolver un sistema lineal de 8 ecuaciones con 8 incógnitas, fruto de basar el modelo en 4 puntos de referencia entre la imagen distorsionada y la corregida. Es una transformación geométricamente lineal que permite reproyectar cualquier punto entre los dominios con y sin distorsión.

Perdonad que ponga las imágenes como enlaces (en Tapatalk se ven directamente).

La formulación matemática y su implementación en lenguaje R:

http://guillermoluijk.com/misc/keystonecorrectionequationsplus.png

Una muestra de que esta transformación es geométricamente lineal, es decir, mantiene como rectas todas las rectas que pueda haber en la imagen origen:

http://guillermoluijk.com/misc/rectilinear.png

La transformación se define por la correspondencia de 4 puntos entre el espacio origen y destino, definiendo así dos trapezoides que pueden ser arbitrarios en forma, posición, tamaño,... Aquí un ejemplo de cómo se transforma una serie de círculos concéntricos dibujando ambos trapezoides:

http://guillermoluijk.com/misc/circles.png

Ahora va una imagen real a la que he aplicado la corrección. Aquí la versión capturada contrapicando la cámara (la imagen presenta fugas verticales):

http://guillermoluijk.com/misc/distorted.jpg

Y aquí la comparación entre la imagen anterior corregida y la obtenida desde el mismo sitio con un descentrable con SHIFT aplicado y apuntado en horizontal:

http://guillermoluijk.com/misc/keystone.gif

Ambas imágenes, la descentrada y la corregida, son geométricamente idénticas. La mínima diferencia de perspectiva (ver los árboles vs el fondo por ejemplo) se debe únicamente al microcambio en la posición de la pupila de entrada al contrapicar la cámara.

Esto sirve además como ejemplo de que con un descentrable no se obtiene nada, a efectos de geometría y perspectiva, que no puedas obtener aplicando una corrección software a una focal no descentrable lo suficientemente angular. Aquí usando la misma focal solo se perdían los trocitos en negro; habría bastado un 20mm para tenerlo todo.

Salu2!
 
He añadido un "a efectos de geometría y perspectiva" porque la única comparación que quería hacer con el descentrable se refería a ese apartado.

La imagen no tiene la misma calidad con un descentrable que con la corrección, dependerá de cada caso, y no siempre será a favor del descentrable. Mi imagen no demuestra nada ni a favor ni en contra del descentrable porque no tiene un tamaño suficiente, aparte mi interpolación es básica.

La ventaja del descentrable es facilidad e inmediatez. Puedes ver in situ cómo va a quedar la composición, la perspectiva y te ahorras el tiempo y engorro del procesado posterior. También evitas sorpresas de que tras la corrección software luego te falte un trozo de escena.

En cuanto a calidad se podría hablar mucho y dependerá de qué descentrable, de qué angular pongas a competir con él, y de qué nivel de exigencia tenga la corrección de la escena. De forma general puedo imaginar escenas donde un buen descentrable de más calidad que otro angular corregido, pero también me puedo imaginar casos donde el angular, aún corregido, supere al descentrable. Hay que pensar que el descentrable en cuanto a calidad óptica parte con dos hándicaps:
- Tiene que estar muy bien corregido en distorsión (me refiero a barril/cojín, no a la perspectiva que tratamos aquí), o al trabajar con él descentrado se hace muy complicado eliminar la distorsión. Y objetivo muy corregido en distorsión equivale a objetivo menos nítido y con más aberraciones.
- Por otro lado un descentrable requiere abarcar un círculo de imagen muy amplio (mayor al sensor). De nuevo más círculo significa menos nitidez general y más aberraciones.

Así que no basta decir que como con él no interpolas vaya a dar más calidad.

En resumidas cuentas opino que los descentrables son un poco dinosaurios de la época analógica, donde la corrección de perspectiva era imposible (o casi, salvo que fueras un virguero del laboratorio). En digital, salvo que aproveches masivamente sus ventajas de facilidad e inmediatez (por ejemplo para trabajo profesional), lo veo un tipo de objetivo a extinguir. Yo lo tengo por capricho del pasado y no lo compraría de nuevo, aunque es verdad que no me quiero deshacer de él, que sería lo racional. Es un objetivo que te enseña mucho sobre óptica y geometría.

Salu2!
 
Muy interesante los post,
Siempre había pensado de como se consigue.esa corrección, me lo imaginaba que debería era más o menos así:
1695625346591.png

Pero lo que no sabía el tipo de algoritmos utilizado, ecuaciones de 8 incógnitas, vaya tocho, y lo fácil que es hacerlo en edición.

Me imagino que primero se enderezar la imagen, y después se interpolan los pixeles que faltan o que sobran, para rellenar los agujeros, o tal vez se haga al mismo tiempo, línea por línea. Aquí las cámaras de más números de pixeles llevan ventaja.

Muy interesante Guillermo.

Gracias
 
Última edición:
FotoPrecios mínimos del día.
Pero lo que no sabía el tipo de algoritmos utilizado, ecuaciones de 8 incógnitas, vaya tocho, y lo fácil que es hacerlo en edición.

Me imagino que primero se enderezar la imagen, y después se interpolan los pixeles que faltan o que sobran, para rellenar los agujeros, o tal vez se haga al mismo tiempo, línea por línea. Aquí las cámaras de más números de pixeles llevan ventaja.
Ojo que resolver un sistema lineal de 8 ecuaciones con 8 incógnitas es una chorrada, el único intríngulis es invertir la matriz 8x8 que lo define; e invertir matrices es uno de los procedimientos más trillados que existen En el código que puse no lleva más de 10 líneas resolver el sistema y obtener los 8 numeritos que relacionan posiciones de píxeles entre ambas imágenes.

Para el usuario existe el concepto "enderezar": tú tocas algo en un programa y ves que la imagen "se endereza". Pero programando solo hay cálculos de píxeles. Lo que para el usuario es "enderezar" para el programa es calcular los píxeles transformados a partir de los píxeles origen. La forma de funcionar no es recorrer los píxeles origen e ir transformándolos (enderezándolos) para ver en qué posición destino caen, sino al revés, recorrer los píxeles de la imagen destino (la corregida o enderezada), que obviamente aún no tiene definidos sus valores, e ir uno por uno a ver qué combinación de píxeles origen (y esta "combinación" es la interpolación) suministra el valor.

He hecho otro ejercicio. El que puse del puente, aunque pudiera parecer un ejercicio de corrección de perspectiva en realidad no lo era, era un mapeo o correspondencia de la foto hecha con fugas verticales sobre la foto obtenida con el descentrable. Mapeé 4 puntos escogidos de la escena con fugas sobre esos mismos puntos de la toma descentrada, y como no podía ser de otro modo se mapearon todos los demás elementos de la escena, y claro, de rebote se corrigieron las verticales.

En este nuevo ejercicio no hay toma descentrada, solo una toma contrapicada con fugas verticales, así que es un ejercicio genuino de corrección de las fugas. De nuevo he escogido 4 puntos de control (el algoritmo siempre funciona con una pareja de trapezoides origen y destino formados por 4 puntos), y a partir del trapezoide origen he definido un nuevo trapezoide destino donde las coordenadas Y no cambian, pero las coordenadas X se alinean en el valor medio:


La transformación así garantiza que las dos verticales de control, que aparecen fugando en origen, se tornen verticales. De rebote, y como no puede ser de otro modo, todas las demás verticales del edificio que fugaban se tornan perfectamente verticales:


Ésta es la forma en que más me gusta cómo funciona la corrección de perspectiva en cualquier programa (creo que Capture One fue el primero en implementarlo): el usuario ayuda al programa a detectar 2 líneas verticales de la escena, pero que no aparecen paralelas por culpa de la fuga. El programa no necesita nada más, solo con esa información puede volver paralelas (y verticales) esas dos líneas y cualquier otro elemento paralelo a ellas de la escena. Sin necesidad de andar tanteando con ningún slider de corrección de perspectiva, que es una pesadilla totalmente innecesaria.

Salu2!
 
Última edición:
Publicada la segunda parte para entender un poco mejor las tripas de estos procesados, con ejemplos reales de aplicación donde una transformación trapezoidal puede realizar el trabajo:


Transformaciones geométricas básicas:

basicoperations.gif


Mapeo de imágenes (+ comentario sobre objetivos descentrables):
mapping.gif


Correcciones de perspectiva:
keystonevertical.gif


keystoneshiftmulti.gif


Montaje de panorámicas rectilíneas:
pano512.jpg


Salu2!
 
Muy interesante post @Guillermo Luijk.
Quienes los han utilizado dicen que es el mejor método para hacer las panorámicas con el aspecto más natural, las rectilíneas.
Con los cabezales panorámicos como el que yo uso te sueles tener que quedar con la proyección cilíndrica si es de una fila o esférica si es de dos o más. Si quieres respetar algo más la arquitectura, puedes acudir a la Panini.
Pero cuando te quieres evadir del mundo de las curvas y aplicas la rectilínea los extremos del panorama quedan exageradamente sobredimensionados. Al menos esa es mi experiencia.
 
panorámicas con el aspecto más natural, las rectilíneas.
Con los cabezales panorámicos como el que yo uso te sueles tener que quedar
Con las proyecciones para montar panorámicas pasa como con las proyecciones para construir mapas: no existe ninguna mejor ni más natural que todas las demás. Cada una tiene sus puntos fuertes y la mejor dependerá de cada caso de uso. Si fotografías edificios es casi obligatorio usar la rectilínea o saldrán curvos. Si fotografías paisaje la cilíndrica es mucho más conveniente porque no estira los extremos.

La elección de la proyección no tiene que ver con el cabezal que hayas usado para hacer las capturas; éste solo determina lo fácil y preciso que resulta llevarte el material a casa. La proyección a usar la dicta el sujeto y la cobertura (ángulo de visión).

Salu2!
 
Con las proyecciones para montar panorámicas pasa como con las proyecciones para construir mapas: no existe ninguna mejor ni más natural que todas las demás. Cada una tiene sus puntos fuertes y la mejor dependerá de cada caso de uso. Si fotografías edificios es casi obligatorio usar la rectilínea o saldrán curvos. Si fotografías paisaje la cilíndrica es mucho más conveniente porque no estira los extremos.

La elección de la proyección no tiene que ver con el cabezal que hayas usado para hacer las capturas; éste solo determina lo fácil y preciso que resulta llevarte el material a casa. La proyección a usar la dicta el sujeto y la cobertura (ángulo de visión).

Salu2!
El cabezal por supuesto que no altera las proyecciones, me refería a cabezales panorámicos versus objetivos descentrables, que sí creo que logran panorámicas rectilíneas que no alteran los extremos, aunque evidentemente con un ángulo más limitado.
 
me refería a cabezales panorámicos versus objetivos descentrables, que sí creo que logran panorámicas rectilíneas que no alteran los extremos
Negativo, todos logran lo mismo. La posición de la cámara (más exactamente la posición de la pupila de entrada del objetivo) manda. Lo otro son detalles que no afectan a lo que puedas lograr.

Salu2!
 
Negativo, todos logran lo mismo. La posición de la cámara (más exactamente la posición de la pupila de entrada del objetivo) manda. Lo otro son detalles que no afectan a lo que puedas lograr.

Salu2!
¿Quieres decir que si desplazas el descentrable a derecha e izquierda el resultante de las tres tomas deformará las laterales tal como una proyección rectilínea con un cabezal panorámico?
 
¿Quieres decir que si desplazas el descentrable a derecha e izquierda el resultante de las tres tomas deformará las laterales tal como una proyección rectilínea con un cabezal panorámico?
Exactamente igual. La proyección rectilínea, la obtengas como la obtengas: con un descentrable desplazado, con un ultra angular rectilíneo, con un ojo de pez corregido, con una panorámica obtenida con 1000 fotos con una rótula panorámica, con un motor de render 3D,... con cualquier cosa que puedas imaginar, es única.

Es como funciona la cámara oscura y no hay varias versiones. No es una cuestión de fotografía sino de geometría: solo existe una posible proyección de sujetos (coordenadas) tridimensionales sobre un plano pasando por un agujerito.

The one and only rectilinear projection:


Salu2!
 
Última edición:
Exactamente igual. La proyección rectilínea, la obtengas como la obtengas: con un descentrable desplazado, con un ultra angular rectilíneo, con un ojo de pez corregido, con una panorámica obtenida con 1000 fotos con una rótula panorámica, con un motor de render 3D,... con cualquier cosa que puedas imaginar, es única.

Es como funciona la cámara oscura y no hay varias versiones. No es una cuestión de fotografía sino de geometría: solo existe una posible proyección de sujetos (coordenadas) tridimensionales sobre un plano pasando por un agujerito.

The one and only rectilinear projection:


Salu2!
No me lo esperaba, pensaba que al menos habría alguna diferencia en la deformación. En el desplazamiento las tres tomas son paralelas mientras que en el giro no... Misterios de la geometría :D
 
En el giro las tomas se transforman para dar lo que las tomas paralelas te dan directamente. El resultado es el mismo porque geométricamente no puede no serlo.

La toma central es tal cual la capturó la cámara, sus dos vecinas de cada lado han sido transformadas de la única forma en que pueden ser transformadas para que todas las rectas queden alineadas:

pano.jpg

Salu2!
 
No estoy de acuerdo, Guillermo. En un desplazamiento paralelo a un plano, ya sea por descentramiento o por desplazamiento de la cámara, se puede obtener un ángulo de visión enorme (en realidad son varios mismos ángulos de visión –desde distintos puntos de vista– unidos, o varias proyecciones que coinciden en sus extremos) sin que exista ninguna deformación. Ese ángulo enorme sin deformar los extremos no lo podrías conseguir con un giro panorámico proyectado rectilíneamente.
En otros casos (que no sea un plano paralelo según tu movimiento) puede resultar imposible unir las tomas.
El desplazamiento, ya sea por descentramiento o por menear la cámara, implica mover la pupila de entrada y, por tanto, variar la perspectiva.

Los giros sobre la pupila de entrada (panorámicas) equivalen al uso de un objetivo más angular y no hay variación de perspectiva.

¡Saludos!
 
Última edición:
No estoy de acuerdo, Guillermo. En un desplazamiento paralelo a un plano, ya sea por descentramiento o por desplazamiento de la cámara, se puede obtener un ángulo de visión enorme sin que exista ninguna deformación. En otros casos (que no sea un plano paralelo según tu movimiento) puede resultar imposible unir las tomas.
El desplazamiento, ya sea por descentramiento o por menear la cámara, implica mover la pupila de entrada y, por tanto, variar la perspectiva.
Los giros sobre la pupila de entrada equivalen al uso de un objetivo más angular y no hay variación de perspectiva.
¿Es correcto o no lo que digo?
Es que vichenso lo está llamando "desplazamiento", pero se refiere al de un objetivo descentrable (lo que se desplaza no es la óptica, es el plano de proyección). En todo momento se está hablando de hacer fotos sin alterar la posición de la pupila de entrada. O al menos es de lo que yo estoy hablando, porque obviamente desplazar la cámara es otra historia completamente diferente.

Salu2!
 
Yo me refería a la diferencia entre desplazar (mover lateralmete si lo preferís) un objetivo descentrable o rotar en el punto nodal con un cabezal panorámico. Mover la cámara lateralmente es lo ideal para reproducir objetos planos, pero no sirve para los tridimensionales.
 
Mover la cámara lateralmente es lo ideal para reproducir objetos planos, pero no sirve para los tridimensionales.
Así es. Solo sirve para objetos planos y desplazándose paralelamente a ese plano. En cualquier otro caso no vale.

..pero se refiere al de un objetivo descentrable (lo que se desplaza no es la óptica, es el plano de proyección)...
Yo creo que en un objetivo descentrable se desplaza la óptica. El plano de proyección está quieto en su sitio si solo desplazo y no giro, y lo que se desplaza al descentrar el objetivo, además de la pupila de entrada, es la imagen que este proyecta sobre el plano focal.
Es lo que yo veo que hacen los descentrables.
 
Atrás
Arriba