Restauración de imágenes en Python o "Image Restoration" es una técnica que logra eliminar daños y/o deterioros de las imágenes digitales, pero sabes ¿cómo funcionan estos métodos de repintado? ¡Conoce todo aquí! 📉 🧑🎨
Históricamente, los pintores han realizado el repintado de imágenes de forma manual para eliminar los defectos de los cuadros y fotografías. Y actualmente también se logra rellenar esta región faltante de información, pero en este caso, con imágenes digitales, gracias a los algoritmos de inpainting.
De pronto has utilizado una aplicación para remover algo del fondo de tu foto, o incluso recuperar esa foto física de algún tipo de daño, y si no es así, al menos sabemos que lo has pensado. El inpainting digital es aplicado para reconstruir partes dañadas de una imagen.
Aunque los fundamentos del inpainting son sencillos, la mayoría de las técnicas son complejas de entender e implementar. Así que en este post, te explicaremos algunos de esos métodos, algoritmos e incluso te explicaremos los resultados que puedes conseguir.
IMAGE RESTORATION
TALK DE LA SEMANA
Reconstruir pequeñas porciones dañadas de una imagen ha sido una herramienta muy buscada en páginas y aplicaciones de los últimos años, ya que permiten la edición de fotos, eliminación de textos, marcas de agua y logotipos incluso en vídeos.
Sin embargo, la mayoría de los métodos de inpainting funcionan de forma compleja, lenta o en muchos casos se sacrifica la calidad. Existen varios tipos:
Técnicas de Restauración de imágenes en Python
Median Filter: Se trata de un método estadístico en el que el valor del píxel se sustituye por la mediana de los píxeles de la zona. Se utiliza para reducir el ruido mantiendo los bordes. Ventaja sobre el modelo de suavizado.
Adaptative Filter: Un tipo de filtro lineal con una función de transferencia controlada por parámetros variables. Para eliminar el ruido impulsivo se utiliza color y gris teniendo cuidado con los bordes.
Lineal Filter: Sustituye cada píxel por la combinación lineal de sus vecinos. Incluyendo nitidez, suavizado y bordes. Se aplica para el ruido de sal y pimienta y ruido gaussiano.
NAS-RIF: Filtrado inverso no negativo y con restricciones de soporte, reconstruye una imagen estimada fiable a partir de una imagen borrosa. La ventaja es que sólo hay que encontrar el dominio de soporte del área y ser cauteloso.
Super-Resolution Restoration Algorithm based on Gradient Adaptive Interpolation: La idea es que el gradiente local del píxel afecte al píxel interpolado, siendo inversamente proporcional al gradiente local de un píxel.
Deconvolution Using a Sparse Prior: Determina la máxima estimación a-posterior de la imagen original. Se ha aplicado con éxito a imágenes sin procesar.
Block Matching: Se utilizan bloques de alta correlación, pero su precisión se ve afectada significativamente por la presencia de ruido.
Wiener Filter: Incluye la función de degradación como característica estadística del ruido en el proceso de restauración.
ERF: Deconvolución mediante filtro regularizado es otra categoría de la técnica de deconvolución, que cuando se aplican restricciones de suavidad a la imagen recuperada se restaura por mínimos cuadrados restringidos.
Lucy-Richardson: La restauración de la imagen se divide en convolución ciega y no ciega. Tiene una alta capacidad para producir imágenes reconstruidas de buena calidad en el campo de la astronomía y la imagen médica.
La restauración de imágenes es un problema difícil de resolver, aunque cada técnica tiene su propia forma de ejecutar las soluciones y tiene sus propios pros y contras, no está demás indicarte que antes de aplicar cualquier técnica de filtrado es requierido un análisis adecuado.
¿Cómo funciona la Restauración de imágenes en Python?
Primero, se crea una máscara manualmente, es decir, se seleccionan digitalmente las regiones de la imagen que se van a pintar.
A continuación, la información de color se propaga hacia el interior de la región y se utiliza la información de la imagen conocida para rellenar las zonas que faltan.
Para producir una reconstrucción perceptualmente plausible, se debe intentar continuar las isofotas (líneas de igual valor de gris) lo más suavemente posible dentro de la región reconstruida:
En otras palabras, la región que falta debe ser pintada de manera que el valor de gris pintado y el gradiente extrapola el valor gris y el gradiente están fuera de esta región.
Restauración de imágenes en Python: Algoritmo y Modelo Matemático
Consideremos que en la siguiente figura, hay que repintar el punto o pixel p situado en el límite ∂Ω de la región Ω:
Tomemos una pequeña parte Bε(p) del tamaño conocido ε alrededor de p (revisa la figura "a)").
El inpainting de p debe determinarse por los valores de los puntos cercanos conocidos, es decir, Bε(p). Así que primero consideremos los pixeles de valor gris, siendo color de extensión natural.
Y para que ε sea suficientemente pequeño, consideramos una aproximación de primer orden Iq(p) en el punto p, dado I(q) y su gradiente ∇I(q) del punto q. (Revisa la figura "b)").
A continuación, lo que hacemos es el inpaint del punto p, pero en función de los puntos q en Bε(p), sumando las estimaciones de todos los puntos q ponderadas por una función normalizada w(p, q):
La función de ponderación normalizada w(p, q), se diseña para que el inpainting se propague al valor de gris así como los detalles nítidos de la imagen sobre Bε(p):
En el siguiente video, ejemplificamos mejor cómo funciona el modelo:
Si existe algún error en el reproductor, puedes ver el video en el siguiente LINK
Restauración de imágenes Python +OpenCV
OpenCV (Open Source Computer Vision) se lanzó en 2006 en su primera versión OpenCV 1.0, como un proyecto de investigación en Intel y actualmente es la biblioteca de visión por computadora más grande en términos de funciones, con más de 2500 algoritmos disponibles de forma libre para usos académicos y comerciales.
La visión artificial o visión por computadora se utiliza en el análisis y tratamiento de imágenes donde se implementan algoritmos de inteligencia artificial. Uno de los usos más importantes de OpenCV es la detección de rostros y objetos en ámbitos fotografía, marketing o seguridad.
¿Cómo usar OpenCV para la Restauración de imágenes en Python?
La biblioteca tiene interfaces disponibles en los lenguajes: Python, Java y C++. Sin embargo, para este ejemplo usaremos OpenCV-Python.
Para poder usar esta librería en todas sus posibilidades, se deben tener conocimientos en:
Librería Numpy
Librería Matplotlib
🤔 Tip: Para los ejemplo que te traemos no los necesitarás.
Instalación de OpenCV
En Python existen 2 formas:
Desde archivos binarios y archivos fuente precompilados: para ello se debe consultar la documentación pertinente, por ejemplo para Windows: Py_Setup_Windows.
Mediante paquetes: Si solo necesitas módulos principales, ejecuta:
pip install opencv-python
Si se necesitan tanto módulos principales como adicionales (contrib), ejecuta:
pip install opencv-contrib-python
ℹ️ Nota: Se puede utilizar en Jupyter o en cualquier IDE de Python.
Si quieres ver una serie de ejemplos básicos, te animo a que veas el siguiente video:
Si existe algún error en el reproductor, puedes ver el video en el siguiente LINK.
Hemos creado un reel resumen con ¡los pasos para restaurar imágenes tú mismo en Python! para que lo puedas compartir rápidamente con otros #devs! Te dejamos el link abajo 👇🏻👇🏻👇🏻
¡Gracias por leer!
📍 Conéctate con nosotros en instagram👇
ความคิดเห็น