Image Inpainting
El relleno de imágenes completa las regiones enmascaradas, dañadas o eliminadas de una imagen con contenido verosímil, mediante métodos clásicos, basados en parches, GAN o de difusión.
El relleno de imágenes consiste en completar una región enmascarada de una imagen, como un arañazo, un objeto eliminado o una zona que falta, con contenido que se integre en su entorno. Todos los métodos reciben dos entradas, la imagen y una máscara binaria que marca los píxeles que se deben sustituir, y mantienen sin cambios todo lo que queda fuera de la máscara. El término procede de la conservación del arte, donde los restauradores retocan pinturas dañadas, y Marcelo Bertalmío, Guillermo Sapiro, Vicent Caselles y Coloma Ballester lo introdujeron en la visión artificial digital en SIGGRAPH 2000 con un método que prolonga hacia el hueco, desde su borde, las líneas de igual brillo. Los píxeles bajo la máscara son desconocidos, así que la región rellenada siempre es una invención verosímil, nunca una recuperación de lo que había allí.
Métodos clásicos, basados en parches y aprendidos#
Los métodos clásicos propagan el color y los bordes hacia el interior desde el límite de la máscara. OpenCV incluye dos en su módulo de inpainting: el método rápido de propagación frontal de Alexandru Telea (2004) (cv2.INPAINT_TELEA) y el método de Navier-Stokes de Bertalmío, Andrea Bertozzi y Sapiro (2001) (cv2.INPAINT_NS). Funcionan bien con polvo, arañazos y superposiciones de texto finas, pero en los agujeros grandes generan una mancha borrosa. El fragmento de código siguiente aplica el método de Telea a dos conjuntos con el mismo número de píxeles ausentes: uno con arañazos finos y otro con un único cuadrado:
import cv2
import numpy as np
from skimage import data
image = cv2.cvtColor(data.astronaut(), cv2.COLOR_RGB2BGR) # 512x512 sample photo
# Two masks with about the same pixel count: thin scratches and one solid block
scratches = np.zeros(image.shape[:2], np.uint8)
for y in range(40, 512, 40):
cv2.line(scratches, (0, y), (511, y + 30), 255, thickness=2)
block = np.zeros_like(scratches)
side = int(np.sqrt(np.count_nonzero(scratches)))
block[200 : 200 + side, 200 : 200 + side] = 255
for name, mask in [("scratches", scratches), ("block", block)]:
restored = cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA)
# Mean error inside the mask, where every pixel was reconstructed
error = np.abs(restored.astype(int) - image.astype(int))[mask > 0].mean()
print(f"{name}: {np.count_nonzero(mask)} masked pixels, mean error {error:.1f} gray levels")Imprime un error medio de 9,1 niveles de gris para 18.432 píxeles con arañazos y de 36,5 para un bloque de 18.225 píxeles. Cada píxel con arañazos tiene píxeles vecinos conocidos a uno o dos píxeles de distancia, mientras que el centro del bloque está a 67 píxeles del píxel real más cercano; por eso, la misma área ausente cuadruplica el error.
Los métodos basados en parches copian texturas de otras partes de la imagen en lugar de suavizarlas. El algoritmo basado en ejemplares de Antonio Criminisi, Patrick Pérez y Kentaro Toyama (2004) rellena los agujeros parche a parche, empezando por donde entran bordes marcados, y la búsqueda de parches más cercanos PatchMatch de Connelly Barnes y sus colegas (2009) hizo que el enfoque fuera lo bastante rápido para usarlo de forma interactiva; es la base de Relleno según el contenido de Photoshop. Los métodos de parches destacan con la hierba, los ladrillos y el cielo, pero fallan cuando el contenido ausente no aparece en ninguna otra parte de la imagen.
Los modelos entrenados infieren el contenido a partir de lo que han visto durante el entrenamiento. Los codificadores de contexto (CVPR 2016) de Deepak Pathak y sus colegas entrenaron una red neuronal convolucional con una pérdida adversaria, tomada de las redes generativas antagónicas, para completar una región central enmascarada. LaMa de Samsung AI (WACV 2022) usa convoluciones rápidas de Fourier, cuyo campo receptivo abarca toda la imagen desde la primera capa, y se entrena con máscaras aleatorias grandes; por eso, completa agujeros grandes y estructuras repetitivas, como vallas y ventanas. Los modelos de difusión rellenan un agujero eliminando el ruido de forma condicionada por los píxeles visibles y, opcionalmente, por una indicación: los puntos de control de inpainting de Stable Diffusion añaden a la U-Net cinco canales de entrada para la máscara y la representación latente de la imagen enmascarada, y RePaint (CVPR 2022), de Andreas Lugmayr y sus colegas, usa un modelo de difusión sin modificar y sustituye la región conocida por una copia ruidosa de la imagen original en cada paso. En 2023, Generative Fill de Adobe incorporó el inpainting de texto a imagen guiado por indicaciones a Photoshop.
Máscaras y eliminación de objetos#
La eliminación de objetos consiste en aplicar la segmentación de imágenes y, después, el inpainting: una máscara selecciona el objeto y el inpainting rellena el agujero que deja. Las máscaras trazadas muy ajustadas alrededor de un objeto dejan atrás sus píxeles de borde, sombra y reflejo, como un fantasma, así que los editores dilatan la máscara unos pocos píxeles y la extienden sobre la sombra. La segmentación de instancias genera una máscara por objeto, por lo que suele ser la fuente de las máscaras de eliminación; los modelos con indicaciones, como SAM 2 de Meta, convierten un clic en una máscara para objetos que no pertenecen a ninguna lista de clases. Los modelos de segmentación de YOLO26 devuelven el contorno de cada objeto como un polígono en result.masks.xy, que cv2.drawContours rasteriza con cv2.FILLED para convertirlo en una máscara de inpainting; es el mismo paso que se utiliza en la guía para aislar objetos mediante segmentación y recortarlos.
El inpainting de vídeo añade la dimensión temporal: el relleno debe coincidir entre fotogramas o parpadeará, así que las herramientas de edición de vídeo con IA propagan las máscaras mediante seguimiento y aprovechan los píxeles del fondo que quedan al descubierto en fotogramas cercanos cuando se mueve la cámara.
Tareas relacionadas#
- Outpainting: Usa los mismos modelos para ampliar una imagen más allá de sus bordes originales, con la nueva zona del lienzo como máscara.
- Superresolución: Añade detalles a toda la imagen con una resolución mayor, sin usar ninguna máscara.
- Eliminación de ruido: Elimina el ruido repartido por todos los píxeles sin alterar la escena, también sin usar ninguna máscara.
- Interpolación de fotogramas: Genera fotogramas intermedios completos de un vídeo a partir de los fotogramas anterior y posterior.
Aplicaciones y procedencia#
En la restauración fotográfica se enmascaran las grietas, el polvo y los desgarros de las copias escaneadas; en la restauración cinematográfica se hace lo mismo fotograma a fotograma con los arañazos de las grabaciones de archivo. El retoque y la fotografía de producto eliminan objetos no deseados, cables eléctricos e imperfecciones. En el análisis de imágenes por satélite, rellenar huecos es un problema clásico de inpainting: el corrector de líneas de barrido de Landsat 7 falló el 31 de mayo de 2003 y dejó franjas en forma de cuña que cubren alrededor del 22 % de cada escena posterior.
El inpainting con modelos entrenados se evalúa en imágenes reservadas que incluyen máscaras sintéticas, usando la distancia de Inception de Fréchet (FID) para medir el realismo, ya que un buen relleno puede diferir de los píxeles originales y seguir siendo correcto. Ese mismo realismo hace del inpainting una herramienta para crear ultrafalsificaciones y eliminar marcas de agua; además, en imágenes médicas, científicas o forenses, una estructura inventada puede cambiar un diagnóstico o un veredicto. Las credenciales de contenido registran este tipo de ediciones en metadatos firmados, y Adobe las adjunta a las imágenes editadas con Generative Fill.










