Detection de la couleur de la peauLa 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 :HeuristiquesDans 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 Espaces colorimétriquesIci, 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 espaces testésNous 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.
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 covarianceLe 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éthodePour 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
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. 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 :
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.
|