Búsqueda de sitios web

Domine las técnicas de mejora de imágenes con OpenCV


Limpiar imágenes es una técnica valiosa, ya sea para un análisis más detallado o simplemente para que tus fotos luzcan lo mejor posible.

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

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

La mejora de la imagen puede resultar útil 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.

Configurando su entorno

Comience configurando 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 guardar la imagen final mejorada.

pip install opencv-python

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

pip install matplotlib

Finalmente, instale NumPy, que usará 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 install 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 de GitHub.

Importar las bibliotecas necesarias

Importe las bibliotecas que instaló previamente en su entorno:

import cv2
import matplotlib.pyplot as plt
import numpy as np

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.

Cargando y mostrando la imagen original

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

image = cv2.imread('example.jpg')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.show()

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

La imagen de arriba será la entrada del programa.

Reducir el ruido en la imagen

La eliminación de ruido es una técnica que tiene como objetivo reducir el ruido (distorsiones aleatorias) en la imagen. Esto da como resultado una salida más fluida. OpenCV proporciona la función fastNlMeansDenoisingColored para este propósito. Utiliza un algoritmo de medios no locales para eliminar el ruido y al mismo tiempo preservar los detalles de la imagen.

# Apply image enhancements
# Denoise the image
denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)

La función fastNlMeansDenoisingColored 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.

Estire el contraste para mejorar la visibilidad de los detalles

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

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

# Perform contrast stretching
contrast_stretched_image = cv2.normalize(denoised_image, None, 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.

# Image Sharpening
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpened_image = cv2.filter2D(contrast_stretched_image, -1, kernel=kernel)

El código anterior crea una matriz central que enfatiza los bordes y detalles de la imagen. La función cv2.filter2D aplica el kernel a la imagen estirada por contraste, acentuándola como resultado.

Ajustar 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.

# Brightness Adjustment
brightness_image = cv2.convertScaleAbs(sharpened_image, alpha=1, beta=5)

La función cv2.convertScaleAbs ajusta el brillo de la imagen. El parámetro alfa controla el contraste, mientras que el parámetro beta controla el brillo. Aumentar el valor beta mejora 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 imágenes que parecen demasiado oscuras o demasiado brillantes.

# Gamma Correction
gamma = 1.5
lookup_table = np.array([((i / 255.0) ** gamma) * 255 for i in np.arange(0, 256)]).astype("uint8")
gamma_corrected_image = cv2.LUT(brightness_image, lookup_table)

El fragmento de código anterior crea una tabla de búsqueda que aplica una transformación de corrección gamma a la imagen con brillo ajustado. El valor gamma controla el ajuste. Utilice valores mayores que 1 para oscurecer la imagen y valores menores que 1 para hacerla más brillante.

Guardar y mostrar la imagen final mejorada

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

# Save final image
cv2.imwrite('final_image.jpg', gamma_corrected_image)

Luego muestre la salida del programa usando Matplotlib.

# Display the final enhanced image
plt.imshow(cv2.cvtColor(gamma_corrected_image, cv2.COLOR_BGR2RGB))
plt.title('Final Enhanced Image')
plt.show()

La imagen final mejorada es la siguiente:

El futuro de la mejora de la imagen

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.

Artículos relacionados: