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 BRAMBOR4.4.4.3 Fonctions <strong>de</strong> parcours d’un arrayCommençons notre explication par l’introduction <strong>de</strong> <strong>la</strong> fonction concrète <strong>de</strong> parcours d’un array 1D.La fonction streamAr1D définit un skeleton algorithmique qui crée un stream <strong>de</strong>s in<strong>de</strong>x à partir d’unarray 1D. La valeur passée par son paramètre how détermine le sens du parcours que nous voulonsobtenir, <strong>la</strong> valeur ”FW” correspond au sens au-<strong>de</strong>vant, <strong>la</strong> valeur ”BW” correspond au sens en arrière. Lafig. 4.6 illustre ces <strong>de</strong>ux cas sur un vecteur <strong>de</strong> <strong>la</strong> taille 3.streamAr1D :: [Char] → Ar I α → [ I ]streamAr1D how ar| how == "FW" = [ (lo+ i ) | i ← [0 .. size−1]]| how == "BW"= [ (hi−i) | i ← [0 .. size−1]]where(lo ,hi ) = bounds $ ar ; size = rangeSize(lo,hi)1,1 1,2 1,3 (1,3) (1,2) (1,1)(a) sens au-<strong>de</strong>vant, streamAr1D avec "FW"1,1 1,2 1,3 (1,1) (1,2) (1,3)(b) sens en arrière, streamAr1D avec "BW"FIG. 4.6 : Choix du parcours <strong>de</strong> l’image <strong>pour</strong> un array <strong>de</strong> 1DTandis que <strong>pour</strong> les structures 1D le choix du sens <strong>de</strong> parcours est simple et nous utilisons soitle parcours au-<strong>de</strong>vant, soit le parcours en arrière, <strong>pour</strong> les structures 2D nous avons beaucoup plus <strong>de</strong>possibilités et nous décrivons celles qui sont utilisées le plus souvent. Il n’est pas difficile, en cas <strong>de</strong>besoin, d’en définir davantage qui seraient appropriées à un traitement particulier.Mais tout d’abord, nous définissons un type Streamize que nous allons utiliser <strong>pour</strong> désigner unefonction <strong>de</strong> parcours d’un array <strong>de</strong> 2D dans les signatures <strong>de</strong> types <strong>de</strong> nos algorithmes :type Streamize α = Ar ( I , I ) α → [ ( I , I ) ]Il s’agit <strong>de</strong>s fonctions qui prennent un array 2D comme argument et qui nous retournent un stream <strong>de</strong>sin<strong>de</strong>x.Nous définissons un skeleton <strong>pour</strong> <strong>la</strong> création d’un stream <strong>de</strong>s in<strong>de</strong>x à partir d’un array 2D par <strong>la</strong>fonction streamAr2D qui définit les parcours bien connus d’une image en sens vidéo et en sens antividéo.streamAr2D :: [Char] → Ar ( I , I ) α → [ ( I , I ) ]streamAr2D how ar| how == "FWFst" = [ ( flo + i ,slo+ j ) | j ←[0 .. smax], i←[0 .. fmax] ]| how == "FWSnd" = [ ( flo + i ,slo+ j ) | i←[0 .. fmax], j ←[0 .. smax]]| how == "BWFst" = [ ( fhi −i,shi−j) | j ←[0 .. smax], i←[0 .. fmax] ]| how == "BWSnd" = [ ( fhi −i,shi−j) | i←[0 .. fmax], j ←[0 .. smax]]where( ( flo ,slo) , ( fhi ,shi ) ) = bounds $ ar ;fmax = rangeSize(flo,fhi)−1smax = rangeSize(slo,shi)−1Le type du parcours exact est déterminé par <strong>la</strong> valeur du paramètre how <strong>de</strong> cette fonction et correspond<strong>pour</strong> les valeurs ”FWFst” / ”FWSnd” aux sens au-<strong>de</strong>vant par <strong>la</strong> première / <strong>de</strong>uxième coordonnée,et <strong>pour</strong> les valeurs et ”BWFst” / ”BWSnd” aux sens en arrière par <strong>la</strong> première / <strong>de</strong>uxième coordonnée,respectivement.Notons que l’application partielle <strong>de</strong> cette fonction avec <strong>la</strong> paramètre how concret, e.g. :(streamAr2D$"FWFst")72

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

Saved successfully!

Ooh no, something went wrong!