<< Lecture et affichage d'une image | Liste des exercices | Accès aux canaux et pixels d'une image >>

2. Transformations ponctuelles d'une image

Dans la suite, nous étudions l'histogramme d'une image et quelle influence ont sur l'image les transformations appliquées au niveau de gris de chaque pixel (transformations ponctuelles).

La structure d'histogramme n'étant pas très simple à utiliser sous OpenCV, la visualisation des histogrammes se fera grâce à un programme annexe, ici XnView.

Remarque : au besoin, ce logiciel permet aussi de capturer l'image depuis la fenêtre OpenCV (cf. menu Outils/Capturer, avec options Fenêtre active et Touche d'appel).

Histogramme et dynamique d'une image

  1. Ouvrir l'image gateaux1.png sous XnView et visualiser son histogramme (cf. menu Image/Ajuster/Niveaux).
Interpréter l'allure de cet histogramme.
  1. Déterminer la dynamique de cette image graphiquement à l'aide de XnView, puis utiliser la fonction minMaxLoc d'OpenCV pour calculer cette dynamique précisément.
Comparer les valeurs obtenues graphiquement et par calcul. Comment expliquez-vous cette différence ?

Binarisation d'une image

  1. L'opération ponctuelle la plus simple consiste à binariser une image en seuillant les niveaux de ses pixels. Grâce à XnView, déterminer graphiquement un seuil T permettant de séparer les gâteaux du fond. Appliquer la binarisation sur l'image gateaux1, puis enregistrer l'image seuillée dans un fichier.
Donner (en la justifiant) la valeur du seuil retenue pour binariser l'image.
  1. Écrire la fonction :
def seuiller(nomImage, iSeuil)
qui ouvre l'image nomImage puis utilise la fonction threshold d'OpenCV pour la binariser en utilisant le seuil iSeuil. Appliquer seuiller à gateaux1.png en fixant le seuil à T, puis à 2T. Pour chaque valeur de seuil, comparer le résultat de binarisation à celui enregistré à la question 3 en utilisant la fonction compare d'OpenCV.
Interpréter les résultats obtenus dans les 2 cas. Pour répondre précisément à cette question, on pourra compléter la fonction seuiller pour :
  • déterminer numériquement si les deux images sont identiques ;
  • évaluer leur similarité (en pourcentage) grâce à la fonction countNonZero.

Autres transformations ponctuelles d'une image

  1. Tester les transformations obtenues avec 2 autres valeurs possibles pour le dernier paramètre de la fonction threshold : THRESH_TOZERO et THRESH_BINARY+THRESH_OTSU.
En raisonnant sur l'histogramme, expliquer comment chacune de ces transformations modifie l'image. Comparer le seuil optimal, déterminé automatiquement par la méthode d'Otsu, à celui que vous aviez déterminé graphiquement.
Remarque : La méthode d'Otsu permet de déterminer sur l'histogramme un seuil qui maximise la séparation des modes tout en maximisant leur homogénéité respective. Pour une explication théorique succincte, voir wikipedia et cette autre page pour une explication plus détaillée.