Seulliage multi-canal  et espace de couleurs

Dans la section précédente, nous avons vu comment seuiller une image en niveau de gris. Nous présentons donc dans cette section, différentes techniques de segmentation d’images couleur. Dans le premier chapitre, nous avons vu qu’une image couleur était codée sur trois canaux, le rouge, le bleu et le vert. Cette représentation des couleurs a été choisie car elle est proche des architectures matérielle (caméra et écran ) que nous utilisons au quotidien. La segmentation couleurs, consiste à utiliser l’ensemble des canaux d’une l’image afin de séparer les différentes régions de celles-ci. Il existe trois différentes approches de segmentation couleur [1] :

  • La première approche consiste à coder notre image sur un seul canal. C’est l’approche que nous avons appliquée dans la section précédente en transformant notre image RGB en une image en niveau de gris.
  • La seconde nommée approche marginale consiste à traiter chaque canal séparément et à fusionner les résultats. C’est l’approche que nous aborderons dans cette section.
  • Pour finir, l'approche vectorielle consiste à traiter l’ensemble des canaux en même temps comme étant un vecteur dans l’espace des couleurs. Nous présenterons cette approche dans une section ultérieure.

Opérateur binaire d’images :

Dans l’approche marginale, après avoir traité séparément chacun des canaux de l’image, il est nécessaire de fusionner les résultats obtenus sur chacun des canaux. Dans le cas où les résultats pour chacun des canaux sont des images binaires, la méthode la plus simple de fusion est l’utilisation d’opérateur binaire d’image simple telle que le NO, le ET, le XOR et le OR.Le fonctionnement de ceux-ci est le suivant :

  • L’opérateur NO renvoie 0 si le pixel sur lequel l’on l’applique est égal à 1 et 1 si le pixel sur lequel l’on l’applique vaut zéro.
  • L’opérateur binaire OR renvoie 1 si au moins l’un des deux pixels sur lequel l’on l’applique est égal à 1 . Il renvoie zéro si les deux pixels valent zéro.
  • L’opérateur binaire ET renvoie 1 si les deux pixels sur lesquels l’on applique cet opérateur valent 1 . Il renvoie zéro sinon.
  • L’opérateur binaire XOR renvoie 1 si un pixel binaire parmi les 2 sur lequel cet opérateur est appliqué vaut 1. Il renvoie zéro sinon.

En appliquant la méthode d’Otsu sur chacun des canaux de l’image de pizza, et en fusionnant les résultats obtenus via les opérateurs ET et OR l’on obtient la figure 1(d) pour le OR et 1(e) pour le ET.

Figure 1(a): Une photo de pizza.
Figure 1(b): Histogramme de couleur de la figure 1(a) .
Figure 1(c): Résultat de la méthode d'Otsu sur l'image en niveau de gris de la figure 1(a).
Figure 1(d): Résultat de la méthode d'Otsu sur les canaux de l'image figure 1(a) en applicant l'opérateur de fusion OU.
Figure 1(e): Résultat de la méthode d'Otsu sur les canaux de l'image figure 1(a) en applicant l'opérateur de fusion ET.
Sur les figures 1(d) et 1 (e), nous remarquons que le résultat obtenu avec l’opérateur binaire d’image ET est bien meilleur que le résultat obtenu avec l’opérateur binaire OU. Sur lequel une grande partie de la pizza est considérée comme faisant partie du fonds. De plus le résultat obtenu avec l’opérateur ET est meilleur que le résultat obtenu avec l’image en niveau de gris (figure 1(a)) car Les objets présents sur la table sont mieux distingués qu’auparavant.

Le code permettant d’obtenir ce résultat est le suivant :

#include "stdafx.h" 
#include "Otsu.h" 

int main()
{
	Mat src, dst, src_gray;
	src = imread("pizza.jpg", 1);
	dst=src.clone() ;
	cvtColor(src, src_gray, CV_BGR2GRAY );
	for (int i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			src_gray.at<uchar>(i, j) = src.at<Vec3b>(i, j)[0];
		}
	}
	int s_r=otsu(src_gray);
	for (int i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			src_gray.at<uchar>(i, j) = src.at<Vec3b>(i, j)[1];
		}
	}
	int s_g = otsu(src_gray);
	for (int i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			src_gray.at<uchar>(i, j) = src.at<Vec3b>(i, j)[2];
		}
	}
	int s_b = otsu(src_gray);
	for (int i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			if (src.at<Vec3b>(i, j)[0] < s_r || src.at<Vec3b>(i, j)[1] < s_g || src.at<Vec3b>(i, j)[2] < s_b)
			{
				dst.at<Vec3b>(i, j) = Vec3b(0, 0, 0);
			}
			else
			{
				dst.at<Vec3b>(i, j) = Vec3b(255, 255, 255);
			}
		}
	}
	imwrite("result1d.png", dst);
	for (int i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			if (src.at<Vec3b>(i, j)[0] < s_r && src.at<Vec3b>(i, j)[1] < s_g && src.at<Vec3b>(i, j)[2] < s_b)
			{
				dst.at<Vec3b>(i, j) = Vec3b(0, 0, 0);
			}
			else
			{
				dst.at<Vec3b>(i, j) = Vec3b(255, 255, 255);
			}
		}
	}
	imwrite("result1e.png", dst);
}

