Premiers pas avec le seuillage

Traitement d'images en Python

Rebeca Gonzalez

Data Engineer

Seuillage

Segmenter une image en avant-plan et arrière-plan

En la rendant noir et blanc

On y arrive en définissant chaque pixel à :

  • 255 (blanc) si le pixel $\gt$ la valeur seuil
  • 0 (noir) si le pixel $\lt$ la valeur seuil

Image seuillée d'un homme avec un appareil photo

Traitement d'images en Python

Seuillage

La méthode la plus simple de segmentation d'images

  • Isoler des objets
    • Détection d'objets
    • Détection de visages
    • Etc.

Image seuillée de dominos

Traitement d'images en Python

Seuillage

Uniquement à partir d'images en niveaux de gris

Étapes du seuillage illustrées avec des dominos : image RVB d'origine, puis en niveaux de gris, puis seuillée

Traitement d'images en Python

Mettons en pratique

# Obtenir la valeur seuil optimale
thresh = 127

# Appliquer le seuillage à l'image binary = image > thresh
# Afficher l'originale et la seuillée show_image(image, 'Original') show_image(binary, 'Thresholded')

Image seuillée d'un homme avec un appareil photo

Traitement d'images en Python

Seuillage inversé

# Obtenir la valeur seuil optimale
thresh = 127

# Appliquer le seuillage à l'image (inversé) inverted_binary = image <= thresh
# Afficher l'originale et la seuillée show_image(image, 'Original') show_image(inverted_binary, 'Inverted thresholded')

Image seuillée (inversée) d'un homme avec un appareil photo

Traitement d'images en Python

Catégories

  • Global ou basé sur l'histogramme : bon pour les arrière-plans uniformes

  • Local ou adaptatif : pour un éclairage d'arrière-plan inégal

Comparaison du seuillage global et local

Traitement d'images en Python

Essayer d'autres algorithmes de seuillage

from skimage.filters import try_all_threshold

# Obtenir toutes les images résultantes fig, ax = try_all_threshold(image, verbose=False)
# Afficher les graphiques obtenus show_plot(fig, ax)
Traitement d'images en Python

Essayer d'autres algorithmes de seuillage

Tous les méthodes de seuillage global testées sur une image en niveaux de gris d'une page de texte

Traitement d'images en Python

Valeur seuil optimale

Global

Arrière-plan uniforme
# Importer la fonction de seuil d'Otsu
from skimage.filters import threshold_otsu

# Obtenir la valeur seuil optimale thresh = threshold_otsu(image)
# Appliquer le seuillage à l'image binary_global = image > thresh
Traitement d'images en Python

Valeur seuil optimale

Global

# Afficher l'originale et l'image binaire
show_image(image, 'Original')
show_image(binary_global, 'Global thresholding')

Image originale d'un homme avec un appareil photo, image seuillée et son histogramme avec une ligne rouge indiquant la valeur seuil optimale

Traitement d'images en Python

Valeur seuil optimale

Local

Arrière-plan inégal
# Importer la fonction de seuil local
from skimage.filters import threshold_local

# Définir la taille de bloc à 35 block_size = 35
# Obtenir le seuillage local optimal local_thresh = threshold_local(text_image, block_size, offset=10)
# Appliquer le seuillage local et obtenir l'image binaire binary_local = text_image > local_thresh
Traitement d'images en Python

Valeur seuil optimale

Local

# Afficher l'originale et l'image binaire
show_image(text_image, 'Original')
show_image(binary_local, 'Local thresholding')

Image seuillée localement d'une page de texte

Traitement d'images en Python

Passons à la pratique !

Traitement d'images en Python

Preparing Video For Download...