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.

Jaromír BRAMBOR4.4. PRIMITIVES DU CALCUL COMME SKELETONS ALGORITHMIQUESstreamAr2DSP :: [Char] → I → I → Ar ( I , I ) α → [ ( I , I ) ]streamAr2DSP how m n ar| how == "FWFst" = [ ( flo +m∗ i ,slo+n ∗ j ) | j ←[0 .. smax], i←[0 .. fmax] ]| how == "FWSnd" = [ ( flo +m∗ i ,slo+n ∗ j ) | i←[0 .. fmax], j ←[0 .. smax]]| how == "BWFst" = [ ( fhi −m∗i,shi−n∗j ) | j ←[0 .. smax], i←[0 .. fmax] ]| how == "BWSnd" = [ ( fhi −m∗i,shi−n∗j ) | i←[0 .. fmax], j ←[0 .. smax]]where( ( flo ,slo) , ( fhi ,shi ) ) = bounds $ ar ;fmax = div (rangeSize(flo,fhi)−1) msmax = div (rangeSize(slo,shi)−1) nLe premier argument est <strong>la</strong> clé avec <strong>la</strong>quelle nous désignons <strong>la</strong> fonctionnalité exacte <strong>de</strong> cette fonction.Le <strong>de</strong>uxième / troisième argument <strong>de</strong> cette fonction désigne les dimensions d’un superpixel dans <strong>la</strong>première/<strong>de</strong>uxième coordonnée. Le quatrième paramètre est l’array d’entrée que nous voulons parcourir.Nous définissons le type StreamizeSP qui va désigner <strong>de</strong>s fonctions <strong>pour</strong> le passage d’un array à unstream <strong>de</strong>s in<strong>de</strong>x d’ancrage <strong>de</strong>s superpixels. La signature <strong>de</strong> ce type est, en effet, i<strong>de</strong>ntique aux fonctionsdésignées par le type Streamize. Tandis que les fonction étant du type Streamize travaillent avec lesin<strong>de</strong>x ordinaires, le type StreamizeSP porte, <strong>de</strong> plus, une information syntactique du type <strong>de</strong> retour[(I, I)], car nous le définissons comme <strong>la</strong> liste <strong>de</strong>s in<strong>de</strong>x d’ancrage <strong>de</strong>s superpixels :type StreamizeSP α = Ar ( I , I ) α → [ ( I , I ) ]Ainsi, <strong>la</strong> signature <strong>de</strong> type <strong>de</strong> <strong>la</strong> fonction streamAr2DSP que nous venons <strong>de</strong> présenter :streamAr2DSP :: [Char] → I → I → Ar ( I , I ) α → [ ( I , I ) ]peut être récrite comme :streamAr2DSP :: [Char] → I → I → StreamizeSPαAyant obtenu un stream <strong>de</strong>s in<strong>de</strong>x d’ancrage par <strong>la</strong> fonction streamAr2DSP, nous avons encorebesoin <strong>de</strong>s fonctions qui extrairaient à partir <strong>de</strong> ce stream les éléments <strong>de</strong> bases <strong>de</strong> l’image qui composentles superpixels correspondants. Ces fonction seront du type SampFncSP :SampFncSPα ::( Ix β) ⇒ Ar β α → β → [α]et elle diffèrent <strong>de</strong>s versions c<strong>la</strong>ssiques (non-superpixeliques) <strong>de</strong>s fonctions d’échantillonnage dans letype <strong>de</strong> retours qui est dans ce cas une liste <strong>de</strong>s éléments.Ce procédé est assuré, dans <strong>la</strong> version générale, par <strong>la</strong> fonction sampSPGen. Elle va nous retourner,<strong>pour</strong> un in<strong>de</strong>x d’ancrage donné, <strong>la</strong> liste <strong>de</strong> tous les éléments <strong>de</strong> l’array appartenant au superpixel qui estdésigné par cet in<strong>de</strong>x.sampSPGen :: I → I → Ar ( I , I ) α → ( I , I ) → [α]sampSPGen m n ar ( ixf ,ixs ) = map (ar ! ) ( range((ixf ,ixs ) , ( ixf +m−1, ixs+n−1)) )Notons que <strong>la</strong> signature <strong>de</strong> type <strong>de</strong> cette fonction est compatible avec celle qui utilise le type SampFncSP :sampSPGen :: I → I → SampFncSPαet nous pouvons l’utiliser, après l’application partielle <strong>de</strong> ses <strong>de</strong>ux premiers paramètres, comme <strong>la</strong> fonctiond’entrée dans les algorithmes exigeants les fonction du type SampFncSP.Nous utiliserons encore une autre catégorie <strong>de</strong> fonctions qui est connexe aux superpixels et qui serautilisée lors <strong>de</strong> <strong>la</strong> recomposition <strong>de</strong> l’array <strong>de</strong> sortie. Il s’agit <strong>de</strong>s fonctions qui, à partir d’un tuple composé<strong>de</strong> l’in<strong>de</strong>x d’ancrage et <strong>de</strong> <strong>la</strong> liste <strong>de</strong>s éléments résultants d’un superpixel, créent <strong>la</strong> liste <strong>de</strong>s tuples(in<strong>de</strong>x, élément). Cette <strong>de</strong>rnière liste sera utilisée dans les algorithmes comme un moyen <strong>pour</strong> pouvoirrecomposer le stream d’entrée <strong>de</strong> <strong>la</strong> fonction standard array <strong>de</strong> Haskell afin <strong>de</strong> créer l’array <strong>de</strong> sortie.Ces fonctions seront du type ZipSP :type ZipSP α = ( ( I , I ) , [α]) → [ ( ( I , I ) , α)]La fonction qui sera <strong>de</strong> cette catégorie, qui complète le passage au flux <strong>de</strong> superpixels, comme définipar <strong>la</strong> fonction StreamAr2DSP et leur extraction, comme défini par <strong>la</strong> fonction sampSPGen, c’est <strong>la</strong>fonction zipSPGen75

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

Saved successfully!

Ooh no, something went wrong!