Espace de couleur :

L’espace de couleurs, RGB est l’espace de couleurs le plus connu et le plus utilisé néanmoins dans certains cas tels que l’imprimerie ou encore le traitement d’images l’usage de cette représentation peut se révéler inadapté. C’est pourquoi, il existe une multitude d’espaces de couleur, (RGB,CMJ,XYZ,luv,lab,HSI,LTS, etc ….),. Dans cette sous-section, nous présenterons les trois espaces couleurs les plus utilisés, les espaces RGB, CMY, HSI.

Espace RGB :

L’espace de couleurs RGB pour Red,Green, Blue est l’espace de couleur le plus proche du matériel électronique que nous utilisons. En effet les écrans LCD et LED, forment les différentes couleurs visibles par l’oeuil humain en combinant les trois couleurs primaires. La figure ci-contre illustre la synthèse additive de couleur. En combinant le rouge et le vert nous obtenons du jaune, en combinant le rouge et le bleu nous obtenons du magenta et en combinant le vert et le bleu nous obtenons du cyan.
Figure 2: Synthèse additive de couleur.

Espace CMY :

Le deuxième modèle de couleur le plus connu est le modèle CYM (cyan yellow magenta), il s’agit fréquemment utilisé dans l’imprimerie [2]. Ce modèle propose d’exprimer les différentes couleurs comme étant un mélange de trois couleurs secondaire, le cyan, le jaune et le magenta. La conversion du modèle RGB en CYM est très simple pour cela il suffit juste de soustraire chacun des trois canaux d’une image à 255. Ainsi pour obtenir une image exprimée dans cette espace de couleur l’opération mathématique qu’il faudra appliquer à chaque pixel de l’image est :
  • Cyan = 255-Red
  • Magenta= 255-Green
  • Yellow=255-Blue
Bien que théoriquement en combinant le cyan, le magenta, et le jaune, nous devrions obtenir du noir en pratique c’est rarement le cas. C’est la raison pour laquelle les constructeurs d’imprimantes couleurs rajoutent une composante noire à ce système. Nous obtenons ainsi un nouveau système de couleur nommé CMYK. La conversion de couleur RGB en couleur CMYK n’est pas simple. Ainsi, le pourcentage de noir qu’il faut rajouter afin d’obtenir l’impression la plus fidèle à l’image est amené à être fixé expérimentalement.
Figure 3: Synthèse soustractive de couleur

Espace HSI :

L’espace HSI, Teinte Saturation Intensité est l’espace le plus couramment utilisé en traitement d’images. Comparativement au modèle, RGB ou encore CMY, ce modèle de couleur présente l’avantage d’être plus facilement interprétable par l’humain car, il se veut proche de la perception visuelle de ce dernier. Tout comme le modèle RGB, le modèle HSI est défini par trois principaux canaux : la teinte est le canal qui décrit couleur de l’objet. On se réfère à la teinte de l’objet quand nous disons qu’il est rouge ou qu’il est vert. La saturation représente la pureté de la couleur de l’objet, ainsi un avec une forte pureté une objet rouge nous paraitra éclatant, tandis qu’avec une faible pureté un objet rouge aura un aspect délavé. Enfin l’intensité représente la quantité de lumière émise sur un objet, plus elle est forte et plus la couleur est clair, tandis que plus celle-ci est faible, plus la couleur de l’objet est sombre.

Méthode et algorithme de calcul [3,4](A venir) ….

Référence :

[1] Image numérique couleur : De l’aquisition au traitement Alain trémeau, Christine Fernandez-Maloigne, Pierre-Bonton pp 201-204
[2] The_image processing handbook sixth edition John C. Russ 2011 pp 443-450, 141-160 ,
[3] Digital image processing third edition Rafael C. Gonzalez,Richard E. Woods pp 395-414.
[4] RGB/HSI Convertion Equations (Derivations)
Introduction
Segmentation, extraction d'objets présents dans une image.
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 Generic License.