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.

<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 BRAMBORDans notre approche fonctionnelle, les notions du voisinage et <strong>de</strong> l’élément structurant (transposéou non-transposé) sont très proches car les <strong>de</strong>ux sont exprimées par <strong>la</strong> même structure <strong>de</strong> données : <strong>la</strong>liste du Haskell. Dans les implémentations <strong>de</strong>s opérations morphologiques qui vont utiliser <strong>la</strong> fonctiond’extraction <strong>de</strong>s pixels, nous allons travailler avec les listes <strong>de</strong>s vecteurs <strong>de</strong> dép<strong>la</strong>cement. Ces listesper<strong>de</strong>nt l’information syntaxique et en les utilisant, nous n’allons pas faire une distinction explicite entreun élément structurant en sens <strong>la</strong>rge (transposé ou non-transposé) et entre le voisinage d’un pixel. Lesens exact <strong>de</strong> ce que cette liste représente sera donné par <strong>la</strong> définition <strong>de</strong> l’opération à effectuer.Ainsi, nous définissons le type Ngb <strong>pour</strong> pouvoir exprimer <strong>la</strong> liste <strong>de</strong> ce type.type Ngb = [ ( I , I ) ]Comme exemple <strong>de</strong>s définitions <strong>de</strong> ces listes, nous montrons <strong>la</strong> définition du voisinage <strong>de</strong> <strong>la</strong> grillecarrée 4-connexe, ngbSQR4 :ngbSQR4 = [ (0,0) , (0,1) , (1,0) , (0,−1), (−1,0)] :: Ngbet <strong>la</strong> manière dont nous dérivons l’ensemble <strong>de</strong>s voisins ngbSQR4WC à partir <strong>de</strong> ce voisinage :ngbSQR4WC = ngbSQR4\\[(0,0)] :: NgbLes listes <strong>de</strong> dép<strong>la</strong>cement utilisées sur <strong>la</strong> grille hexagonale (décalée par lignes) sont définies en sebasant sur une ligne donnée (ici <strong>la</strong> ligne avec un in<strong>de</strong>x pair) comme, par exemple :ngbSQR6 = [ (0,0) , (0,1) , (1,0) , (1,−1), (0,−1), (−1,−1), (−1,0)] :: NgbCe qui correspond au voisinage illustré sur <strong>la</strong> fig. 4.11(a). La forme <strong>pour</strong> le voisinage sur <strong>la</strong> ligne impaireest soit définie exactement <strong>pour</strong> <strong>la</strong> ligne impaire, soit déduite <strong>de</strong> l’élément structurant <strong>pour</strong> <strong>la</strong> ligne pairepar déca<strong>la</strong>ge <strong>de</strong>s in<strong>de</strong>x dans <strong>la</strong> fonction d’extraction du voisinage, comme nous le verrons dans <strong>la</strong> sectionsuivante.4.6.4 Extraction du voisinage4.6.4.1 Concrétisation <strong>de</strong>s in<strong>de</strong>x <strong>de</strong>s pixels désignés par l’élément structurantDans <strong>la</strong> suite, nous allons utiliser les fonctions <strong>pour</strong> l’obtention <strong>de</strong>s in<strong>de</strong>x concrets constituant levoisinage local d’un élément. Les in<strong>de</strong>x ne seront pas restreints sur le domaine <strong>de</strong> l’image, c’est-à-dire,il peuvent désigner un in<strong>de</strong>x au-<strong>de</strong>là du domaine <strong>de</strong> l’image.Ces fonction seront du type SpecNgb :type SpecNgb = Ngb → ( I , I ) → [ ( I , I ) ]qui vont nous livrer, en se basant sur <strong>la</strong> liste <strong>de</strong>s dép<strong>la</strong>cement re<strong>la</strong>tifs et <strong>pour</strong> une position dans l’imageconcrète, (I, I) <strong>la</strong> liste <strong>de</strong>s in<strong>de</strong>x <strong>de</strong> dép<strong>la</strong>cement concrets.Nous définissons <strong>la</strong> fonction specNgbSQR qui, étant spécifique <strong>pour</strong> <strong>la</strong> grille carrée, prend <strong>la</strong> liste<strong>de</strong>s in<strong>de</strong>x <strong>de</strong> dép<strong>la</strong>cement ngbs et qui, <strong>pour</strong> un in<strong>de</strong>x d’un élément donnée (x, y), nous retourne les in<strong>de</strong>xspécifiques <strong>de</strong>s voisins <strong>de</strong> ce pixel ou <strong>de</strong>s éléments désignés par l’élément structurant <strong>de</strong> ce pixel :specNgbSQR :: SpecNgbspecNgbSQR ngbs (x ,y) = map ( λ (dx,dy) → (x+dx, y+dy)) ngbsDe <strong>la</strong> même manière, nous pouvons définir d’autres fonctions <strong>pour</strong> d’autres grilles. Pour illustrer <strong>la</strong>construction d’une telle fonction <strong>pour</strong> <strong>la</strong> grille hexagonale décalée par lignes (parallèlement à <strong>la</strong> <strong>de</strong>uxièmecoordonnée), nous présentons <strong>la</strong> définition <strong>de</strong> <strong>la</strong> fonction specNgbHEXR qui est plus complexe :specNgbHEXR :: SpecNgbspecNgbHEXR ngbs (x ,y) | even x = map ( λ (dx,dy) → (x+dx, y+dy)) ngbs| otherwise=fncngbs(x,y) [ ]wherefnc ( (dx,dy):ngbs) (x ,y) res | even dx = fnc ngbs (x ,y) ( (x+dx, y+dy):res)fnc ( (dx,dy):ngbs) (x ,y) res | odd dx = fnc ngbs (x ,y) ( (x+dx, y+dy+1):res)fnc [ ] _ res = res88

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

Saved successfully!

Ooh no, something went wrong!