Projet C IG (1A)

IHM (2A)


VR/AR/Post-WIMP (3A)


Projet image (2A)


HCI (MoSIG 2)


Test Logiciel


Projects Docs

PrecedentMenuSuivant 

Detection de la couleur de la peau

La detection des pixels correspondant à des pixels de peau est l'étape préliminaire à la detection du visage d'une personne sur une image. Pour cela, plusieurs solutions s'offrent à nous : une méthode heuristique, des conversions en différents espaces colorimétriques et enfin une méthode dite de covariance.

Les différentes méthodes :

Heuristiques

Dans cette approche il s'agit de tester une méthode d'identification des pixels correspondant à des pixels de peau, basée sur des heuristiques présentées dans cette revue scientifique

Pour réaliser un tel test nous avons simplement implémenté les conditions d'appartenance d'un pixel à de la peau, condition que nous avons ensuite appliqué à l'ensemble des pixels de l'image. Si le test est passé, on garde la valeur du pixel, sinon on renvoit la valeur 0xFFFFFF (pixel blanc), on obtient ainsi une image ne faisant ressortir que les pixels de la peau.

Notez que cette approche ne nécessite pas une transformation complète de l'image dans un autre espace colorimétrique.

Espaces colorimétriques

Ici, nous souhaitons pouvoir identifier les pixels de couleur de la peau, pour cela nous sommes intéressés par la teinte de chaque pixel. C'est a dire l'information de couleur independamment de sa luminosité. Seule la teinte est utile pour une telle identification, car en effet, nous souhaitons que notre système puisse reconnaitre un visage malgré les variations de luminosité ambiante

Les images classiques sont exprimées dans l'espace colorimétrique RGB, où chaque composante contient l'information de luminosite. Nous avons donc cherché à exprimer chaque image dans différents espaces colorimétriques.
Dans ces nouveaux espaces, on ne garde que l'information correspondant à la teinte, ou bien on cherche à attenuer l'influence de la luminosite.

Les espaces testés

Nous avons exprimé les images dans les différents espaces suivants : YUV, RGB normalisé, HSV, HSL. Pour chacune de ces conversions, il a fallu effectuer un calcul pour chaque pixel de l'image. Etant donné qu'une image en 640 x 480 est composé de 307200 pixels, le cout de la conversion est très influencé par ces calculs. A partir des resultats et des performances nous avons choisi d'en garder un.


Dans cet espace l'information de la teinte n'est conservée que dans les composantes U et V, la composante Y contient l'information de luminosite. Au début, nous ne l'avions pas calculé, car, pour les raisons évoquées plus haut elle n'était pas intéressante. Cependant, aprés avoir fait le choix de travailler dans cet espace de couleur nous avons voulu ajuster la luminosité ambiante de la camera, la composante Y devint alors nécessaire. Pour réaliser cette conversion, il faut faire un calcul composé de 9 multiplications et 6 additions pour chaque pixel (6 multiplications et 4 additions si l'on ne garde que les composantes U et V).

Pour ces espaces de couleurs, nous n'avons gardé que l'information hue (H) et de saturation (S) pour chaque pixel. La luminosité L,V n'étant pas calculée. Ces deux espaces sont très similaires : la composante principale hue est calculée de la même manière.

  • RGB normalisé
Ici, l'information de la teinte de chaque pixel est contenue sur chacune des composantes RGB aprés normalisation par la luminosité. Souhaitant travailler en 2 dimensions et , d'aprés une heuristique, les pixels de la peau ne contiennent que 7% de bleu, nous avons pu omettre cette composante, enlevant donc 1/3 des calculs. En ne gardant que deux composantes sur trois, cet espace colorimétrique se montrait tout aussi intéressant que ses concurrents pour son coût.

Méthodes de covariance

Le principe de cette méthode est simple : à partir d'un échantillon de pixel, chacun représenté par exemple par 2 composantes dans un certain espace colorimétrique (U et V par ex.), nous pouvons calculer la matrice de covariance de cet échantillon, et ainsi déduire, à partir des vecteurs propres de cette dernière une nouvelle base.

Résultats et choix d'une méthode

Pour réaliser nos tests, pour la méthode heuristique nous l'avons simplement appliqué aux images reçues par la caméra. Concernant les différents espaces colorimétriques, pour chacun d'entres eux, tout d'abord nous avons convertit les images dans le nouveau format. Ensuite, dans chaque nouvel espace, pour savoir si un pixel correspondait à un pixel de peau, nous avons évalué la distance (norme euclidienne) de ses composants à des valeurs de référence. Pour connaitre ces valeurs de référence, nous procédons à un échantillonnage de pixels de peau en phase de calibrage de la caméra. On moyenne les valeurs obtenues dans cet échantillonnage pour obtenir nos composants de référence. On procède de même avec la méthode de covariance, seulement il faut réexprimer les pixels dans leur nouvelle base et redéfinir une distance dans ce nouvel espace.

