<< | Liste des exercices | Étude de quelques filtres usuels >>

1. Utilisation d'histogrammes

Ces exercices illustrent la manipulation de la structure d'histogramme 1D sous OpenCV.

On fournit la fonction utilitaire suivante qui permet de lire une image en s'assurant qu'elle est en niveaux de gris sur 8 bits (seul type d'images considéré dans ce TP) :

def lire(nomImage):
    """Retourne l'image en niveaux de gris sur 8 bits nomImage."""
    image = cv2.imread(nomImage, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    if image is None:
        sys.exit("Impossible de charger l'image " + nomImage)
    if image.dtype != 'uint8':
        sys.exit("Type de donnée incorrect : " + image.dtype + " (uint8 attendu)")
    return image

Représentation et analyse d'histogrammes 1D

  1. Écrire la fonction :
def histo(image)
qui calcule l'histogramme de l'image paramètre grâce à la fonction calcHist d'OpenCV, puis représente l'image et son histogramme superposés dans une même fenêtre matplotlib. Pour cela, on utilisera les fonctions subplot et bar du sous-module pyplot.
  1. Représenter ainsi l'histogramme de l'image de traces digitales suivante et repérer à quelles zones de l'image correspondent les principaux modes de cet histogramme. Pourquoi ne peut-on pas exploiter (visuellement) cet histogramme pour déterminer un seuil de binarisation de l'image permettant de séparer les doigts du fond ?
  1. Déterminer graphiquement une zone rectangulaire intéressante (région d'intérêt ou ROI, Region Of Interest) de l'image entourant une trace de doigt. En ajoutant un paramètre roi (par exemple de type dictionnaire) à la fonction histo, représenter seulement cette zone et son histogramme. Peut-on à présent proposer un seuil de binarisation permettant de séparer les doigts du fond ?

Binarisation de l'image

  1. Écrire la fonction :
def seuiller(image, roi=None, seuil=0.0)
qui binarise l'image paramètre (ou une ROI de cette image si elle est fournie) au moyen de la fonction threshold en utilisant le seuil fourni. Recommencer éventuellement la procédure (questions 3 et 4) pour déterminer un seuil plus satisfaisant. Si le paramètre seuil est à 0 ou omis, la fonction doit déterminer le seuil automatiquement par la méthode d'Otsu (sur la ROI si elle est fournie). Comparer les valeurs de seuils et les résultats de binarisation dans chaque cas.
  1. Le seuil déterminé automatiquement change-t-il lorsque l'on prend en compte toute l'image pour sa détermination ? Conclure sur la pertinence à utiliser cette méthode de seuillage pour notre application.