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 BRAMBOR5.1. ALGORITHMES ÉLÉMENTAIRES POUR LES GPP5.1.1, page 99, en traitements plus spécifiques ou même en certain nombre <strong>de</strong>s traitements entièrementadaptés à un cas particulier. Ce skeleton est représenté par <strong>la</strong> fonction ngbAlgoGen dans l’algorithme5.3.Algorithme 5.3 : ngbAlgoGen, skeleton algorithmique généralisé <strong>de</strong> travail sur le voisinage1 ngbAlgoGen :: [Streamize α] → [ExtrNgb α] → [ NgbOp α] → Ar ( I , I ) α → Ar ( I , I ) α2 ngbAlgoGen strms extrs ops ar = array (bounds ar) (computestrms extrs ops ar)3 where4 compute [ ] [ ] [ ] ar = [ ]5 compute (s:ss) (e:es) (o:os) ar =6 ( (zip (s ar))7 ◦ (map o)8 ◦ (map (e ar))9 $ (s ar)10 )11 +(computess es os ar)Son fonctionnement exact suit le principe <strong>de</strong> fonctionnement du skeleton ngbAlgoIB (cf. page 104)qui divisait le traitement en <strong>de</strong>ux parties. Le skeleton que nous présentons à cette p<strong>la</strong>ce é<strong>la</strong>rgit les possibilités<strong>de</strong> traitement spécifique et <strong>pour</strong> assurer ce<strong>la</strong>, il travaille avec les listes <strong>de</strong>s fonctions <strong>de</strong> parcours<strong>de</strong> l’image, d’extraction du voisinage et <strong>de</strong>s kernels assurant l’opération sur le voisinage.La division <strong>de</strong> l’image en zones est assurée par l’ensemble <strong>de</strong>s fonctions <strong>de</strong> parcours <strong>de</strong> l’imagestrms qui sont du type [Streamize α] et qui désignent ces zones par un stream <strong>de</strong>s in<strong>de</strong>x. Cette divisiona <strong>la</strong> notion <strong>de</strong> segmentation avec <strong>la</strong>quelle nous travaillons couramment en morphologique <strong>mathématique</strong>lors <strong>de</strong> traitement du contenu <strong>de</strong>s images. Ce qui est fractionné par <strong>la</strong> segmentation, c’est le domaine <strong>de</strong>l’image, c’est-à-dire l’ensemble <strong>de</strong>s in<strong>de</strong>x désignant les pixels dans l’image. Le critère <strong>de</strong> <strong>la</strong> segmentationque nous utilisons ici est l’uniformité du calcul à effectuer. Donc, nous cherchons <strong>de</strong>s zones où nouspouvons effectuer le traitement par <strong>la</strong> même fonction d’extraction du voisinage et le même kernel <strong>de</strong>réduction qui assurerait l’opération morphologique à l’échelle locale. Ainsi, nous posons les restrictionssur le fonctionnement <strong>de</strong> ces fonctions <strong>de</strong> parcours : nous exigeons une intersection vi<strong>de</strong> entre les zoneset nous exigeons que l’union <strong>de</strong> ces zones compose le domaine complet <strong>de</strong> l’image.Les fonctions d’extraction du voisinage qui sont appliquées spécifiquement dans chacune <strong>de</strong>s zonessont indiquées par <strong>la</strong> liste extrs qui est du type [ExtrNgb α] et les fonctions <strong>de</strong> l’opération sur le voisinagesont exprimées par <strong>la</strong> liste ops qui est du type [NgbOp α]. L’array d’entrée est spécifié par l’argumentar.Le corps <strong>de</strong> ce skeleton utilise, sur les lignes 6 à 9, une expression que nous connaissons déjà duskeleton <strong>de</strong> l’approche naïve, cf. l’algorithme 5.1, page 100, et <strong>de</strong> l’approche qui divisait le domaine<strong>de</strong> l’image en <strong>de</strong>ux zones, cf. l’algorithme 5.2, page 104. Mais il l’encapsule ici dans <strong>la</strong> fonction internecompute qui traite les trois streams <strong>de</strong>s fonctions d’une façon récursive et pré-compose le stream résultant<strong>de</strong>s tuples (in<strong>de</strong>x, valeur) par <strong>la</strong> fonction <strong>de</strong> <strong>la</strong> composition <strong>de</strong>s stream + (ligne 11). Ce stream <strong>de</strong>srésultats partiels sert à <strong>la</strong> fin du traitement à <strong>la</strong> composition <strong>de</strong> l’array <strong>de</strong> sortie par <strong>la</strong> fonction array sur<strong>la</strong> ligne 2. Notons que l’expression sur <strong>la</strong> ligne 4 :compute [ ] [ ] [ ] ar = [ ]désigne <strong>la</strong> fin <strong>de</strong> <strong>la</strong> récursion <strong>de</strong> <strong>la</strong> fonction compute <strong>pour</strong> le cas spécial <strong>de</strong>s arguments où les trois streamsd’entrée sont vi<strong>de</strong>s.La figure 5.8 nous montre l’interprétation graphique du fonctionnement <strong>de</strong> ce skeleton.107

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

Saved successfully!

Ooh no, something went wrong!