La limpieza de imágenes es una técnica valiosa, ya sea para un análisis más profundo o simplemente para hacer que sus fotos se vean lo mejor posible.

La mejora de imágenes es una herramienta fundamental para las aplicaciones de visión artificial y edición de imágenes. Su objetivo es mejorar la calidad de las imágenes.

Al mejorar la calidad de la imagen, la precisión y la confiabilidad de las técnicas de análisis y procesamiento de imágenes pueden mejorar significativamente. Esto es particularmente importante en las aplicaciones de detección, reconocimiento, segmentación y seguimiento de objetos.

La mejora de la imagen puede ayudar cuando factores como condiciones de poca luz, ruido del sensor, desenfoque de movimiento o errores de transmisión han comprometido la calidad de la imagen.

Configuración de su entorno

Comienza por configurar un entorno Python, luego ejecute el siguiente comando de terminal para instalar la biblioteca OpenCV. Utilizará OpenCV para cargar y procesar la imagen inicial y para guardar la imagen mejorada final.

instagram viewer
pip instalar opencv-python

Usarás Matplotlib para mostrar las dos imágenes. Instálalo usando este comando:

pip instalar matplotlib

Finalmente, instale NumPy, que uso para operaciones numéricas incluida la creación de tablas de búsqueda para la corrección gamma y la definición del núcleo para la nitidez de la imagen:

pip instalar numpy

Una vez que haya instalado estas bibliotecas en su entorno, estará listo para comenzar a codificar.

El código fuente completo de esta demostración está disponible en un repositorio GitHub.

Importación de las bibliotecas necesarias

Importe las bibliotecas que instaló previamente en su entorno:

importar cv2
importar matplotlib.pyplot como por favor
importar entumecido como notario público

Tenga en cuenta que debe importar OpenCV como cv2. Esta es una práctica estándar que tiene como objetivo garantizar la compatibilidad del código y la facilidad de comprensión para otros desarrolladores.

Cargar y mostrar la imagen original

Comience cargando la imagen original usando el cv2.imread función. Esta es la imagen de entrada en la que su programa realizará técnicas de mejora. Luego muéstrelo usando las funciones apropiadas de Matplotlib:

imagen = cv2.imread('ejemplo.jpg')
plt.imshow (cv2.cvtColor (imagen, cv2.COLOR_BGR2RGB))
plt.titulo('Imagen original')
plt.mostrar()

Mostrar la imagen original te ayudará a comparar los resultados del programa más adelante:

La imagen de arriba será la entrada del programa.

Reducción del ruido en la imagen

Denoising es una técnica que tiene como objetivo reducir el ruido (distorsiones aleatorias) en la imagen. Esto da como resultado una salida más suave. OpenCV proporciona la fastNlMeansDenoisingColored función para este fin. Utiliza un algoritmo de medios no locales para eliminar el ruido mientras conserva los detalles de la imagen.

# Aplicar mejoras de imagen
# Eliminar el ruido de la imagen
denoised_image = cv2.fastNlMeansDenoisingColored (imagen, Ninguno, 10, 10, 7, 21)

El fastNlMeansDenoisingColored La función toma varios parámetros, incluida la imagen, la intensidad del filtro, el tamaño de la ventana de la plantilla y el tamaño de la ventana de búsqueda. Puede experimentar con diferentes valores para obtener los resultados deseados.

Estirar el contraste para mejorar la visibilidad de los detalles

El estiramiento de contraste también se conoce como normalización. Estira los valores de intensidad para abarcar un cierto rango. Esto, a su vez, mejora la visibilidad de los detalles de la imagen.

Puede aplicar estiramiento de contraste a la imagen sin ruido usando OpenCV normalizar función:

# Realizar estiramiento de contraste
contrast_stretched_image = cv2.normalize (denoised_image, Ninguno, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)

Cómo enfocar la imagen

La nitidez de la imagen mejora los bordes y los detalles de la imagen, lo que ayuda a mejorar la nitidez de la imagen.

# Nitidez de imagen
núcleo = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
imagen_afilada = cv2.filter2D(imagen_alargada_contraste, -1, núcleo=núcleo)

El código anterior crea una matriz de kernel que enfatiza los bordes y los detalles de la imagen. El cv2.filtro2D La función aplica el núcleo a la imagen estirada por el contraste y, como resultado, la agudiza.

Ajuste el brillo para mejorar la exposición

El ajuste de brillo controla el brillo general de una imagen. Ayuda a que la imagen sea visualmente atractiva y esté bien expuesta.

# Ajuste de brillo
imagen_brillo = cv2.convertScaleAbs (imagen_afilada, alfa=1, beta=5)

El cv2.convertScaleAbs La función ajusta el brillo de la imagen. El alfa El parámetro controla el contraste, mientras que el beta El parámetro controla el brillo. Aumentando el beta El valor realza el brillo de la imagen.

Aplicar corrección gamma para iluminar la imagen

Una imagen puede parecer demasiado brillante después de la técnica de ajuste de brillo. La corrección gamma ajusta el brillo y el contraste generales de una imagen. Corrige las imágenes que aparecen demasiado oscuras o demasiado brillantes.

# Corrección gamma
gama = 1.5
tabla_buscada = np.array([((i / 255.0) ** gama) * 255para i en np.naranja(0, 256)]).tipo("uint8")
imagen_corregida_gamma = cv2.LUT(imagen_de_brillo, tabla_de_búsqueda)

El fragmento de código anterior crea una tabla de búsqueda que aplica la transformación de corrección gamma a la imagen con ajuste de brillo. El gama El valor controla el ajuste. Utilice valores superiores a 1 para oscurecer la imagen y valores inferiores a 1 para aclararla.

Guardar y mostrar la imagen mejorada final

Una vez que haya aplicado las técnicas de mejora anteriores, guarde la imagen procesada final en un archivo.

# Guardar imagen final
cv2.imwrite('imagen_final.jpg', gamma_imagen_corregida)

Luego muestre la salida del programa usando Matplotlib.

# Mostrar la imagen mejorada final
plt.imshow (cv2.cvtColor (gamma_corregido_imagen, cv2.COLOR_BGR2RGB))
plt.titulo('Imagen mejorada final')
plt.mostrar()

La imagen mejorada final es la siguiente:

El futuro de la mejora de imágenes

El futuro de la mejora de imágenes está en el campo de la inteligencia artificial. Se están entrenando algoritmos de aprendizaje automático para realizar automáticamente técnicas de mejora de imágenes en imágenes.

Estos programas tratan cada imagen de forma independiente, por lo que aplican diferentes valores de las técnicas para diferentes imágenes.