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 BRAMBOR<strong>pour</strong> chaque pixel tous les tests <strong>de</strong> dépassement <strong>de</strong> bord <strong>de</strong> l’image ou <strong>de</strong> parité <strong>de</strong> ligne/colonne. Leterme naïve n’a pas un sens péjoratif et désigne <strong>la</strong> métho<strong>de</strong> <strong>la</strong> plus simple possible qui peut égalementêtre <strong>la</strong> plus convenable dans <strong>la</strong> mesure où nous voulions un outil générique et rapi<strong>de</strong>ment utilisable etnous ne nous focalisions pas prioritairement sur les performances mais plutôt sur le fonctionnement.5.1.1.1 Skeleton algorithmique ngbAlgo <strong>de</strong> l’approche naïve au travail sur le voisinageNous commençons notre explication par <strong>la</strong> présentation du skeleton algorithmique dédié à <strong>la</strong> construction<strong>de</strong>s algorithmes concrets travail<strong>la</strong>nt sur le voisinage. Il se décompose en quatre phases. Dans <strong>la</strong> première,nous passons d’un array 2D à un stream <strong>de</strong>s in<strong>de</strong>x ; dans <strong>la</strong> <strong>de</strong>uxième, nous extrayons le voisinagelocal, dans <strong>la</strong> troisième nous appliquons le kernel travail<strong>la</strong>nt sur le voisinage qui désigne l’opérationmorphologique et dans <strong>la</strong> quatrième et <strong>de</strong>rnière phase, nous reconstituons l’array <strong>de</strong> sortie à partir dustream.Algorithme 5.1 : ngbAlgo, skeleton algorithmique <strong>de</strong> l’approche naïve <strong>pour</strong> le travail sur le voisinage1 ngbAlgo :: Streamize α → ExtrNgb α → NgbOp α → Ar ( I , I ) α → Ar ( I , I ) α2 ngbAlgo strm extr op ar = array (bounds ar)3 ( (zip ixs )4 ◦ (map op)5 ◦ (map (extr ar))6 $ ixs )7 where ixs = strm$arL’algorithme 5.1 présente, par <strong>la</strong> fonction ngbAlgo, <strong>la</strong> structure <strong>de</strong> ce skeleton. Il prend quatre argumentsdont le premier, strm qui est du type Streamize α, désigne <strong>la</strong> manière dont on parcourt l’image,autrement dit, il s’agit d’une fonction qui retourne un stream <strong>de</strong>s in<strong>de</strong>x dans un ordre choisi. Le <strong>de</strong>uxième,extr qui est du type ExtrNgb α, désigne <strong>la</strong> fonction d’extraction <strong>de</strong>s éléments du voisinage. Cet argumentest puissant car très général et nous expliquerons plus tard les éventualités <strong>de</strong> son utilisation. Letroisième argument, op qui est du type NgbOp α, désigne <strong>la</strong> fonction <strong>de</strong> l’opération locale sur le voisinageet correspond à une opération morphologique que nous voulons effectuer. Le quatrième paramètre,ar, désigne l’array d’entrée qui contient notre image à traiter.boundsar(Arrayd’entrée)Streamize ExtrNgb NgbOp ziparrayArray<strong>de</strong> sortieCréation <strong>de</strong> l’array <strong>de</strong> sortieFIG. 5.1 : Graphe <strong>de</strong> flux exprimant le fonctionnement du skeleton algorithmique ngbAlgoLe fonctionnement <strong>de</strong> ce skeleton est assez simple et nous le présentons sur <strong>la</strong> fig. 5.1 en tant quediagramme <strong>de</strong> flux. Tout d’abord (ligne 7), nous obtenons un stream <strong>de</strong>s in<strong>de</strong>x par l’application <strong>de</strong> <strong>la</strong>fonction strm sur l’array d’entrée ar. Vu que le sens <strong>de</strong> parcours n’est pas substantiel dans les traitementsdéfinis par ce skeleton, <strong>la</strong> seule obligation posée sur <strong>la</strong> fonction strm est qu’elle doit parcourir toutel’image, l’ordonnancement exact <strong>de</strong>s in<strong>de</strong>x dans le stream n’est pas important.Sur chaque élément <strong>de</strong> ce stream (ligne 6), nous appliquons sur <strong>la</strong> ligne 5 (en utilisant <strong>la</strong> fonctionmap) <strong>la</strong> fonction extr qui représente le kernel d’extraction du voisinage et qui retourne, <strong>pour</strong> un in<strong>de</strong>xdonné, une liste <strong>de</strong>s éléments qui constituent le voisinage d’un in<strong>de</strong>x donné dans l’array ar. Il faut préciserque dans <strong>la</strong> <strong>morphologie</strong> <strong>mathématique</strong>, <strong>la</strong> structure <strong>de</strong> cette liste est définie par l’élément structurant,100

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

Saved successfully!

Ooh no, something went wrong!