Repintar imágenes usando OpenCV

Repintar imágenes es el proceso de eliminar daños, como ruidos, trazos o texto, en las imágenes. Es particularmente útil en la restauración de fotografías antiguas que pueden tener bordes rayados o manchas de tinta. Estos se pueden eliminar digitalmente a través de este método.

Image inpainting funciona reemplazando los píxeles dañados con píxeles similares a los vecinos, por lo tanto, los hace discretos y los ayuda a combinarse bien con el fondo. Considere la imagen de abajo.

La imagen tiene algunas marcas a la derecha. Para volver a pintar esta imagen, necesitamos una máscara , que es esencialmente una imagen negra con marcas blancas para indicar las regiones que deben corregirse. En este caso, la máscara se crea manualmente en GIMP.

Algoritmos de pintura –

OpenCV implementa dos algoritmos de pintura:

  1. “Una Técnica de Repintado de Imágenes Basada en el Método de Marcha Rápida”, Alexandru Telea, 2004:
    Se basa en el Método de Marcha Rápida (FMM). Mirando la región que se va a pintar, el algoritmo primero comienza con los píxeles del límite y luego va a los píxeles dentro del límite. Reemplaza cada píxel que se va a pintar con una suma ponderada de los píxeles en el fondo, dando más peso a los píxeles más cercanos y los píxeles de contorno.
  2. “Navier-Stokes, Fluid Dynamics, and Image and Video Inpainting”, Bertalmio, Marcelo, Andrea L. Bertozzi y Guillermo Sapiro, 2001:
    Este algoritmo está inspirado en ecuaciones diferenciales parciales. Partiendo de los bordes (regiones conocidas) hacia las regiones desconocidas, propaga líneas isófotas (líneas que unen puntos de la misma intensidad). Finalmente, la variación en un área se minimiza para llenar los colores.

FMM se puede invocar mediante cv2.INPAINT_TELEA, mientras que Navier-Stokes se puede invocar mediante cv2.INPAINT_NS. El siguiente código de Python pinta la imagen del gato usando Navier-Stokes.

import numpy as np
import cv2
  
# Open the image.
img = cv2.imread('cat_damaged.png')
  
# Load the mask.
mask = cv2.imread('cat_mask.png', 0)
  
# Inpaint.
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)
  
# Write the output.
cv2.imwrite('cat_inpainted.png', dst)

Producción:

Publicación traducida automáticamente

Artículo escrito por Anannya Uberoi 1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *