Inicio | Software y utilidades | Corrección de lente: LensFun, Hugin e ImageMagick

Corrección de lente: LensFun, Hugin e ImageMagick

Sábado, 13 de Octubre de 2012 11:01

correccion de lenteUno de los aspectos de la digitalización de patrimonio o fotografía con una orientación a usos científicos que con frecuencia se descuida o es estimado de forma subjetiva, son las correcciones de aberraciones producidas por nuestras lentes, o lo que coloquialmente se conoce por corrección de lente.

Las correcciones de lente son imprescindibles para poder realizar mediciones con precisión sobre la imagen, por otra parte son un proceso esencial y normalmente incluido en cualquier proceso de creación de panoramas o modelos 3D por fotogrametría, ya que de lo contrario toda estimación geométrica en los bordes de nuestra fotografía sería claramente errónea.

Desde la versión CS5, Adobe integró entre sus herramientas las correcciones de lente a partir de datos objetivos obtenidos de una lente en particular, denominándolo “Perfiles de Lente” que pueden ser obtenidos de sus propias bases de datos, descargarlos con la herramienta Adobe Lens Profile Download o generando los nuestros propios con la utilidad Adobe Lens Profile Creator, herramientas que intentaré abordar en artículos posteriores ("Corrección de Lente con Adobe Lens Profile"), ya que me parecen un buen complemento a nivel geométrico a los flujos de trabajo con perfiles de cámara

En este artículo voy a intentar introducir un poco los aspectos de corrección de lente con herramientas Open Source.

Las patologías relacionadas con las aberraciones de las lentes pueden ser múltiples, desde geométricas, cromáticas, viñetados, etc,. sin embargo por lo frecuente y pienso que práctico del proceso voy a centrarme exclusivamente en la típica distorsión de barril que se producen en la mayoría de lentes en cuanto su distancia focal comienza a descender de 40-50mm.

La distorsión de barril o barrilete se caracteriza cuando las líneas rectas recogidas en nuestra imagen se curvan en forma convexa respecto al eje óptico de la imagen, motivado por un cierto aumento de las lentes en el centro de las mismas respecto a sus bordes, algo muy común en los objetivos angulares, que se lleva al extremo en los ojos de pez.

Lo sencillo de los algoritmos de corrección de este tipo de aberración óptica, y los elevados costes de diseño para compensar ópticamente dicho fenómeno, no son grandes alicientes para que la industria ponga cierto empeño en solucionar este tipo de aberraciones en las lentes.

Este tipo de distorsión es propiamente una deformación radial de la imagen la cual fue descrita por el profesor Helmut Dersh de la universidad de Furtwangen a finales de la década de los noventa. Y es muy empleado en las correcciones de lente de los programas orientados a la creación de panoramas o fotogrametría.

La función en si es un polinomio de tercer orden donde ser relaciona la distancia de un pixel desde el centro de la imagen de origen (rsrc) a la distancia correspondiente en la imagen corregida (rdest)

rsrc = ( a * rdest3 + b * rdest2 + c * rdest + d ) * rdest

Introducirnos en dicha fórmula es fundamental para entender muchas de las herramientas destinadas a realizar estimaciones sobre esta patología de forma que en muchas de ellas van a trabajar con los parámetros a, b, c y d presentados en la fórmula anterior. De manera que a+b+c+d = 1, aunque esta relación no siempre se cumple de forma estricta, por lo que con frecuencia sólo se trabaja con a, b y c ya que d es fácilmente deducible.

Obtener los factores de caracterización a, b y c

Para obtener los parámetros a,b y c que describan la cantidad de aberración en barrilete de nuestra lente, podemos recurrir a dos estrategias:
Por una lado recurrir a LensFun, una importante base de datos open-source donde se describen estos atributos para la mayoría de ópticas del mercado. LensFun es una base de datos y una libería, por lo que si la descargamos puede resultar confuso obtener dicha información. Sin embargo si en la distribución de LensFun nos dirigimos al directorio "data>db", en el cual podemos ver una buena cantidad de archivos XML con los nombres de los principales fabricantes de lentes.

Por ejemplo mi óptica Nikon 35mm 1,8 DX, la puedo encontrar en el archivo slr-nikon.xml bajo el siguiente formato:

  <lens>
  <maker>Nikon</maker>
  <model>Nikon Nikkor 35mm f/1.8G AF-S DX</model><
  <mount>Nikon F AF</mount>
  <cropfactor>1.5</cropfactor>
  <calibration>
  <distortion model="ptlens" focal="35" a="-0.00899" b="0.02507" c="-0.04009" />
  </calibration>
  </lens>

Donde los parámetros citados con anterioridad pueden ser recuperados con facilidad: a="-0.00899" b="0.02507" c="-0.04009". Estos parámetros son francamente precisos, sin embargo si nuestro objetivo no se encuentra en dicha base de datos, podemos proceder al cálculo de dichos parámetros nosotros mismos.

