Ejemplos de ImageMagick -- Corrección de lente
- Prefacio e índice de los ejemplos de ImageMagick
- Introducción a la corrección de lente
- Restricción de no escalado
- Conjuntos de parámetros predefinidos
- Calibrar desde cero
- Enfoque básico
- Determinar conjuntos de parámetros de lente con Hugin
- Definir conjuntos de puntos
-
Reconstruir los parámetros a partir de la miniatura creada por la cámara
Ejemplo Ejemplo de teclados (por El-Supremo)
Corrección de la distorsión de lente (PDF) Al tomar fotografías, las imágenes generadas están en realidad distorsionadas tanto por los efectos de la lente como por los efectos de la perspectiva esférica. Si vas a utilizar fotos, por lo general tendrás que corregir estos efectos, y eso es lo que se examinará en esta sección. La mayor parte de esta página fue aportada por Wolfgang Hugemann.
Introducción a la corrección de lente
Las lentes de ojo de pez y las lentes gran angular de bajo coste (o más bien las lentes zoom cuando se ajustan a una distancia focal corta) suelen producir una distorsión de barril pronunciada. No obstante, esta distorsión puede corregirse en gran medida aplicando transformaciones algorítmicas adecuadas a la fotografía digital. Uno de los algoritmos de corrección de lente más utilizados, introducido por Panorama Tools y usado por PTlens, también lo ofrece ImageMagick, como método de corrección de distorsión de barril (Barrel Correction Distortion Method). En este enfoque del problema, la distorsión se controla mediante cuatro parámetros de transformación a, b, c, d, que han de elegirse con criterio para corregir la distorsión producida por una lente concreta (o más bien por una cámara con zoom ajustada a cierta distancia focal). Difícilmente se encuentran valores adecuados para estos parámetros por ensayo y error. A continuación describimos cómo determinar de forma eficaz los parámetros de corrección de lente de este modelo mediante Hugin, una interfaz gráfica de usuario libre para Panorama Tools, disponible para varios sistemas operativos. Si no quieres entrar en los detalles de la corrección de lente, puedes saltarte el resto de esta página y simplemente comprar PTlens, que ofrece una corrección de lente sofisticada para una enorme cantidad de cámaras y lentes digitales a un precio razonable (gracias a su amplia base de datos de lentes). Hoy en día, algunas cámaras digitales (como la Nikon P7000) incluso incorporan la corrección de lente en sus pasos internos de procesamiento de imagen. Para las fotografías tomadas con cámaras que no ofrecen esta posibilidad, ImageMagick te permite integrar la corrección de lente como un paso de un script de procesamiento de imagen más amplio. El texto siguiente es una versión resumida del artículo Corrección de la distorsión de lente (PDF) (que trata de aplicaciones en la reconstrucción de accidentes). Las explicaciones dadas aquí son un enfoque más práctico, centrado en las maneras de obtener los parámetros de corrección de lente adecuados.
Restricción de no escalado
Como se describe en Distorsiones de barril, la distorsión de barril se define mediante la fórmula matemática
R = ( a * r^3 + b * r^2 + c * r + d ) * r
con r como la distancia al centro geométrico de la imagen de la fotografía digital y R como el radio equivalente en la imagen original. Como ocurre siempre con este tipo de mapeos, la ecuación anterior define una especie de «función de búsqueda de color», es decir, dónde buscar el color del píxel situado en el radio r. Los radios r y R están normalizados respecto a la mitad de la dimensión menor de la imagen (es decir, normalmente la altura de la imagen), de modo que r = R = 1 en los puntos medios de los bordes superior e inferior de la imagen. Al corregir fotografías digitales, conviene prestar atención a la restricción de no escalado
a + b + c + d = 1
que obviamente da R = 1 para r = 1. Panorama Tools calcula el parámetro d a partir de los demás parámetros mediante
d = 1 - a - b - c
dejándonos con tres parámetros libres del modelo, por lo que el parámetro d suele omitirse. ImageMagick calculará automáticamente d mediante la restricción de no escalado, si se omite. Así, una línea de comandos típica de ImageMagick para la corrección de lente tendría más o menos este aspecto
magick input.jpg -distort barrel '0.06335 -0.18432 -0.13008' output.jpg
dejando el cálculo de d a ImageMagick. El método de corrección de lente de Panorama Tools del que hablamos aquí supone que el eje óptico de la lente y el centro de la imagen son idénticos, lo cual no es estrictamente cierto en la práctica (debido a las tolerancias de fabricación). Además, deja de lado efectos como la distorsión en bigote (mustache distortion). Aun así, parece funcionar con una precisión asombrosa en la práctica.
Como muestra la curva (a = 0.05, b = -0.25, c = 0.05), la relación se usa normalmente en el rango de 0 a 1.5 (relación de aspecto 3:2), pasa por los puntos (0,0) y (1,1) y debe ser decreciente para r > 1.
Conjuntos de parámetros predefinidos
La base de datos de lentes actual de PTlens, que es la «médula» del programa, está cifrada y solo PTlens puede leerla. Sin embargo, hasta febrero de 2006, la base de datos de PTlens estaba codificada en formato XML, es decir, un formato de texto fácilmente editable. Esta versión de 2006 de la base de datos XML de PTlens sigue estando (legalmente) disponible en el sitio web de Hugin en SourceForge y proporciona datos para muchos modelos de cámara antiguos. Cuando la base de datos de PTlens se cifró, los autores de Hugin intentaron establecer como alternativa una base de datos de lentes libre y codificada en XML. Esta base de datos se llama LensFun y puede descargarse. Viene con una interfaz de programación completa, pero básicamente lo único que necesitas es la información de tu cámara en el archivo XML. Como ejemplo, los parámetros de corrección de lente de la otrora popular Nikon Coolpix 995 se encuentran en el archivo compact-nikon.xml, que reside en el directorio \data\db. El archivo puede examinarse con un editor de texto o un visor de XML:
<lens>
<maker>Nikon</maker>
<model>Standard</model>
<mount>nikon995</mount>
<cropfactor>4.843</cropfactor>
<calibration>
<distortion model="ptlens" focal="8.2" a="0" b="-0.019966" c="0" />
<distortion model="ptlens" focal="10.1" a="0" b="-0.010931" c="0" />
<distortion model="ptlens" focal="13.6" a="0" b="-0.002049" c="0" />
<distortion model="ptlens" focal="18.4" a="0" b="0.003845" c="0" />
<distortion model="ptlens" focal="23.4" a="0" b="0.006884" c="0" />
<distortion model="ptlens" focal="28.3" a="0" b="0.008666" c="0" />
<distortion model="ptlens" focal="31" a="0" b="0.009298" c="0" />
</calibration>
</lens>
Como puede extraerse de la ficha técnica de la cámara, el rango de zoom de la Nikon Coolpix 995 es de 8.2 – 31.0 mm, lo que corresponde a 38 – 152 mm para cámaras de película de 35 mm. Esto da un factor de recorte de 152 / 31 = 4.90, que se corresponde aproximadamente con el valor de 4.843 indicado en el archivo XML. Los coeficientes de la corrección por distorsión de barril se suministran para seis distancias focales, a saber: 8.2 mm, 10.1 mm, 13.6 mm, 18.4 mm, 23.4 mm, 28.3 mm y 31.0 mm. Los coeficientes a y c están, para esta lente, fijados a cero, es decir, la distorsión se describe únicamente mediante el término de segundo orden b. Ten en cuenta que muchas lentes también tendrán valores para los parámetros a y c, y estos deberían interpolarse igualmente de forma similar. Si tenemos una fotografía DSCN0001.jpg tomada con una Nikon Coolpix 995 ajustada a la distancia focal más corta, esta fotografía podría corregirse con ImageMagick mediante
magick DSCN0001.jpg -distort barrel '0.0 -0.019966 0.0' DSCN0001_pt.jpg
(La extensión de nombre de archivo _pt la usa PTlens para marcar las imágenes corregidas.) Para las seis distancias focales proporcionadas, el coeficiente de corrección b puede leerse del archivo XML. Para otras distancias focales, el valor adecuado puede determinarse por interpolación entre las dos distancias focales vecinas. Como alternativa, la dependencia de b respecto a la distancia focal f puede aproximarse mediante el polinomio
b = 0.000005142 * f^3 - 0.000380839 * f^2 + 0.009606325 * f - 0.075316854
Así, la distancia focal (leída de la información EXIF) se usa para calcular el parámetro de corrección de lente b en un primer paso y, después, en un segundo paso, se realiza la corrección de lente (es decir, la distorsión de barril) usando este valor como parámetro b. La sección de Windows muestra un ejemplo de VBScript en el que se usan las ecuaciones anteriores, extrayendo la distancia focal de una fotografía de la Nikon Coolpix 995 mediante magick identify.
Calibrar desde cero
Enfoque básico
Al determinar los parámetros de la lente, todos los programas se basan en el mismo paradigma: el mapeo de perspectiva ideal debería transformar las líneas rectas del mundo real en líneas rectas en la imagen. Así, si se sabe que un conjunto de puntos del mundo real P0, P1, ..., Pn está sobre una línea recta, sus imágenes p0, p1, ..., pn también deben caer sobre una línea recta. Cualquier desviación de esta regla ha de atribuirse a la distorsión de la lente. Necesitamos dos puntos para determinar los dos parámetros que definen una línea recta (por ejemplo, la pendiente y la intersección con el eje y). Cada punto adicional que se proporcione aportará otra ecuación para determinar los parámetros de corrección de lente. Así, si nuestro enfoque funcional tiene un único parámetro libre b (como en el caso de la Nikon Coolpix 995 anterior), tendríamos que proporcionar al menos tres puntos sobre una línea recta del mundo real y su imagen para determinar el parámetro de corrección de lente buscado b. Dicho de forma más concreta: el modelo de distorsión solo usa el parámetro b, es decir, las coordenadas de la imagen corregida X1, Y1 pueden calcularse a partir de las coordenadas de la fotografía digital mediante
r = s * sqrt(x1^2 + y1^2)
X1 = [(1-b) + b r^2] * x1
Y1 = [(1-b) + b r^2] * y1
Y1 = k1 * X1 + k2
Esto da como resultado una ecuación por cada punto proporcionado sobre la misma línea recta
[(1-b) + b r^2] * y1 = k1 * [(1-b) + b r^2] * x1 + k2
with: r = s * sqrt(x1^2 + y1^2)
Así pues, tres puntos del mundo real y sus puntos imagen correspondientes bastarían para determinar los parámetros que describen la línea recta y la distorsión de la lente k1, k2, b. En la práctica, rara vez se conocen las coordenadas de los puntos del mundo real, de modo que se necesitan más de tres puntos para determinar los parámetros buscados. La mayoría del software de calibración usa una cuadrícula rectangular de líneas rectas (a menudo un tablero de ajedrez) para generar un conjunto de ecuaciones y luego calcula los parámetros del mapeo mediante un ajuste no lineal por mínimos cuadrados. Algunos programas generan ellos mismos el conjunto de puntos de control, a menudo usando plantillas predefinidas; otros programas requieren que el usuario seleccione los puntos de control en la imagen de calibración.
Determinar conjuntos de parámetros de lente con Hugin
A continuación demostraremos cómo determinar un conjunto de parámetros de corrección de lente mediante Hugin. También hay un «Simple Lens Calibration Tutorial» ya preparado en el sitio web de Hugin, pero en el momento de escribir esto (2014) parece demasiado simple para proporcionar parámetros fiables que puedan usarse después para multitud de correcciones. Antes de nada, has de hacerte con un patrón de prueba adecuado. Básicamente, un patrón de tablero de ajedrez con unos 10 × 7 cuadrados, impreso en ISO 216 A3 o similar, serviría y se usa a menudo. Sin embargo, las lentes zoom de bajo coste (las llamadas lentes varifocales) deberían ajustarse a enfoque infinito durante la calibración, ya que su distancia focal real podría diferir mucho de la incrustada en el EXIF para enfoque cercano. Para lentes de enfoque fijo también puedes usar un patrón de prueba de tablero de ajedrez, lo cual es especialmente recomendable al calibrar una lente de ojo de pez, ya que puede ser difícil encontrar un objeto del mundo real lo bastante grande como para cubrir su campo de visión. Por eso, sobre todo al calibrar lentes zoom / cámaras con zoom, conviene más tomar una fotografía de un edificio moderno, como se propone en el sitio web de PTlens. Sigue las instrucciones que se dan allí. Las fotografías pueden mostrar distorsión de perspectiva:
![[IM Output]](../static/img/img_photos/building_1.gif)
con perspectiva | ![[IM Output]](../static/img/img_photos/building_2.gif)
sin perspectiva
---|---
Inicia Hugin y haz clic en el botón «Add images ...» de la primera pestaña y abre la imagen de calibración. (Consulta hugin.sourceforge.net para ver una captura de pantalla de la interfaz de Hugin.) En la parte inferior de la pestaña, ajusta «Optimise» a «Custom parameters» (lo cual añadirá una nueva pestaña llamada «Optimiser», que de otro modo no llegarías a ver). En la pestaña «Stitcher», ajusta «Projection» a «Rectilinear». En la pestaña «Control Points» ves tu fotografía de prueba dos veces y puedes definir conjuntos de puntos que estén sobre la misma línea recta eligiendo estos grupos de puntos en ambas versiones de la fotografía.
Pero no elijas exactamente los mismos puntos en ambas versiones, de modo que los puntos sean idénticos en ambas imágenes, ya que esto induciría al optimizador a tomar el camino fácil y a determinar los parámetros de una correspondencia uno a uno. En su lugar, deberías elegir puntos diferentes sobre la misma línea en ambas versiones de la imagen. Para fines de prueba, puedes definir unos cuantos de estos conjuntos de puntos, preferiblemente cerca de los bordes de la imagen, donde las líneas rectas están más distorsionadas. Comprobarás que definir tales conjuntos de puntos en Hugin es una tarea bastante tediosa (lo cual puede ser una de las razones por las que la base de datos de lensfun es tan pequeña).
Luego cambia a la pestaña «Optimiser» y elige los parámetros que optimizar haciendo clic con el botón izquierdo sobre ellos mientras mantienes pulsada la tecla ctrl. (Consulta la indicación en la parte superior de la pestaña.) Yo recomendaría optimizar «Yaw(y)», «Pitch (p)» y los parámetros de lente «a», «b» y «c». El campo de visión horizontal «Hfov (f)» se calcula a partir de los datos EXIF de la imagen de prueba, usando la entrada FocalLengthIn35mmFilm f:
Hfov = 2 × arctan (18 mm / f)
siendo 18 mm la mitad del ancho de un negativo de 35 mm (que mide 36 × 24 mm). Luego pulsa el botón «Optimize now!». Los parámetros resultantes «a», «b» y «c» deberían quedar por debajo de 0.01 para lentes gran angular y por debajo de 0.1 para lentes de ojo de pez. Si los valores son mayores, la optimización probablemente ha fallado. Si es así, comprueba los conjuntos de puntos en la pestaña «Control Points»: los puntos de control probablemente están desordenados o no se han asociado correctamente con sus líneas correspondientes. El optimizador también parece ser sensible al conjunto inicial proporcionado (matemáticamente hablando: el vector inicial), es decir, fijar todos los parámetros a cero podría ser la elección equivocada. Puedes editar el vector inicial haciendo doble clic sobre los valores en la pestaña «Optimiser» o activando la casilla «Edit script before optimising» en la parte inferior derecha de la pestaña. Esto hará aparecer un cuadro de texto antes de la optimización, que te permitirá editar la sección correspondiente del archivo de proyecto de Hugin. Vuelve a fijar el vector inicial a, b, c a a0.0 b0.0 c0.0 (u otros valores adecuados) antes de reiniciar el optimizador. La experiencia muestra que puede ayudar fijar «a» a algún valor positivo, especialmente para lentes de ojo de pez. Para una cámara equipada con una lente fija, esta calibración se hace una vez y para siempre. Para una cámara con lente zoom, hay que cubrir todo el rango de distancias focales calibrando a unas cinco distancias focales diferentes. Una vez determinado tal conjunto de parámetros, pruébalo en ImageMagick mediante
magick calibration_image.jpg -distort barrel '_a b c_ ' flat.jpg
reemplazando los valores _a b c_ por los que acabas de determinar. Las líneas de la imagen de salida deberían quedar exactamente rectas; de lo contrario, la optimización ha fallado y debe realizarse con un vector inicial distinto o un conjunto de puntos de control corregido.
Definir conjuntos de puntos
Para una calibración seria, es recomendable editar manualmente el archivo de proyecto de Hugin y definir las coordenadas de los puntos y los conjuntos de puntos por otros medios. El archivo de proyecto es un archivo de texto plano con la extensión PTO; puedes abrirlo con un editor de texto sencillo y suministrar una lista de puntos. Una sola línea en su sección # control points tiene este aspecto:
c n0 N0 x175.0 y87.8 X1533.3 Y62.6 t3
donde x, y son las coordenadas en píxeles de la imagen de origen (imagen izquierda de la pestaña) y X, Y son las coordenadas en píxeles de la imagen de destino (imagen derecha de la pestaña), que en realidad son dos versiones de la misma imagen en este caso particular. (Normalmente serían dos imágenes diferentes situadas una junto a la otra en un panorama.) La parte inicial c n0 N0 es código estándar y la parte final t3 es la numeración de la línea recta asociada, empezando con el índice 3. Como puedes ver en el ejemplo anterior, las coordenadas en píxeles pueden tener parte fraccionaria. Por supuesto, x, y y X, Y tienen que estar sobre la misma línea recta. Sin embargo, no deben ser idénticas, ya que el optimizador se negaría a funcionar en ese caso (véase más arriba). El enfoque más sencillo para garantizar esto es usar los mismos puntos en ambas imágenes, pero con el orden invertido para las coordenadas de destino; por ejemplo, usa p1, p2, p3, p4 en la imagen izquierda y P4, P3, P2, P1 en la derecha. Determina las coordenadas en píxeles de la imagen de origen con una herramienta de selección de puntos. Puedes usar cualquier visor de imágenes para ello, en concreto uno que pueda almacenar esos datos. Una herramienta independiente de la plataforma para esto sería Fiji. Yo (trabajando bajo Windows) usé polilíneas en WinMorph para hacerlo. Deberías seguir una estrategia predefinida al elegir los puntos; por ejemplo, elegir la misma cantidad de puntos en cada línea (más o menos) horizontal, yendo de izquierda a derecha (es decir, sigue una línea en zigzag por toda la imagen, como el haz de rayos catódicos en un tubo de televisión). Tal estrategia simplificará la ordenación de las coordenadas de los puntos de destino. Las líneas del archivo de texto que definen las coordenadas de los puntos de origen y destino pueden establecerse entonces de forma manual o mediante una herramienta de software. (Yo uso una subrutina de Excel VBA para realizar esta tarea.) Cuando esté listo, copia la lista de puntos a la sección correspondiente del archivo PTO, guárdalo y vuelve a abrirlo con Hugin. El resultado debería tener este aspecto:
![[IM Output]](../static/img/img_photos/hugin.jpg)
Cuadrícula de puntos de control en Hugin
Se proporciona un ejemplo ya preparado, con una imagen de calibración y el proyecto de Hugin correspondiente, en el archivo ZIP olympus_c2500l.zip. Reconstruir a partir de la miniatura creada por la cámaraHay varios casos en los que ya tenemos un par de imágenes, una con distorsión de barril y la otra ya corregida. Esta corrección puede haberse realizado con algún otro software de corrección de lente, que no nos informa de los parámetros de corrección. Además, muchas cámaras contemporáneas (2019) ofrecen realizar la corrección de lente internamente para las imágenes JPEG. Sin embargo, esta funcionalidad no suele aplicarse a las imágenes RAW. (Bueno, es RAW.) No obstante, la imagen RAW contiene una vista previa JPEG a la que la cámara ya ha aplicado la corrección. ImageMagick puede leer imágenes RAW mediante dcraw. Así, uno puede procesar con magick la imagen RAW a JPEG sin corrección de lente y comparar el resultado con la miniatura JPEG corregida internamente. En el caso de tal par de imágenes, los parámetros de corrección pueden calcularse de forma directa. Eligiendo pares de puntos correspondientes en ambas imágenes, podemos establecer directamente la relación entre r y R. ![[RAW Image]](../static/img/lens/raw_marks.jpg)
Imagen RAW (con distorsión de barril) ![]()
Miniatura corregida (que reconstruir) |
---|---
Como muestra el ejemplo anterior, tenemos libertad para elegir qué pares de puntos tomar; estos no tienen que seguir líneas rectas ni siquiera tienen que estar sobre patrones geométricos. Solo tenemos que rellenar una tabla con valores correspondientes de r y R y luego calcular una curva de regresión, por ejemplo mediante un diagrama de hoja de cálculo.
![[Calabration]](../static/img/lens/calibration_points.gif)
Puntos de calibración | ![[Regression]](../static/img/lens/regression_curve.gif)
Regresión (escalada)
---|---
Por tanto, la línea de comandos de ImageMagick es
magick barrel.jpg -distort barrel '0.0099 -0.0678 0.0014 1.0511' flat.jpg
También puedes aplicar el mismo comando directamente a la imagen en formato de cámara DNG «barrel.dng».
Ejemplos de corrección de lente
Camp Mobile
![[IM Output]](../static/img/img_photos/campmobile.jpg)
Original | ![[IM Output]](../static/img/img_photos/campmobile_pt.jpg)
Corregida | ![[IM Output]](../static/img/img_photos/campmobile_comp.jpg)
Diferencia
---|---|---
La fotografía original de la campmobile de la izquierda hubo de tomarse desde una distancia bastante corta al atardecer, ya que el espacio era limitado debido a una pendiente pronunciada a espaldas del fotógrafo. (Las malas condiciones de iluminación explican el tinte azul, que proviene de un fuerte aclarado en el posprocesado.) La fotografía original muestra una distorsión de barril pronunciada, visible sobre todo en la franja horizontal cerca de la parte superior de la imagen y en la esquina trasera de la construcción. La Nikon Coolpix 995 usada para esta toma figura en la base de datos de PTlens, por lo que la distorsión pudo corregirse con facilidad, como se ve en el centro. La imagen de la derecha muestra la diferencia entre las versiones en escala de grises de las dos fotografías, calculada por sustracción de ambas, seguida de negación y un recorte extremo y corrección gamma. De nuevo, los efectos de la corrección se ilustran mejor con la franja horizontal de la parte superior. El círculo blanco (que indica diferencia cero) resulta de la restricción de no escalado: los puntos sobre un círculo con un diámetro igual a la dimensión menor de la imagen permanecen inalterados.
Aplanado de GoPro
La lente de la cámara GoPro produce una distorsión de barril pronunciada, que parece formar parte de su sello de marca. Por ejemplo, la GoPro Hero 3+ silver edition tiene una lente de ojo de pez con una distancia focal fija de 2.77 mm, correspondiente a una distancia focal de 16 mm en película de 35 mm si se usa toda el área fotosensible. La GoPro Hero 3+ tiene tres modos de foto:
- 10 megapíxeles = 3680 × 2760 píxeles gran angular (16 mm en película de 35 mm)
- 7 megapíxeles = 3072 × 2304 píxeles gran angular (16 mm en película de 35 mm)
- 5 megapíxeles = 2624 × 1968 píxeles ángulo medio (23 mm en película de 35 mm)
La GoPro Hero 3+ está equipada con un sensor de 1/2.3", que tiene un factor de recorte de 5.64. (Lo que da una distancia focal de solo 15.62 mm en película de 35 mm; los 16 mm que proporciona la información EXIF se deben probablemente al redondeo.) Los dos primeros modos parecen usar toda el área fotosensible; la resolución reducida se logra evidentemente por submuestreo. Los parámetros de distorsión son, por tanto, los mismos, como puede demostrarse en la práctica. El modo de 5 megapíxeles usa evidentemente solo parte del área fotosensible, ya que 3680 / 2624 × 16 ≈ 23. Los parámetros de la lente pueden determinarse como
- gran angular:
- a = 0.06335
- b = -0.18432
- c = -0.13009
- ángulo medio:
- a = 0.01359
- b = -0.06034
- c = -0.10618
En teoría, los parámetros del segundo modo pueden derivarse del primero, ya que los radios ri y Ri están acoplados por el factor de escala κ = 3680 / 2624 = 1.402, lo que lleva a:
- a2 = a1 / κ³
- b2 = b1 / κ²
- c2 = c1 / κ
Los parámetros anteriores, resultantes de una optimización independiente, no difieren mucho de estos valores teóricos. De forma análoga, los parámetros para los distintos modos de vídeo pueden derivarse bien por optimización, bien a partir de la parte del área del sensor que usa ese modo. Para el vídeo, el campo de visión horizontal no puede derivarse de los datos EXIF. Puede calcularse a partir del área fotosensible utilizada, determinarse a partir del propio vídeo (grabando metraje en condiciones controladas) o simplemente estimarse junto con los demás parámetros, es decir, dejarse como parámetro libre en la optimización. Los parámetros para vídeo HD (1920 × 1080) son: * a = 0.030530 * b = -0.124312 * c = -0.038543
Estos parámetros pueden usarse para una corrección fotograma a fotograma con ImageMagick. Como alternativa, pueden usarse para «aplanar» todo el vídeo mediante el complemento DeBarrel de AVIsynth, que también usa el modelo de corrección de lente de Panorama Tools.
Dos teclados por el_supremo
La foto que tomé de mis dos teclados tiene una distorsión de barril muy evidente, porque se tomó a una distancia focal de 17 mm.
Este tipo de distorsión puede corregirse, por ejemplo, con Digital Photo Professional de Canon (tengo una cámara Canon 50D). Otros fabricantes de cámaras réflex suelen proporcionar software para hacer este tipo de corrección para sus lentes, pero yo quería ver cómo de bien funcionarían los ejemplos anteriores en esta foto. El primer paso es ir al sitio web de LensFun y descargar la última versión de su base de datos de cámaras. Descomprime el paquete (winzip puede descomprimir un archivo .tar.gz en Windows) y luego, en el directorio «lensfun/data/db», busca el archivo que corresponda al fabricante de tu cámara. En mi caso miré «slr-canon.xml», que puede editarse con cualquier editor de texto. Ahora encuentro la información de la lente concreta que estoy usando, que en este caso es una «EF-S 17-85mm». La información de esa lente tiene este aspecto:
<lens>
<maker>Canon</maker>
<model>Canon EF-S 17-85mm f/4-5.6 IS USM</model>
<mount>Canon EF-S</mount>
<cropfactor>1.6</cropfactor>
<calibration>
<distortion model="ptlens" focal="17" a="0.021181" b="-0.055581" c="0" />
<distortion model="ptlens" focal="20" a="0.019344" b="-0.043786" c="0" />
<distortion model="ptlens" focal="22" a="0.015491" b="-0.026682" c="0" />
<distortion model="ptlens" focal="28" a="0.008084" b="-0.007472" c="0" />
<distortion model="ptlens" focal="30" a="0.005522" b="-0.001763" c="0" />
<distortion model="ptlens" focal="35" a="0.003149" b="0.002207" c="0" />
<distortion model="ptlens" focal="44" a="0" b="0.008269" c="0" />
<distortion model="ptlens" focal="53" a="0" b="0.008792" c="0" />
<distortion model="ptlens" focal="61" a="0" b="0.00738" c="0" />
<distortion model="ptlens" focal="72" a="0" b="0.006226" c="0" />
<distortion model="ptlens" focal="78" a="0" b="0.007095" c="0" />
<distortion model="ptlens" focal="85" a="0" b="0.007288" c="0" />
</calibration>
</lens>
Las entradas de calibración dan valores de distorsión para un rango de distancias focales de 17mm hasta 85mm. Si la distancia focal que necesitaba estuviera entre dos de esos valores, podría elegir la más cercana o interpolar los valores. Dado que la foto que estoy corrigiendo se tomó a 17mm, necesito la información de la primera línea de la información de calibración. Eso me da los valores: a="0.021181" b="-0.055581" c="0" Estos son los tres parámetros que se usan para corregir la distorsión de la lente. Sin embargo, para algunas versiones antiguas de IM, la corrección de la distorsión de barril requiere un cuarto parámetro d. Por suerte, es fácil calcular el valor de d a partir de los otros tres con esta sencilla fórmula: d = 1-a-b-c Eso significa: d="1.0344". |
IM calculará automáticamente el valor de «d» si no se proporciona como argumento de distorsión, pero algunas versiones antiguas de IM no lo hacían. |
|---|---|
| Eso da la distorsión de barril real, para corregir la distorsión de la lente... |
magick keyboards.jpg \
-distort barrel "0.021181 -0.055581 0" \
keyboards_ptlens.jpg
| Por supuesto, no deberías guardar en JPEG hasta haber terminado por completo de procesar tu imagen, debido a la compresión con pérdida de JPEG.
---|---
En la foto original, la distorsión es especialmente evidente a lo largo de la parte inferior del atril y a lo largo del teclado superior. Estas distorsiones han desaparecido casi por completo en la foto de salida. Una comparación visual de este resultado con el obtenido con el software de Canon muestra esencialmente el mismo resultado. El-Supremo
![[IM Output]](../static/img/img_photos/keyboards.jpg)
![[IM Output]](../static/img/lens/keyboards_ptlens.jpg)