En sortie nous obtenons donc des images de deux natures différentes : des images aux pixels de peau filtrée pour la méthode heuristique, et des images binaires pour les autres méthodes. En effet, pour ces dernières, une fois nos éléments de référence et notre distance établis on réalise un test simple sur chaque pixel de l'image pour savoir si oui ou non ce pixel pourrait, au vue de cette distance correspondre à un pixel de peau (fonction d'une tolerance que l'on se sera fixée à l'issu du calibrage). Un pixel blanc est renvoyé si le test est réussi, noir sinon.

La méthode heuristique se révèlent très peu robuste au variation de luminosité. En effet, même si l'on a changé quelque peu les valeurs de test de l'heuristiques pour être plus souple, comme on travaille sur une image RGB la detection des pixels de peau reste sensible à la variation de la luminosité, et le résultat est très bruité.

Ensuite, pour les différents espaces de couleurs, nous avons remarqué plusieurs choses. En lumière naturelle, on voit que les images obtenues dans l'espace YUV sont bien moins bruitées (RGB normalisé étant en deuxième position), les espaces HSL et HSV le sont par contre beaucoup plus. Par contre, en lumière non naturelle (néons de la salle de travail), les résultats sont inversés entre RGB normalisé et YUV, plus sensible au bruit (mais tout aussi mauvais pour HSL et HSV). RGB normalisé permet de garder un niveau de bruit quasi constant, que l'on soit en lumière naturelle ou non.

Voici un exemple en lumière naturelle des résultats que nous obtenons pour les différents espaces colorimétriques :


RGB

YUV

RGB normalisé

HSL

HSV

Au vu de ces résultats, réalisé je vous rassure sur beaucoup plus d'images que celles ci, nous éliminons tout de suite HSL et HSV trop médiocres. Les espaces YUV et RGB normalisé s'avèrent quant à eux très prometteurs.
C'est alors que nous décidons de mettre en place une méthode de covariance, avec laquelle nous espérons pouvoir diminuer encore plus le bruit lors de la detection. Dans la nouvelle base obtnue par la méthode de covariance, nous pouvons définir, à partir des éléments de référence une nouvelle distance. Cette nouvelle distance nous a permit de réaliser de nouveaux tests. Nous avons adapté deux méthodes de covariance pour les espaces YUV et RGB normalisé, que nous avons testé. Malheureusement, les résultats n'en étaient pas améliorés, le niveau de bruit n'a pas diminuer avec ces méthodes.
\\ Nous avons ensuite analysé les performances de ces différentes méthodes, avant de faire un choix.

Performances des différentes méthodes :

Ici nous avons comparé le temps de calcul des différentes méthodes pour réussir à faire une détection complète de pixel de peau sur une image entière (640 x 480). Nous n'avons pas fait de tests de performance pour la méthode heurstique car les résultats purs ne nous convenaient pas. Voici quelques uns de ces résultats :

 YUVHSVHSLNRGBYUVcovRGBCov
temps de conversion (1 image en 640 x 480)16ms22ms23ms19ms19ms18 ms



De plus, étant donné que sur une image en 640 x 480 ce calcul est effectué ~ 300 000 fois, et cela 25 fois par seconde, nous avons donc procédé à quelques optimisations. L'une d'entre elle, très étonnante est le remplacement d'une opération de division par son inverse et de réaliser à la place une multiplication. Avec cette modification nous obtenons des résultats étonnants : environ un gain de 50 % de temps de calculs. Aprés entretien avec monsieur Bérard, il semblerait que ce 'gap' provienne des processeurs Intel des machines sur lesquelles nous travaillons, réputés 'mauvais' en division. Néanmoins, au début du projet, à écouter François Bérard nous étions persuadés que la conversion RGB normalisé se montrerait la moins couteuse, et sans doute la plus abordable dans le temps imparti pour ces calculs. Or, pour nous ce n'est pas le cas, car, en effet, bien que la conversion YUV contiennent quelques calculs en plus, elle réalise moins de division que la conversion RGB normalisé.

Notre choix s'est donc porté sur la conversion YUV, très correcte en temps de calcul sur une image, et de très bonne qualité sur la detection des pixels de peau en lumière naturelle.

PrecedentMenuSuivant
 Retour haut de la page 
Edit - History - Upload - Print - Recent Changes - Search
Page last modified on June 14, 2007, at 04:26 PM