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...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Algorithmes</strong> <strong>de</strong> <strong>la</strong> <strong>morphologie</strong> <strong>mathématique</strong> <strong>pour</strong> les architectures orientées fluxJaromír BRAMBORNous définissons également une fonction commune, mkAr2DPVec qui prend un paramètre <strong>de</strong> plusqui nous sert comme clé dans le choix <strong>de</strong> soit <strong>la</strong> fonction mkAr2DPVecByFst ou mkAr2DPVecBySnd :mkAr2DPVec :: [Char] → I → Ar ( I , I ) α → Ar ( I , I ) (PVec I α)mkAr2DPVec how n ar | how == "Fst" = mkAr2DPVecByFst n ar| how == "Snd" = mkAr2DPVecBySnd n ar4.4.3.3 Dépaquetage <strong>de</strong>s arraysNous appelons le dépaquetage d’un array le processus d’obtention d’un array composé <strong>de</strong>s éléments<strong>de</strong> base à partir d’un array dont les éléments sont <strong>de</strong>s vecteurs paquetés. Il est possible <strong>de</strong> définir lesfonctions <strong>de</strong> dépaquetage qui auront <strong>de</strong>s fonctionnalités inverses à celles que l’on vient <strong>de</strong> définir <strong>pour</strong>le paquetage. Leurs définitions sont intelligibles et nous ne présentons que leurs i<strong>de</strong>ntificateurs et lessignatures <strong>de</strong> type.La fonction mkAr1DFromAr1DPVec définit <strong>la</strong> fonction <strong>de</strong> dépaquetage <strong>pour</strong> un array 1D et sa signature<strong>de</strong> type est <strong>la</strong> suivante :mkAr1DFromAr1DPVec:: Ar I (PVec I α) → Ar I αLes fonctions mkAr2DFromAr2DPVecByFst et mkAr2DFromAr2DPVecBySnd définissent le dépaquetaged’un array 2D dans le sens <strong>de</strong> <strong>la</strong> première/<strong>de</strong>uxième coordonnée, respectivement. La fonctionmkAr2DFromAr2DPVec les englobe dans une seule qui choisit entre <strong>la</strong> première/<strong>de</strong>uxième fonction selon<strong>la</strong> valeur correspondante ”Fst” ou ”Snd” <strong>de</strong> son premier paramètre textuel (donnée par [Char]). Voicileurs signatures <strong>de</strong> type :mkAr2DFromAr2DPVecByFst :: Ar ( I , I ) (PVec I α) → Ar ( I , I ) αmkAr2DFromAr2DPVecBySnd :: Ar ( I , I ) (PVec I α) → Ar ( I , I ) αmkAr2DFromAr2DPVec :: [Char] → Ar ( I , I ) (PVec I α) → Ar ( I , I ) α4.4.4 Sens du parcours, passage d’un array à un flux <strong>de</strong> données et vice versa4.4.4.1 Notion du sens du parcours et <strong>de</strong> l’extraction <strong>de</strong>s élémentsLe passage d’une structure statique <strong>de</strong> données tel qu’un vecteur ou array 2D à une structure utiliséedynamiquement <strong>pour</strong> le traitement en flux nécessite le choix du sens <strong>de</strong> parcours.Pour nos besoins, nous allons comprendre sous le terme parcours d’un array une séquence <strong>de</strong>s in<strong>de</strong>xqui désignent les éléments d’un array. Nous parlons ainsi d’un stream <strong>de</strong>s in<strong>de</strong>x et ce stream peut, généralement,ne désigner qu’un sous-ensemble <strong>de</strong>s éléments <strong>de</strong> cet array. Si les in<strong>de</strong>x <strong>de</strong> ce stream désignenttous les éléments d’un array, nous parlons d’un parcours complet d’un array.Une fois le parcours défini, le passage d’un array à un flux <strong>de</strong> données sera obtenu par l’application<strong>de</strong> l’opération in<strong>de</strong>xation <strong>de</strong>s éléments, exprimée par <strong>la</strong> fonction ! du Haskell, sur le stream <strong>de</strong>s in<strong>de</strong>x. Àcette occasion, nous allons parler d’extraction <strong>de</strong>s éléments ou également d’échantillonnage d’un array.Ainsi perçu, l’accès à <strong>la</strong> mémoire qui est nécessaire <strong>pour</strong> l’obtention <strong>de</strong>s éléments d’un array estexécuté en tant qu’opération sur le stream et <strong>la</strong> fonction ! d’échantillonnage <strong>de</strong> l’image <strong>de</strong>vient, en effet,le kernel du calcul sur les flux <strong>de</strong> données. Nous pouvons le décrire dans le formalisme fonctionnel parl’expression suivante :(map (ar ! ) ) $ (strm ar)où ar est l’array d’entrée, strm désigne <strong>la</strong> fonction <strong>de</strong> parcours qui crée un stream <strong>de</strong>s in<strong>de</strong>x à partir<strong>de</strong> l’array ar. Elle est suivie par l’application <strong>de</strong> <strong>la</strong> fonction map sur ce stream qui se charge d’exécuterl’in<strong>de</strong>xation <strong>de</strong> l’array ar! sur chacun <strong>de</strong>s in<strong>de</strong>x <strong>de</strong> ce stream. La figure 4.5 illustre cette situation. Leparcours <strong>de</strong> l’image y est représenté par le bloc <strong>de</strong> <strong>la</strong> fonction génératrice <strong>de</strong>s in<strong>de</strong>x qui est succédé parle bloc d’extraction <strong>de</strong>s éléments <strong>de</strong> <strong>la</strong> mémoire.Cette modélisation <strong>mathématique</strong> que nous introduisons ici et qui perçoit l’accès à <strong>la</strong> mémoirecomme opération sur les streams est très intéressante d’un point <strong>de</strong> vue pratique. En tant qu’opération70

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

Saved successfully!

Ooh no, something went wrong!