Image Processing

Maîtriser le seuillage adaptatif avec OpenCV

Spread the love

Le seuillage adaptatif est une technique cruciale de traitement d’image pour transformer des images en niveaux de gris en images binaires (noir et blanc). Contrairement au seuillage simple, qui utilise une seule valeur de seuil pour toute l’image, le seuillage adaptatif calcule dynamiquement un seuil pour différentes régions de l’image. Cette adaptabilité est particulièrement avantageuse lorsqu’on traite des images présentant un éclairage inégal, où un seuil global pourrait ne pas séparer correctement le premier plan de l’arrière-plan.

Le principe fondamental du seuillage adaptatif consiste à prendre en compte les caractéristiques locales de l’image lors de la détermination du seuil. Au lieu d’une valeur déterminée globalement, l’algorithme divise l’image en régions plus petites (blocs ou tuiles). Pour chaque région, un seuil est calculé en fonction des intensités des pixels à l’intérieur de cette région. Cette approche localisée compense efficacement les variations d’éclairage sur l’image. Les méthodes courantes pour calculer le seuil local incluent la moyenne des intensités des pixels dans la région ou l’utilisation d’une moyenne pondérée (gaussienne).

Fonction de seuillage adaptatif d’OpenCV

OpenCV, une puissante bibliothèque de vision par ordinateur, simplifie le seuillage adaptatif avec sa fonction cv2.adaptiveThreshold(). Cette fonction accepte plusieurs paramètres clés :

  • src : L’image en niveaux de gris d’entrée.
  • maxValue : La valeur maximale attribuée aux pixels dépassant le seuil (généralement 255 pour le blanc).
  • adaptiveMethod : La méthode de calcul du seuil. Les options incluent :
    • cv2.ADAPTIVE_THRESH_MEAN_C : Utilise la moyenne du voisinage comme seuil.
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C : Utilise une moyenne pondérée (gaussienne) du voisinage comme seuil.
  • thresholdType : Le type de seuillage. cv2.THRESH_BINARY est courant, définissant les pixels au-dessus du seuil sur maxValue et ceux en dessous sur 0 (noir).
  • blockSize : La taille du voisinage (région) utilisé pour le calcul du seuil. Doit être un nombre impair.
  • C : Une constante soustraite de la moyenne ou de la moyenne pondérée, permettant d’affiner le seuil.

Implémentation pratique avec Python

Voici un exemple Python utilisant OpenCV :


import cv2
import numpy as np

# Charger l'image en niveaux de gris
img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)

# Appliquer le seuillage adaptatif
thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

# Afficher les résultats
cv2.imshow('Original', img)
cv2.imshow('Seuillage adaptatif', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ce code charge une image en niveaux de gris, applique un seuillage adaptatif en utilisant la méthode gaussienne (cv2.ADAPTIVE_THRESH_GAUSSIAN_C), une taille de bloc de 11 et une constante de 2. Il affiche ensuite les images originales et seuillées. L’expérimentation avec blockSize et C est cruciale pour des résultats optimaux, tout comme la sélection de la adaptiveMethod appropriée en fonction des caractéristiques de l’image.

Choisir les bons paramètres

L’efficacité du seuillage adaptatif dépend de la sélection des paramètres. Une valeur blockSize plus grande prend en compte un voisinage plus large, ce qui entraîne des transitions plus fluides mais peut entraîner la perte de détails plus fins. Inversement, une valeur blockSize plus petite est plus sensible aux variations locales mais peut introduire du bruit. La constante C permet d’ajuster la sensibilité du seuil ; une valeur C plus grande entraîne un seuil plus élevé.

Le choix entre cv2.ADAPTIVE_THRESH_MEAN_C et cv2.ADAPTIVE_THRESH_GAUSSIAN_C dépend des caractéristiques de bruit de l’image. cv2.ADAPTIVE_THRESH_GAUSSIAN_C est généralement préféré pour les images présentant un bruit important, car la pondération gaussienne réduit l’influence des valeurs aberrantes.

Conclusion

Le seuillage adaptatif fournit une solution robuste pour binariser les images avec un éclairage inégal, améliorant considérablement la précision par rapport au seuillage simple. La fonction efficace cv2.adaptiveThreshold() d’OpenCV permet aux utilisateurs d’implémenter facilement cette technique, en obtenant des résultats optimaux en ajustant soigneusement les paramètres et en choisissant la méthode adaptative appropriée. Sa flexibilité et son efficacité en font un outil indispensable dans diverses applications de vision par ordinateur.

Table des matières

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *