• Aucun résultat trouvé

Algorithmes géodésiques pour les GPP/GPPMM

5.3.1 Idée de base

Le traitement géodésique constitue un type de traitement de base de la morphologie mathématique. On désigne une opération comme opération morphologique géodésique si le traitement est effectué d’une manière itérative, si nous pouvons y percevoir une propagation des valeurs et si cette propagation est restreinte lors d’enchaînement des itérations par une fonction, exprimée le plus souvent en tant qu’image du masque. Citons comme exempleSer00la définition de la dilatation δ géodésique de taille unité (donné

par l’élément structurant B) de la fonction g restreinte par la fonction f :

δf(g) = inf(g + B, f ) (5.1)

nous travaillons à l’échelle des fonctions, c’est-à-dire à l’échelle des images entières. Si on suivait ces définitions, la restriction, représentée dans notre exemple par la fonction inf, devrait opérer sur les images. Pour les raisons de performance, il est préférable d’imposer la restriction sur la propagation déjà dans le kernel du calcul de l’opération sur le voisinage qui travail à l’échelle des éléments de l’array. Ainsi, nous pouvons construire un kernel d’une fonction morphologique géodésique à condition que nous puissions introduire la valeur restrictive (valeur du masque correspondant au pixel traité) comme un paramètre supplémentaire dans la fonction définissant le kernel.

Nous allons nous appuyer sur les kernels géodésiques des opérations sur le voisinage. Nous avons présenté la forme formelle pour ces kernels dans la section 4.6.6, page 94. Elle sera représentée dans nos algorithmes par les fonctions du type NgbGOp. De plus, nous devons également gérer dans ces algorithmes l’extraction de la valeur du masque. Pour cette extraction, nous allons nous appuyer sur la même fonction du parcours des stream que celle utilisée pour l’image même. Mais il nous faut spécifier une fonction d’échantillonnage des éléments d’un array à partir d’un index qui est du type SampFnc et qui sera utilisée pour obtenir la valeur concrète du masque pour un index concret.

Remarquons que pour extraire correctement les éléments qui se correpondent dans l’image et dans le masque, les dimensions de ces deux arrays doivent être obligatoirement les mêmes. L’algorithme 5.9

nous décrit la définition du skeleton algorithmique ngbGAlgoGen destiné pour le travail géodésique sur le voisinage.

Algorithme 5.9 : ngbGAlgoGen Skeleton algorithmique généralisé de travail géodésique sur le voisinage

1 ngbGAlgoGen :: [ Streamize α ] → ( [ ExtrNgb α ] , [ SampFnc α])→ [ NgbGOp α ]

2 → ( Ar ( I , I ) α, Ar ( I , I ) α) → Ar ( I , I ) α

3 ngbGAlgoGen strms (extrsN,extrsM) ops (ar , msk) = array

4 (bounds ar )

5 (compute strms (extrsN,extrsM) ops ar msk)

6 where

7 compute [ ] [ ] [ ] ar msk = [ ]

8 compute (s :ss) ( (eN:esN), (eM,esM)) (o:os) ar msk =

9 ( ( zip (s ar ) ) 10 $ (map2 o 11 ( (map (eNar ) ) $ (s ar ) ) 12 ( (map (eMmsk))$ (s msk)) 13 ) 14 )

15 ++(compute ss (esN,esM) os ar msk)

La fig. 5.13 nous illustre sur le diagramme du flux la structure et la fonction de ce skeleton dans le cas spécial où nous ne fractionnons pas l’image aux différentes zones et où nous avons, par conséquent, son fonctionnement décrit par une seule fonction de parcours de l’image, une seule fonction d’extraction des voisins et une seule fonction de kernel opérant sur le voisinage et sur le masque (strms, extsN, extsP,

ops sont les listes contenant un seul élément).

ar (Array d’entrée) Array de sortie array bounds Création de l’array de sortie strm0 extrM0 NgbOp0 zip ++[] compute strm0 extrN 0 Msk (Array de masque)

FIG. 5.13 : Fonctionnement du skeleton algorithmique ngbGAlgoGen de traitement du voisinage avec le

masque dans le cas spécial où nous ne fractionnons pas l’image aux différentes zones

5.3.2 Itérations, fin de propagation

Ce skeleton est élémentaire et il ne décrit qu’une itération de la propagation géodésique. Pour l’uti- liser correctement, l’élément structurant employé doit obligatoirement être de la taille unité. La propa- gation géodésique elle-même sera obtenue par l’incorporation de ce skeleton dans un skeleton ou un algorithme gérant la propagation. Il existe, en effet, deux types de fonctions géodésiques :

