L’amélioration d’images est un outil crucial pour les applications de vision par ordinateur et d’édition d’images. Il vise à améliorer la qualité des images.


L’amélioration de la qualité des images permet d’accroître considérablement la précision et la fiabilité des techniques d’analyse et de traitement des images. Ceci est particulièrement important dans les applications de détection, de reconnaissance, de segmentation et de suivi d’objets.

L’amélioration de l’image peut être utile lorsque des facteurs tels que la faible luminosité, le bruit du capteur, le flou de mouvement ou les erreurs de transmission ont compromis la qualité de l’image.


Configuration de l’environnement

Commencez par mettre en place un environnement Python, puis exécutez la commande de terminal suivante pour installer la bibliothèque OpenCV. Vous utiliserez OpenCV pour charger et traiter l’image initiale, et pour enregistrer l’image améliorée finale.

 pip install opencv-python

Vous utiliserez Matplotlib pour afficher les deux images. Installez-le à l’aide de cette commande :

 pip install matplotlib

Enfin, installez NumPy, que vous utiliserez pour des opérations numériques, notamment la création de tables de correspondance pour la correction gamma et la définition du noyau pour l’accentuation de la netteté de l’image :

 pip install numpy 

Une fois ces bibliothèques installées dans votre environnement, vous êtes prêt à commencer à coder.

Le code source complet de cette démo est disponible dans un dépôt GitHub.

Importer les bibliothèques nécessaires

Importez les bibliothèques que vous avez précédemment installées dans votre environnement :

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

Notez que vous devez importer OpenCV en tant que cv2. Il s’agit d’une pratique standard qui vise à assurer la compatibilité du code et la facilité de compréhension pour les autres développeurs.

Chargement et affichage de l’image originale

Commencez par charger l’image originale à l’aide de la fonction cv2.imread fonction. Il s’agit de l’image d’entrée sur laquelle votre programme effectuera des techniques d’amélioration. Affichez-la ensuite à l’aide des fonctions Matplotlib appropriées :

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

L’affichage de l’image originale vous aidera à comparer les résultats du programme ultérieurement :

Un papillon sur un tournesol

L’image ci-dessus sera l’entrée du programme.

Réduction du bruit dans l’image

Le débruitage est une technique qui vise à réduire le bruit – les distorsions aléatoires – dans l’image. Cela permet d’obtenir une image plus lisse. OpenCV fournit le fastNlMeansDenoisingColored à cette fin. Elle utilise un algorithme de moyenne non locale pour supprimer le bruit tout en préservant les détails de l’image.

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

La fonction fastNlMeansDenoisingColored prend plusieurs paramètres, notamment l’image, l’intensité du filtre, la taille de la fenêtre du modèle et la taille de la fenêtre de recherche. Vous pouvez expérimenter avec différentes valeurs pour obtenir les résultats souhaités.

Étirer le contraste pour améliorer la visibilité des détails

L’étirement du contraste est également connu sous le nom de normalisation. Il permet d’étirer les valeurs d’intensité dans une certaine plage. Cela permet d’améliorer la visibilité des détails de l’image.

Vous pouvez appliquer l’étirement du contraste à l’image débruitée à l’aide de la fonction normaliser fonction :

 # Perform contrast stretching
contrast_stretched_image = cv2.normalize(denoised_image, None, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)

Comment accentuer la netteté de l’image

L’accentuation de la netteté de l’image permet d’améliorer les bords et les détails de l’image, ce qui permet d’améliorer la netteté de l’image.

 # 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)

Le code ci-dessus crée une matrice de noyau qui accentue les bords et les détails de l’image. Le code ci-dessus crée une matrice de noyau qui accentue les bords et les détails de l’image. cv2.filter2D applique le noyau à l’image étirée en contraste, ce qui a pour effet de l’accentuer.

Ajuster la luminosité pour améliorer l’exposition

Le réglage de la luminosité permet de contrôler la luminosité globale d’une image. Il permet de rendre l’image visuellement attrayante et bien exposée.

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

Le cv2.convertScaleAbs permet d’ajuster la luminosité de l’image. La fonction alpha contrôle le contraste, tandis que le paramètre bêta contrôle la luminosité. En augmentant le paramètre bêta améliore la luminosité de l’image.

Appliquer la correction gamma pour éclaircir l’image

Une image peut apparaître trop claire après la technique de réglage de la luminosité. La correction gamma permet d’ajuster la luminosité et le contraste d’une image. Elle corrige les images qui apparaissent trop sombres ou trop lumineuses.

 # 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)

L’extrait de code ci-dessus crée une table de recherche qui applique la transformation de correction gamma à l’image dont la luminosité a été corrigée. L’extrait de code gamma permet de contrôler l’ajustement. Utilisez des valeurs supérieures à 1 pour assombrir l’image, et des valeurs inférieures à 1 pour l’éclaircir.

Enregistrement et affichage de l’image améliorée finale

Une fois que vous avez appliqué les techniques d’amélioration ci-dessus, enregistrez l’image finale traitée dans un fichier.

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

Affichez ensuite la sortie du programme à l’aide de Matplotlib.

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

L’image améliorée finale est la suivante :

Un papillon sur un tournesol

L’avenir de l’amélioration des images

L’avenir de l’amélioration des images se situe dans le domaine de l’intelligence artificielle. Des algorithmes d’apprentissage automatique sont formés pour réaliser automatiquement des techniques d’amélioration d’images.

Ces programmes traitent chaque image de manière indépendante et appliquent donc des valeurs différentes des techniques pour différentes images.