marzo 30, 2022 10:00 am

Jesús

Desde hace un tiempo hemos venido trabajando temas de recuperación o, si se quiere, de restauración de imágenes.

Podemos utilizar un par de técnicas para lograr ese cometido. Una de ellas es el Inpaiting, y para ello utilizamos una herramienta por excelencia de Computer Vision: sckit-image.

No existe una forma universal de restauración de imágenes (esto ya lo hemos mencionado), sin embargo, en general, todos los algoritmos realizan variaciones de estos procedimientos.

Cuando aplicamos el inpaiting en una imagen que deseamos restaurar, el área dañada se llena con información de los píxeles circundantes. La estructura de color que rodea el área afectada se estira y se reduce para llenar los bordes del área faltante, y los detalles se dibujan para mantener la consistencia.

En scikit-image, solo hay un método basado en la ecuación biarmónica, pero afortunadamente no tienes que suscribirte a cálculos avanzados para ponerlo a prueba.

Una versión más amplia acerca de este tema lo hablamos aquí. Puedes echarle un vistazo al código del proyecto que usamos en aquel momento.


Reducción de Ruido con Difusión Anisotrópica en scikit-image

Por otro lado, también podemos hablar sobre una técnica que utilizamos para reducir el ruido de una imagen. Esta técnica es conocida como la Difusión Anisotrópica. Con ella logramos conservar aspectos de importancia en las imágenes digitales, a diferencia de muchas metodologías estudiadas hasta el momento.

Los principios matemático de esta técnica son bastante complicados, al menos teniendo en cuenta el contexto en el que normalmente trabajamos acá.

En un artículo de 1990, Pietro Perona y Jitendra Malik propusieron dos ecuaciones para el coeficiente de difusión del borde. Recordemos que la difusión anisotrópica es un mecanismo repetitivo. Las definiciones formales de estas funciones las puedes encontrar aquí

Ecuación Perona-Malik #1

Ecuación Perona-Malik #2

La principal ventaja de este mecanismo y su algoritmo, es que minimiza al máximo (¡vaya oxímoron!) los elementos de definición del objeto representado por la imagen, como líneas, bordes y otros detalles importantes.

De hecho, me resultó muy fácil realizar la difusión anisotrópica usando la función anisotropen_diffusion() proporcionada por la biblioteca MedPy. En este enlace lo puedes chequear por ti mismo.


Histogram Matching en Scikit-Image

Ahora, conservando la misma línea de restauración de imágenes, pasemos a un tema donde fui muy enfático en este blog. Hablemos de Histogramas.

Antes, describimos la ecualización de Histogramas y cómo usar esta herramienta para mejorar el contraste de la imagen.

Bueno, Histogram Matching va un paso más allá. Dada una imagen de referencia, puede actualizar el primer histograma hasta que coincida con el segundo histograma para que la imagen de destino tenga la misma distribución de color que la imagen de referencia.

Te ves un poco confundido, lo sé. Afortunadamente si deseas implementar una operación de este tipo desde cero, no necesitas hacerlo, ya que scikit-image lo hará automáticamente. La verdad es que es una técnica cómoda y sencilla.

Como sugiere el nombre, queremos usar esta herramienta para hacer coincidir los histogramas de color de dos imágenes. Es decir, si tenemos la imagen A y B, y B es una referencia, actualizamos los píxeles de A hasta que la distribución de color coincida con B.

A No cambiará, pero su distribución de píxeles sí lo hará de la siguiente manera. 

  • Iluminación
  • Contraste

En el fondo, con histogram matching, lo que queremos es ajustar los píxeles de una imagen objetivo para que su distribución coincida con la de la imagen de referencia. En otras palabras, queremos hacer que sus CDFs coincidan.

Entre los usos más comunes de Histogram Matching se destacan los siguientes puntos:

Efecto estético: cuando aplica la distribución de color de una imagen a otra, en cierto sentido también se aplica ese estilo.

Mecanismo Rudimentario de Corrección de Color: si se tomaron varias imágenes del mismo objeto o escena en diferentes momentos del día o con diferentes condiciones de iluminación, use la imagen de referencia y use la coincidencia del histograma con la "baseline" o iluminación estándar mediante histogram matchin.

Esta técnica le permite redistribuir fácilmente los píxeles de una imagen en función de la distribución de la imagen de referencia.

El resultado no cambia el contenido de la imagen original, pero la representación del color cambia porque los elementos asociados con el color de la imagen de referencia se transfieren a la imagen de destino como resultado de hacer coincidir la distribución de píxeles subyacente.

Histogram Matching puede mejorar la estética de la imagen, lograr una normalización mínima del color y reducir los efectos nocivos no deseados de una iluminación inadecuada. 

Para un mejor análisis respecto a Histogram Matching, te invito a que sigas este enlace

Resumen

De cualquier manera, Scikit-image es una herramienta muy útil para la aplicación de técnicas avanzadas para la restauración de imágenes, la cuestión está en elegir entre los diversos métodos que tenemos cuál de ellas se adapta mejor a las necesidades que tengamos en el momento.

Discernir entre sus ventajas y desventajas nos puede llevar a conseguir los mejores resultados.

Espero que te haya gustado el artículo.

¡Hasta entonces! 

Sobre el Autor

Jesús Martínez es el creador de DataSmarts, un lugar para los apasionados por computer vision y machine learning. Cuando no se encuentra bloggeando, jugando con algún algoritmo o trabajando en un proyecto (muy) cool, disfruta escuchar a The Beatles, leer o viajar por carretera.