Le nettoyage des images est une technique précieuse, que ce soit pour une analyse plus approfondie ou simplement pour donner à vos photos leur meilleur aspect.

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

En améliorant la qualité d'image, la précision et la fiabilité des techniques d'analyse et de traitement d'image peuvent être considérablement améliorées. 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 des conditions de faible luminosité, le bruit du capteur, le flou de mouvement ou des erreurs de transmission ont compromis la qualité de l'image.

Configuration de votre environnement

Commence par mise en place d'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.

instagram viewer

pip installer opencv-python

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

pip installer matplotlib

Enfin, installez NumPy, que vous allez utiliser pour les opérations numériques y compris la création de tables de recherche pour la correction gamma et la définition du noyau pour la netteté de l'image :

pip installer numpy

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

Le code source complet de cette démo est disponible dans un Référentiel GitHub.

Importation des bibliothèques nécessaires

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

importer cv2
importer matplotlib.pyplot comme plt
importer numpy comme 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 d'origine à l'aide de la cv2.imread fonction. Il s'agit de l'image d'entrée sur laquelle votre programme effectuera des techniques d'amélioration. Affichez-le ensuite à l'aide des fonctions Matplotlib appropriées :

image = cv2.imread('exemple.jpg')
plt.imshow (cv2.cvtColor (image, cv2.COLOR_BGR2RGB))
plt.titre('Image originale')
plt.show()

L'affichage de l'image d'origine vous aidera à comparer les résultats du programme ultérieurement :

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. Il en résulte une sortie plus fluide. OpenCV fournit le fastNlMeansDenoisingColored fonction à cet effet. Il utilise un algorithme de moyens non locaux pour supprimer le bruit tout en préservant les détails de l'image.

# Appliquer des améliorations d'image
# Débruiter l'image
denoised_image = cv2.fastNlMeansDenoisingColored (image, Aucun, 10, 10, 7, 21)

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

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

L'étirement du contraste est également connu sous le nom de normalisation. Il étend les valeurs d'intensité pour couvrir une certaine plage. Cela améliore à son tour la visibilité des détails de l'image.

Vous pouvez appliquer un étirement de contraste à l'image débruitée à l'aide d'OpenCV normaliser fonction:

# Effectuez un étirement de contraste
contrast_stretched_image = cv2.normalize (denoised_image, Aucun, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)

Comment rendre l'image plus nette

La netteté de l'image améliore les bords et les détails de l'image, aidant à améliorer la netteté de l'image.

# Netteté de l'image
noyau = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpened_image = cv2.filter2D(contrast_stretched_image, -1, noyau=noyau)

Le code ci-dessus crée une matrice de noyau qui met l'accent sur les bords et les détails de l'image. Le cv2.filter2D La fonction applique le noyau à l'image à contraste étiré, l'accentuant en conséquence.

Ajuster la luminosité pour améliorer l'exposition

Le réglage de la luminosité contrôle la luminosité globale d'une image. Cela aide à rendre l'image visuellement attrayante et bien exposée.

# Réglage de la luminosité
bright_image = cv2.convertScaleAbs (sharpened_image, alpha=1, bêta=5)

Le cv2.convertScaleAbs La fonction ajuste la luminosité de l'image. Le alpha paramètre contrôle le contraste, tandis que le bêta Le paramètre contrôle la luminosité. Augmenter la bêta La valeur améliore la luminosité de l'image.

Appliquer la correction gamma pour éclaircir l'image

Une image peut apparaître trop lumineuse après la technique de réglage de la luminosité. La correction gamma ajuste la luminosité et le contraste généraux d'une image. Il corrige les images qui semblent trop sombres ou trop lumineuses.

# Correction gamma
gamma = 1.5
lookup_table = np.array([((i / 255.0) ** gamma) * 255pour je dans np.arrange(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 ajustée en luminosité. Le gamma la valeur contrôle le réglage. Utilisez des valeurs supérieures à 1 pour rendre l'image plus sombre et des valeurs inférieures à 1 pour la rendre plus lumineuse.

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 traitée finale dans un fichier.

# Enregistrer l'image finale
cv2.imwrite('image_finale.jpg', gamma_corrected_image)

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

# Afficher l'image améliorée finale
plt.imshow (cv2.cvtColor (gamma_corrected_image, cv2.COLOR_BGR2RGB))
plt.titre('Image finale améliorée')
plt.show()

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

L'avenir de l'amélioration de l'image

L'avenir de l'amélioration de l'image est dans le domaine de l'intelligence artificielle. Des algorithmes d'apprentissage automatique sont formés pour exécuter automatiquement des techniques d'amélioration d'image sur des images.

Ces programmes traitent chaque image indépendamment, ils appliquent donc différentes valeurs des techniques pour différentes images.