Para ello podemos aplicar una segunda estrategia recurriendo a la conocida herramienta open-source multiplaforma Hugin. Dicho programa esta compuesto por varias herramientas por una parte el Panorama Stitcher, el Lens Calibration GUI y el PTBacherGUI, nuestra calibración la podremos hacer tanto con Lens Calibration como con Panorama Stitcher, los procedimientos son los siguientes:

Lens Calibration GUI huginSi usamos Lens Calibration GUI, el proceso es bastante simple: primeramente cargamos una imagen que contenga un patrón de líneas suficientemente evidentes para que la aplicación las detecte. En este punto he visto ciertos problemas, lo que mejor me ha funcionado es a partir de una carta con 4 líneas formando un perímetro dibujadas sobre un cartón-pluma, estás líneas las hice con rotulado de unos 3mm de grueso. En los parámetros de las opciones hay que jugar un poco hasta que se adapte a nuestra imagen, en mi caso usé: Edge Detection Scale = 4, Threshold=3, Line Length= 0.1 y Image Size, pues el ancho de la imagen. Si posteriormente activamos Find Lines y en el caso que la herramienta haya detectado un cierto número de líneas podemos activa Optimizar.
Como se puede observar en esta herramienta generaremos los parametros “a” o distorsión, “b” o barril y “c” o distorsión. En esta herramienta podemos cargar múltiples imágenes que contengan líneas y procesarlas todas juntas con el fin de mejorar la precisión del proceso.

Otro procedimento un tanto más tedioso será usar Panorama Stitcher de forma que primeramente cargaremos una imagen que como el caso anterior contenga una serie de líneas horizontales y verticales especialmente evidentes. A continuación vamos a Puntos de Control, y estableceremos series de puntos en la pantalla de la izquierda correlacionándolos en la pantalla de la izquierda, deberemos activar “auto añadir” y en modo ir clasificando cada punto en línea vertical u horizontal o añadiendo nueva linea de forma que tengamos Línea 3, 4, etc,... Finalmente nos dirigimos al Optimizador, en el menú desplegable escogemos la última opción y cómo parámetros activamos los correspondientes: distorsión a, barril b y distorsión c, de forma que si nuestros puntos están bien colocados en la pestaña Cámara y objetivo, en el apartado Geométrico tendremos disponibles dichos valores.

puntos control optimizador

Este procedimiento aunque bastante efectivo, siempre y cuando nuestra carta con las líneas de prueba no presente distorsiones, al igual que la toma de esta, personalmente no he llegado a obtener resultados tan buenos como con la base de datos LensFun.

Corregir una imagen:

Una vez obtenidos dichos parámetros podemos proceder a corregir nuestras imágenes, para ello lo más sencillo es acudir a la conocida suite ImageMagick, esta potente suite de herramientas de procesado de imagen digital es muy fácil de instalar ya que suele encontrase en todos los repositorios de cualquier distro de Linux, o en Mac Os X esta disponible vía Ports. La herramienta que vamos necesitar se llama Convert, y cómo el resto sólo es accesible por línea de comandos de forma que podemos usar la siguiente propuesta:

convert DSC0005.tif  -distort barrel "-0.00899 0.02507 -0.04009" _DSC0005B.tif

Donde podemos observar con facilidad el uso de nuestros parámetros a, b y c. En este caso -distort, también admitiría el cuarto factor o “d” pero es opcional.

Automatizar el proceso:

Dado que realizar todo este proceso archivo por archivo, podemos automatizar el trabajo con un pequeño script. Una propuesta para hacerlo con PHP:

  <?php
  $a = -0.00899;
  $b =  0.02507;
  $c = -0.04009;
  $ruta = "/ruta a mi directorio/";
  if (is_dir($ruta)) {
  if ($dh = opendir($ruta)) {
  while (($file = readdir($dh)) !== false) {
  if ($file != ".." && $file != "." && $file != ".DS_Store"){
  exec("convert ".$ruta.$file."  -distort barrel '".$a." ".$b." ".$c."' ".$ruta.$file." ");
  }
  }
  closedir($dh);
  }
  }else
  echo "Ruta no valida"; 
  ?>

Posteriormente podemos ejecutar el script desde la terminal con un:

php -f miscript.php

De esta forma podemos automatizar el proceso sobre grandes cantidades de imágenes sin grandes esfuerzo. Indicar finalmente que LensFun se encuentra ya integrado en las opciones de corrección de lente de herramientas de revelado RAW como Darktable o Ufraw

x-rite Professional LED Lighting, DSLR Support and Accessories for Photo and Video BabelColor asociacion española de imagen cientifica y forense