• fonctions géodésiques avec le nombre d’itérations donné, • fonctions géodésiques itérant jusqu’à l’idempotence.

Pour les premières, le nombre d’itérations est connu d’avance est la construction de l’algorithme peut s’appuyer sur ce fait. Pour les deuxièmes, nous devons tester l’arrêt de la propagation (test d’idempotence de la fonction géodésique sur une image donnée). Ce test compare les valeurs de l’image d’entrée (avant

l’emploi de l’opération géodésique) et l’image de sortie (après avoir effectué cette opération géodésique). Si elles sont les mêmes, nous arrêtons la propagation car nous avons atteint l’état d’idempotence.

Ce test est assez coûteux en terme d’opérations arithmétiques car il doit effectuer une comparaison pixel par pixel et employer ensuite une fonction de réduction qui, pour l’image toute entière, ne fournit qu’une seule valeur reflétant l’identité / non-identité des deux images. Cette valeur peut être binaire ou pas. En termes de flux de données, nous effectuons d’abord l’opération d’application d’une fonction (comparaison) sur tous les éléments du stream qui est suivie par la réduction de ce stream à une seule valeur.

Pour diminuer l’impact de ce test de la fin de la propagation, plusieurs approches sont à prévoir pour son implémentation, dépendantes surtout du caractère de notre image. Nous pouvons tester la propagation à chaque itération, ce qui peut s’avérer coûteux. Mais nous pouvons envisager d’utiliser la propriété d’idempotence qui est atteinte à la fin de la propagation. Ainsi, nous savons a priori que chaque itération supplémentaire ne changera pas les résultats. En se basant sur cette propriété, nous pouvons construire un algorithme qui ne teste pas la fin de la propagation après chaque itération mais qu’après un certain nombre d’itérations.

5.3.3 Note sur le travail géodésique avec les superpixels

L’approche des superpixels est également utilisable pour les algorithmes géodésiques de la morpho- logie mathématique avec certaines modification de la structure des skeletons algorithmiques. En effet, la fonction du parcours de l’image pour les superpixels (qui est du type StreamizeSP) nous retourne le stream des index d’ancrage des superpixels.

Les valeurs des index d’ancrage issues de ce stream seront utilisées par les fonctions qui extraient le voisinage large d’un superpixels (fonctions du type ExtrNgbSP) mais également par les fonction d’échantillonnage d’un superpixels (fonctions du type SampFncSP) qui nous retourne une liste des valeurs d’un superpixel.

La construction du skeleton algorithmique ngbGAlgoGenSP pour le travail géodésique sur le super- pixels, présenté par l’algorithme 5.10, s’appuie sur le skeleton algorithmique de base (ngbGAlgoGen) dont elle utilise le corps. Il s’agit, en effet de la spécialisation de cette fonction pour le travail avec le superpixels, comme nous pouvons le voir sur la signature de type dans l’algorithme 5.10.

Algorithme 5.10 : ngbGAlgoGen Skeleton algorithmique généralisé de travail géodésique sur le voisinage par l’approche des superpixles

1 ngbGAlgoGenSP :: [ StreamizeSP α ] → ( [ ExtrNgbSP α ] , [ SampFncSP α]) → [ NgbGOpSP α ]

2 → ( Ar ( I , I ) α, Ar ( I , I ) α) → Ar ( I , I ) α

3 ngbGAlgoGenSP = ngbGAlgoGen

5.3.4 Travail SIMD avec les vecteurs paquetés

Les opérations géodésiques pour les vecteurs paquetés sont directement dérivables en tant que spé- cialisation de fonctionnement du skeleton géodésique ngbGAlgoGen (présenté par l’algorithme 5.9) car ce dernier est assez général pour englober également le travail avec les vecteurs paquetés. L’algo- rithme 5.11, qui définit le skeleton algorithmique ngbGAlgoGenSIMD, nous présente la forme formelle de cette spécialisation.

Le travail SIMD pour les superpixels est également possible. La manière dont on construirait un skeleton algorithmique qui travaillerait avec les superpixels composés des vecteurs paquetés et avec des superpixels de l’image du masque est intelligible à partir de la description que nous avons faite dans cette section.

Algorithme 5.11 : ngbGAlgoGenSIMD Skeleton algorithmique généralisé de travail géodésique SIMD sur le voisinage

1 ngbGAlgoGenSIMD :: [ Streamize ( PVec I α) ] → [ ExtrNgb ( PVec I α) ] → [ NgbGOp ( PVec I α) ]

2 → ( Ar ( I , I ) ( PVec I α), Ar ( I , I ) ( PVec I α))

3 → Ar ( I , I ) ( PVec I α)

4 ngbGAlgoGenSIMD = ngbGAlgoGen