12.07.2015 Views

Algorithmes de la morphologie mathématique pour - Pastel - HAL

Algorithmes de la morphologie mathématique pour - Pastel - HAL

Algorithmes de la morphologie mathématique pour - Pastel - HAL

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Jaromír BRAMBOR7.3. SKELETON ALGORITHMIQUE DE LA PROPAGATION SIMD EN 4-VOISINAGE(a) Image du masque "*msk" <strong>pour</strong> <strong>la</strong>propagation correspondant à <strong>la</strong> fonction f <strong>de</strong>référence <strong>de</strong>s nivellements(b) Image <strong>de</strong>s valeurs à propager "*val"correspondant à <strong>la</strong> fonction m du marquer <strong>de</strong>snivellementsFIG. 7.9 : Les images d’entrée aux fonctions <strong>de</strong> sur- et sous-nivellements et l’exemple <strong>de</strong> leur contenu.Une itération <strong>de</strong> <strong>la</strong>mbda-sous-nivellements est définie par <strong>la</strong> fonction lolevelSQR4 :lolevelSQR4 :: [Char] → I → I → Ar ( I , I ) (α,α) → Ar ( I , I ) (α,α)lolevelSQR4 axe pvecsz lmb ar = propAlgSQR4 axe pvecsz( λ (vmsk,vval) (emsk,eval) → maxSIMD emsk (minSIMD (vval+lmb) eval) )aroù le terme λ définit le kernel <strong>de</strong> <strong>la</strong> propagation directionnelle et le paramètre lmb définit <strong>la</strong> pente <strong>de</strong>s<strong>la</strong>mbda-sous-nivellements. En spécifiant sa valeur à 0, nous obtenons les sous-nivellements p<strong>la</strong>ts. Lasignification <strong>de</strong>s autres paramètres <strong>de</strong> cette fonction est i<strong>de</strong>ntique à celle <strong>de</strong>s paramètres <strong>pour</strong> <strong>la</strong> fonctiondistance (cf. 7.3.4) : axe définit l’axe <strong>de</strong> stockage <strong>de</strong>s données dans <strong>la</strong> mémoire, pvecsz est le nombre<strong>de</strong>s éléments que nous pouvons traiter en même temps par les instructions SIMD <strong>de</strong> notre architecturemultimédia et ar est l’array d’entrée composé <strong>de</strong>s tuples (masque, valeur).Par analogie, nous définissons une itération <strong>de</strong>s <strong>la</strong>mbda-sur-nivellements par <strong>la</strong> fonction hilevelSQR4 :hilevelSQR4 :: [Char] → I → I → Ar ( I , I ) (α,α)→ Ar ( I , I ) (α,α)hilevelSQR4 axe pvecsz lmb ar = propAlgSQR4 axe pvecsz( λ (vmsk,vval) (emsk,eval) → minSIMD emsk (maxSIMD (vval−lmb) eval) )aroù le seul changement par rapport à <strong>la</strong> fonction <strong>de</strong>s <strong>la</strong>mbda-sous-nivellements est dans <strong>la</strong> définition duterme λ définissant le kernel <strong>de</strong> <strong>la</strong> propagation directionnelle.7.3.5.4 Algorithme <strong>pour</strong> une itération <strong>de</strong>s nivellementsComme nous l’avons déjà expliqué dans <strong>la</strong> section 7.3.5.2, une itération <strong>de</strong>s nivellements (finaux)sera obtenue par <strong>la</strong> combinaison <strong>de</strong>s résultats d’une itération <strong>de</strong>s sur- et sous-nivellements (partiels)selon l’équation 7.3.La fonction levelSQR4 définit cette composition :levelSQR4 :: [Char] → I → I → Ar ( I , I ) (α,α)→ Ar ( I , I ) (α,α)levelSQR4 axe pvecsz lmb ar =(mkAr2DFromAr2DPVec axe)◦ listArray (bounds $ lo)map2 ( λ (lomsk,loval) (himsk,hival) → cndmoveSIMD (testSIMD lomsk ( ≥ ) loval ) loval hival )(elems◦ (mkAr2DPVec axe pvecsz)$lo)(elems◦ (mkAr2DPVec axe pvecsz)$hi )wherelo = (lolevelSQR4 axe pvecsz lmb)$arhi = (hilevelSQR4 axe pvecsz lmb)$ar157

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!