TLLSLO Module d'ombre


Introduction

Le document décrit l’ensemble des techniques utilisées lors de la réalisation du module de traitement d’image dans le but d’extraire l’ombre d’une personne.

Les matériels utilisés sont:

Au niveau logiciel, l'utilisation de l'outil de rendu graphique temps réel VirChor (Virtual Chreographer : http://sourceforge.net/apps/mediawiki/virchor/index.php?title=Main_Page) permet de réaliser une implémentation performante et pragmatique de ce module de traitement d'ombre.


L'architecture globale de l'application pour un canal donnée est composés de trois modules (voir figure ci-dessous):

 Le schéma de l'architecture globale de l'application


Le module de traitement d’image est en 2 parties (voir figure ci-dessous):

 Le schéma de l'architecture du module d'ombre

Débruitage

Le débruitage est constitué de 3 filtres indépendants qui sont le désentrelacement, le médian spatial et le bilatéral.


1 Désentrelacement

données d'entrées: image capturée par la caméra; c'est une image entrelacées

données sorties : image désentrelacée (FrameBuffer_desentrelace_filter)

paramètre de contrôle : cg_fs_onOff; 1 pour activer l'effet et 0 pour désactiver


Lors de l’acquisition de l’image à partir de la caméra, l’image est entrelacée, à savoir qu’elle ne capte pas 30 images par seconde. Car en réalité, la caméra ne capte que 60 demi-images par seconde. C’est en combinant deux demi-images consécutives, encore appelées trames (field), qu’on obtient une seule image (frame). La combinaison de deux trames est appelée l’entrelacement. L’apparition de matériels affichant des images entières (on parle d’affichage en mode progressif) tels que les écrans d’ordinateur nécessite d’effectuer la conversion de séquences vidéo du mode entrelacé au mode progressif. Cette action est le désentrelacement :1. Méthode la plus simple : les lignes de chaque demi-image sont doublées pour obtenir une image complète.2. Méthode du filtre spatial (adaptée aux images en mouvement) : on calcule les lignes manquantes de chaque trame à partir des lignes voisines de la même trame3. Méthode du filtre spatio-temporel (adaptée aux images fixes) : les lignes manquantes de chaque trame sont calculées à partir des lignes voisines de la même trame et des lignes voisines ou identiques des trames voisines. D'autres méthodes existent encore et les études ne sont pas terminées afin d'améliorer les résultats.Étant donné la mobilité de notre diapositif, nous avons opté pour le filtre spatial.Le filtre de désentrelacement fut l’un des premiers filtres réalisés, car il joue un rôle crucial dans lesdifférents domaines de mise en forme du signal vidéo (filtrage, réduction de bruit, détection de contours,…).


2 Médian spatial

données d'entrées: image désentrelacée (FrameBuffer_desentrelace_filter)

données sorties : image avec diminution des bruits impulsifs (FrameBuffer_median_filter)

paramètre de contrôle : cg_fs_onOff; 1 pour activer l'effet et 0 pour désactiver

La médiane est une mesure statistique qui représente une alternative robuste à la moyenne. Considérons n valeurs numériques x1, …, xn (pas nécessairement distinctes), où n est impair. On les ordonne de la plus petite à la plus grande, ce qui donne la suite permutée xi1, …, xin, où {i1, …, in} est une permutation de {1, …, n}. La médiane est alors la valeur placée au milieu de cette suite ordonnée, à savoir xim pour m = (n+1)/2.

Par exemple, soit n = 9, et considérons les 9 valeurs17, 1, 3, 5, 3, 1, 12, 2, 7.Notons que certaines valeurs peuvent être répétées, et qu'il ne faut pas supprimer les répétitions ! En les ordonnant de la plus petite à la plus grande, on obtient la suite1, 1, 2, 3, 3, 5, 7, 12, 17.La valeur au milieu de cette suite ordonnée est la 5ème, à savoir 3, qui est donc la médiane des 9 valeurs.

Le filtre médian permet, de manière efficace supprimer les bruits impulsif tout en conservant les fortes variation.

Définition tirée de : http://arthur.u-strasbg.fr/~ronse/TIDOC/FILTER/median.html


3 Le Filtrage Bilatéral

données d'entrées: image à la sortir du filtre médian (FrameBuffer_median_filter)

données sorties : image avec diminution des bruits impulsifs (FrameBuffer_ROADBI_filter)

paramètre de contrôle : cg_fs_onOff; 1 pour activer l'effet et 0 pour désactiver


Le filtrage bilatéral est un filtrage non-linéaire que ne détruit pas les discontinuités. Si on applique un filtrage gaussienne simple, on aura une moyenne basée sur les aspects spatiales de l’image, plus les pixels voisins seront proche du pixel traité, plus le poids sera élevé. On ajout, donc, un poids par rapport à l’intensité des pixels considérés. Deux pixels peuvent, donc, être près dans l’espace ou peuvent avoir des valeurs similaires (près dans l’ensemble image).

http://www-igm.univ-mlv.fr/labinfo/rapportsInternes/2008/04.pdf

La méthode est implémenté selon l'article [1] Garnett Roman et al.

Analyse

Une fois que l'image capturée par la caméra est débruité, elle va être analyse pour en extraire l'ombre et la silhouette (à savoir création des masques ombre, silhouette… et plus précisément décider un ensemble de pixel appartient ou pas à une ombre à une silhouette (voir figure ci-dessous).

Le schéma de l'arborescence avec image entre mobile immobile, ombre et silhouette

La première étape, pour distinguer si un pixel appartient à un objet en mobile ou pas. La solution est d'utiliser un système de soustraction de fond. Il prend une image de référence qu'on appelle l'image de fond ; c'est l'image statique qui ne contient pas d'objet en mouvement. Pour réaliser l'opération, il faut soustraire la valeur du pixel de l'image courant avec la valeur du même pixel (position spatial) du fond. Car en théorie, si un pixel de l'image courant appartient au fond, alors la différents est nul ou proche de zéros, par contre si c'est un pixel appartenant à un objet mobile alors la différence est plus grande. Enfin un seuillage permet de prendre une décision binaire. L'opération de soustraction de fond est réaliser dans le filtre « SsFondLOG ». La soustraction se fait dans le domaine logarithmique pour rehaussé les valeurs d'intensité lumineuse intermédiaire.

La méthode de soustraction de fond est assez performante si l'illumination de l'environnement ne varie pas. Car si l'intensité lumineuse globale de l'environnement varie, alors les valeurs des pixels supposé immobile change de valeurs par rapport à l'image « fond » donc tous les pixels de l'image sont alors considéré appartenant à une objet mobile.

Donc il faut un fond qui s'adapte au changement lumineuse globale de l'environnement. Cette méthode s'appelle le « fond adaptatif ».


La seconde étape, pour distinguer si un pixel appartient à une ombre ou à la silhouette. Il y a deux critères de discrimination : seul une silhouette peut permettre à l'image courage d'avoir une intensité lumineuse supérieure au fond et le faite que l'ombre est une zone homogène.

Pour cette deuxième critère, l'hypothèse utilisée est que le fond est homogène (le mur ou le tableau derrière la silhouette). Donc l'ombre projeté sur le fond forme une zone homogène alors que la silhouette sera beaucoup plus contrasté (plie des vêtements etc.). À partir d'une valeur d'homogénéité calculée, nous pouvons distinguer l'ombre et la silhouette (à part dans le cas où sur la silhouette il y a une zone sombre et au moins aussi homogène que l'ombre qui sera considéré comme une ombre.


4 Médian Temporel

données d'entrées: 5 images consécutives (images courante, image t-1, t-2, t-3,t-4)

données sorties : image avec diminution des bruits impulsifs et suppression des mouvements rapides des objets mobiles (FrameBuffer_medianTempo_filter)

paramètre de contrôle : cg_fs_onOff; 1 pour activer l'effet et 0 pour désactiver


Le filtre médian temporel est une filtre non-linéaire, et similaire au filtre médian spatial. Pour une pixel donné, il récupère sa valeur à des instants différents ( instant courant t, instant avant t-1, puis t-2, jusqu'à t-4). Ainsi, la valeur de sortie de chaque pixel est calculé à partir de 5 valeurs. Le filtre trie les 5 valeurs par ordre croissantes dans un tableau de valeur. La valeur de sortie du filtre la valeur médian du tableau (ex s'il y a 5 valeurs, alors c'est la 3°, si la taille du tableau est de 9, alors c'est la 5° valeurs…)

Ce filtre permet de supprimer les pixels avec des valeurs instables dans le temps (ex : à l'entrée, nous avons 56,80,58,204,76, la valeur médian est 76).

L'image obtenue ne remplace pas l'imag0e courant originale, du l'impression saccadé du résultat.

Il permet juste à l'utilisation du fond adaptatif, car il supprime d'une part les mouvements rapides et les bruits vidéos.


5 Gaussian

données d'entrées:

-La texture médian temporel pour la mise à jour

-La texture qui contient les données de la gaussien à l'instant t-1

-13 textures aux instants précédents tous les 5 images (image t-5, t-10 … t-70) qui sera servi pour le 2° test de mise à jour

données sorties : image avec diminution des bruits impulsifs et suppression des mouvements rapides des objets mobiles (gaussian1)

paramètre de contrôle :

-cg_fs_update; 1 pour activer le test de mise à jour (après il y a 2 autres tests de mise à jour, donc même si ce premier test est activé que le fond va forcément mise à jour)du fond et 0 pour désactiver (que le fond est sure de ne pas être mise à jour)


Ce filtre « gaussian » est principalement constitué de deux parties; La première partie permet de tester si la valeur des pixels de l'image courant de mettre à jour le fond ou pas. La deuxième partie de l'implémentation permet de mettre à jour la texture (image) de fond.

En général, une texture visuel est constituée de quatre canaux (rouge, vert, bleu, et alpha pour la transparent). Mais pour réaliser ce filtre gaussien, deux valeurs est utilisé : la moyenne et la variance.

Pour un pixel donné, La première valeur est la moyenne dans le temps (temporelle). Elle est la valeur d'intensité lumineuse probable du fond. La seconde valeur est la variance. Plus cette valeur est grande, plus la valeur de l'image courante a de probabilité d'être mise à jour; c'est une valeur de seuillage.

Les trois tests de mise à jour de la gaussienne

-Le paramètre « cg_fs_update » est le premier des tests de mise à jour, si il est à 0 alors, le fond ne fera pas de mise à jour. Par contre si il est à 1 alors le deuxième test aura lieu

-Le deuxième test de mise à jour a pour principe de considérer la stabilité de l'image selon un ensemble échantillon temporel. Pour un pixel donné, la mise à jour de la valeur du fond se réalise que s'il n'y a pas trop de changement de valeur d'intensité lumineuse (différence puis un seuillage pour pouvoir prendre une décision) entre l'image courant et un ensemble d'image antérieur échantillonnée dans le temps (tout les 5 images).

-Le dernière test de mise à jour (si les deux test avant sont positifs) utilise la valeur variance définir par la méthode de la gaussienne.

Si ces trois tests ont été positifs, alors il y aura la mise à jour de la gaussienne définie par la valeur moyenne et la variance.

La mise à jour de la gaussienne

La mise à jour de la moyenne est une combinaison entre la ancienne valeur et la valeur de l'image courante :

nouvelle moyenne = (1-coef) * ancienne moyenne de la gaussienne + coef * intensité du pixel de l'image courant

De même que la mise à jour de la variance est une combinaison entre la ancienne valeur et la valeur de l'image courante :

nouvelle variance = (1-coef) * (ancienne variance de la gaussienne)² + coef * (intensité du pixel de l'image courant - nouvelle moyenne)²

La méthode du fond adaptatif est tirée de l'article [2].

La méthode pour la réalisation du deuxième test de mise à jour est tirée de l'article [3] de A. Leone et al.


6 Fond

données d'entrées:

-l'image courante pour la mise à jour manuel (FrameBuffer_ROADBI_filter)

-la texture qui contient la moyenne et la variance de la gaussienne (gaussian1)

données sorties : image fond (FrameBuffer_fond_filter)

paramètre de contrôle : cg_fs_capture; la valeur par défaut est 1, elle diminue et tente vers 0, et tant que cette valeur est supérieure à 0.75, l'image courante est considérer comme le fond (permet d'initialiser le système au lancement). Il suffit de remettre la variable à 1 pour refaire le fond manuellement.


Le filtre a pour l'utilisation principale de mettre en sortie dans les 3 canaux couleurs (rouge, vert et bleu) la valeur de la moyenne de la gaussienne qui est la valeur d'intensité du fond.


7 Détection de contour Sobel

Le filtre Sobel est appliqué 2 fois, une fois sur l'image courante, une fois l'image fond

données d'entrées: l'image courante (FrameBuffer_ROADBI_filter) ou l'image fond (FrameBuffer_fond_filter)

données sorties : image gradient courante (FrameBuffer_sobel_filter) et l'image gradient fond (FrameBuffer_sobelFond_filter)

paramètre de contrôle : rien


Pour faire simple, l'opérateur calcule le gradient de l'intensité de chaque pixel. Ceci indique la direction de la plus forte variation du clair au sombre, ainsi que le taux de changement dans cette direction. On connaît alors les points de changement soudain de luminosité, correspondant probablement à des bords, ainsi que l'orientation de ces bords.


8 Soustraction de fond en Détection de contour « ssFondPlusSobel »

données d'entrées: image gradient courante (FrameBuffer_sobel_filter) et l'image gradient fond (FrameBuffer_sobelFond_filter)

données sorties : la soustraction entre les 2 textures ci dessus (FrameBuffer_ssFondPlusSobel_filter)

paramètre de contrôle : rien


Ce filtre permet de renforcer le soustraction de fond, et de rendre le résultat de ce dernier plus robuste et performant


fig4. Une soustraction de fond dans le domaine logarithmique

fig5. Le soustraction de fond avec renforcement de soustraction de fond de contour


9 Soustraction de fond dans le domaine logarithmique « SsFondLOG »

données d'entrées:

-l'image courante (FrameBuffer_ROADBI_filter)

-l'image fond (FrameBuffer_fond_filter)

-l'image de soustraction de fond de gradient (FrameBuffer_ssFondPlusSobel_filter)

données sorties : image soustraction de fond (FrameBuffer_ssFondLOG_filter)

paramètre de contrôle : rien

Le filtre permet de réaliser la soustraction de fond. Mais au lieu d'avoir les valeurs d'intensité lumineuse de manière affine (x = y), il y a conversion des valeurs de l'intensité lumineuse dans le domaine logarithmique. Cette transposition de domaine permet de relever les valeurs intermédiaires (entre 0 et 255). donc la différence entre les 2 valeurs d'un pixel (image courante et l'image fond) est plus flagrant.

fig6. Le graphique de la fonction logarithmique

La méthode de soustraction de fond dans le domaine logarithmique est tirée de l'article [3] A. Leone et al.


10 Homogénéité

données d'entrées:

-l'image de soustraction de fond (FrameBuffer_ssFondLOG_filter)

-l'image courante gradient (FrameBuffer_sobel_filter)

données sorties : image distinguant les zones homogènes ou contrastées (FrameBuffer_homogeneous_filter)

paramètre de contrôle : cg_fs_scale; permet de régler la taille de la texture lors des opérations de calcule d'homogénéité

Pour distinguer l'ombre et la silhouette, l'hypothèse principale est que l'ombre et une zone plus homogène que la silhouette. Pour calculer le critère d'homogénéité, c'est à la fois la gradient spatial et la variance spatial de l'image courante.

Le calculer pour la variance spatiale, qui utilise beaucoup de ressource, peut être optimiser si la calcule est réalisée sur une image de taille inférieur.

fig7. La texture contenant les données d'homogénéité


11 Mixte

données d'entrées:

-l'image de soustraction de fond (FrameBuffer_ssFondLOG_filter)

-image distinguant les zones homogènes ou contrastées (FrameBuffer_homogeneous_filter) (FrameBuffer_homogeneous_filter)

données sorties : image avec des zones de forte intensité pour les zones mobiles et homogène (FrameBuffer_homogeneous_filter)

paramètre de contrôle : rien

La multiplication de ces 2 textures permet de révéler, les pixels à la fois mobile et homogène.

fig8. La texture contenant les données mixteS


12 Détection d'Ombre

données d'entrées:

-l'image courante (FrameBuffer_ROADBI_filter)

-l'image fond (FrameBuffer_fond_filter)

-l'image de soustraction de fond (FrameBuffer_ssFondLOG_filter)

-image distinguant les zones homogènes ou contrastées (FrameBuffer_homogeneous_filter) (FrameBuffer_homogeneous_filter)

données sorties : l'extraction de l'ombre selon les critères de sélection (FrameBuffer_dOmbre_filter)

paramètre de contrôle : cg_fs_4fv_coef : un tableau de 4 paramètre, le premier permet de définir le seuil du soustraction du fond, plus le seuil tente vers 1, moins il y a de pixels mobiles. Le deuxième paramètre permet de définir le seuil d'homogénéité, plus le seuil tente vers 1, moins il y a de pixels homogènes.

Le filtre rassemble tout les différents texture contenant les informations utiles à l'analyse d'image. Il prendre des décisions à partir en effectuant des seuillages. Il permet d'extraire l'ombre comme un objet mobile (par soustraction de fond), homogène (par le critère d'homogénéité) et une diminution d'intensité lumineuse.


fig9. Le résultat de la distinction entre l'ombre et la silhouette

Une séquence vidéo de la détection de l'ombre: [1]

D'autres filtres, on était implémentés et testé (ex : le filtre trilatéral, qui est plus performant que la bilatéral, mais plus gourmande, ou encore les filtres morphologies mathématiques). Ils ont pas été inclut dans la chaîne de traitement.

Référence

De même que pour la documentation, les articles cités dans ce document ne sont pas la liste exhaustive de la documentation, vous pouvez accéder à cette liste via cette adresse :

http://vida.limsi.fr/index.php/TLLSLO_EdL_Scientifique_R%C3%A9f%C3%A9rences_scientifiques

[1] Garnett Roman; Huegerich Timothy; Chui Charles; Wenjie He. A universal noise removal algorithm with an impulse detector. IEEE transactions on image processing ISSN 1057-7149

[2] Chris Stauffer W.E.L Grimson Adaptive background mixture models for real-time trackingThe Artificial Intelligence Laboratory Massachusetts Institute of Technology Cambridge,M A 02139

[3] A. Leone, C. Distante. Shadow detection for moving objects based on texture analysis. Istituto per la Microelettronica e Microsistemi IMM-CNR.

[4] Quen-Zong Wu, Bor-Shenn Jeng. Background subtraction based on logarithmic intensities. Chunghwa Telecommunication Laboratories.