Bases
Cours
Traitements classiques couleur
où
Quelques espaces couleur et application
- RGB : acquisition/restitution écran
- CMY : impression
- XYZ : modélisation des couleurs
- YUV/YCbCr : transmission et codage
- HSV/HSL : espace intuitif, vision humaine
- Lab/Luv : espace uniforme, distance entre les couleurs
Contraste et Histogramme
- Contraste : Caractérisation des différences (variations) de niveau de gris
- maximale :
- écart type : avec
- Histogramme : Description de la répartition desn iveaux de gris, distribution statistique, bornes de la répartition
- H(k) = \\#\\{(i,j) \in M \times N : I(i,j) = k\\}
- Il ne code pas l'information spatiale, 2 images sémantiquement différentes peuvent avoir le même histogramme
- Il n'est pas possible de reconstruire une image à partir de son histogramme
- Contraste histogramme : Les valeurs proches de 0 ou 255 correspondent à une image sombre ou claire. Les valeurs tassées ou réparties cela correspond à un contracte faible ou élevé
- Éclaircir une image sombre : correction logarithmique
- Assombrir une image claire : correction exponentielle
- Translation d'histogramme : conserver le contraste mais modifier la luminosité
- Normalisation : étirement d'histogramme
- Modifier l'intervalle de variation
- Général
- Particulier ,
Équilibrage d'histogramme
Définitions : pour une intensité d'une image de taille à intensités
- Histogramme normalisé : c'est une loi de probabilité. La probabilité qu'un pixel ait le niveau de gris vaut donc , avec
- Histogramme cumulé :
- Histogramme cumulé normalisé : c'est à dire la réparticion de la loi de probabilité
- , l'intensité initiale, la nouvelle
- une intensité maximale (par exemple 255)
Seuillage (Thresholding)
- Ramener l'image à quelques niveaux de gris dans une bande
- Mettre en avant des régions / détails mais n'améliore pas l'image
Quelques variantes sur le seuillage global
Cas particulier : binarisation
Seuillage adaptatif local
Le paramètre de seuillage dépend d'un voisinage autour du pixel (transformation local)
- Le seuillage est principalement utilisé en niveaux de gris
- Difficultés de trouver les valeurs de seuillage, très dépendant de l'application, de nombreuses méthodes existent
OTsu
Minimiser la variance intra-classe pour de taille à intensités un seuil et et : variance de la classe . avec les probabilités d'appartenance aux classes et pour le niveau . Le seuil optimal .
Maximisation de la variance inter-classe : minimiser revient à maximuer où , sont les moyenne des classes et . Le seuil optimal .
Maximiser est plus efficace algorithmiquement que de minimiser . En effet et , avec la moyenne globale de l'image .
Mise en pratique
color-convert <ims>
Écrire le programme color-convert.cpp
qui
- affiche les canaux R,G et B dans 3 images monochromes
- convertit l'image couleur en niveaux de gris et l'affiche
- convertit l'image couelur en niveaux de gris et l'affiche
- convertit l'image RGB et YCbCr et la reconvertit en RGB, afficher l'image résultat
- affiche les canaux Y, Cb et Cr
- y a-t-il une différence entre l'image en niveau de gris et le canal Y ?
- y a-t-il une différence entre l'image initiale et l'image reconvertit en RGB ?
- Note 1 : pour convertir les images dans d'autres espaces couleurs utiliser la fonction
cvtColor
- Note 2 : pour pouvoir voir les différences, il est conseillé de faire attention aux types de données
hsv-modiciation <h> <s> <v> <ims> <imd>
Écrire le programme hsv-modification.cpp
- ce programme permet de charger une image donnée en paramètre
<ims>
- convertit l'image dans l'espace HSV
- affiche les canaux , et (si applicable, attention aux problèmes de normalisation)
- modifie les canaux HSV en fonction des valeurs , et données en paramètres en les ajoutant aux valeurs initiales
- sauvegarde la nouvelle image avec le nom donné en paramètre
<imd>
- visualiser l'image produite via
pvisu
̀eq-histogram <ims>
Écrire le programme eq-histogram.cpp
- ce programme permet de charger une image donnée en paramètre
<ims>
- réalise la méthode d'équilibrage d'histogramme de l'image source
- la méthode considère que l'image est en niveau de gris
- la construction des histogrammes se fait "à la main"
- sauve l'image dans un fichier
eq.png
- utiliser la fonction
opencv equalizeHist. Sauver dans une image
eq-ocv.png` - calculer une image de différence :
diff.png
- visualiser les images produites via
pvisu
adaptative-th <ims> <radius> <const>
Écrire le programme adaptative-th.cpp
- ce programme permet de charger une image donnée en paramètre
<ims>
- réalise un seuillage adaptative avec la moyenne où le voisinage est déterminé par le paramètre
<radiuis>
, () et paramétré par la constante<const>
- sauve l'image dans un fichier
th.png
- utiliser la fonction
AdaptiveThreshold
et réaliser le même seuillage. Sauver dans une imageth-ocv-mean.png
- calculer une image de différence
diff.png
- test l'option
ADAPTIVE_THRESH_GAUSSIAN_C
et sauver l'image dansth-ocv-gauss.png
- visualiser l'image produite en la visualisant via
pvisu
otsu <ims>
Écrire le programme otsu.cpp
- ce programme permet de charger une image donnée en paramètre
<ims>
. L'image est traitée comme une image en niveaux de gris - réalise une binarisation en utilisant le calcul d'un seuil automatique par la méthode d'Otsu
- affiche l'image binaire et la sauve dans un fichier nommé
otsu-th.png
- utilise la fonction
threshold
avec le paramètreTHRESH_BINARY + THRESH_OTSU
afin de réaliser la même opération. Afficher l'image binaire et al sauver dans un fichierotsu-th-ocv.png
- affiche une image de différence entre les deux méthodes
- affiche sur la sortie standard les valeurs de seuil trouvés par votre implémentation et celle d'opencv. Comparer les valeurs
- visualiser les images résultats via pvisu
- Remarque importante : en analysant l'algorithme, les équations de la méthode d'Otsu et les propriétés suivantes : et , une implémentation plus efficace peut être réalisée par rapport à une version naïve de l'algorithme. Il est fortement conseillé de produire une telle implémentation.