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 ALGORITHMIQUESsndsndsndfstfstfst(a) array 2D avantdécoupage(b) découpage par <strong>la</strong>direction <strong>de</strong> <strong>la</strong> premièrecoordonnée (fst)(c) découpage par <strong>la</strong>direction <strong>de</strong> <strong>la</strong> <strong>de</strong>uxièmecoordonnée (snd)FIG. 4.4 : Exemple <strong>de</strong> vectorisation d’un array 2D <strong>pour</strong> différentes versions <strong>de</strong> découpage et <strong>la</strong> taille du vecteurpaqueté n = 2sens différent. Nous montrerons les algorithmes implémentant cette approche dans le chapitre 6 dédié à<strong>la</strong> permutation <strong>de</strong>s arrays, page 127.Nous allons présenter <strong>de</strong>ux possibilités <strong>de</strong> vectorisation d’un array 2D : le paquetage par l’axe <strong>de</strong><strong>la</strong> première coordonnée défini par <strong>la</strong> fonction mkAr2DPVecByFst et le paquetage dual par l’axe <strong>de</strong> <strong>la</strong><strong>de</strong>uxième coordonnée par <strong>la</strong> fonction mkAr2DPVecBySnd. Pour présenter une définition générique etindépendante d’un système <strong>de</strong> coordonnées dans l’image, nous ne parlons pas <strong>de</strong>s coordonnées x ou yd’une image mais nous utilisons <strong>la</strong> notation matricielle et parlons <strong>de</strong>s coordonnées première et <strong>de</strong>uxième,exprimées par les suffixes Fst ou Snd respectivement.D’un point <strong>de</strong> vue pratique, ces définitions ne correspon<strong>de</strong>nt pas à un algorithme concret. Il s’agit,en effet, <strong>de</strong> <strong>la</strong> formalisation du changement <strong>de</strong> <strong>la</strong> perception <strong>de</strong>s données stockées dans <strong>la</strong> mémoire et duchangement <strong>de</strong> leur mo<strong>de</strong> d’adressage. On peut dire que ces définitions correspon<strong>de</strong>nt au changementdu type <strong>de</strong>s données à partir d’un array du type Ar (I, I) α à un array du type Ar (I, I) (PVec I α) dontles éléments sont les vecteurs paquetés, exactement comme c’est inscrit dans <strong>la</strong> signature <strong>de</strong> type <strong>de</strong> cesfonctions.La fonction mkAr2DPVecByFst définit <strong>la</strong> vectorisation par l’axe <strong>de</strong> <strong>la</strong> première coordonnée et <strong>la</strong>manière dont l’array est découpé en données paquetées est illustrée sur <strong>la</strong> fig. 4.4(b)mkAr2DPVecByFst :: I → Ar ( I , I ) α → Ar ( I , I ) (PVec I α)mkAr2DPVecByFstn ar = array bndsnew[ ( ( i , j ) , pvec (1,n) [ (k,ar ! ( flo + ( i−flo) ∗ n+(k−1),j)) | k ← [1 .. n] ]) | ( i , j ) ← range bndsnew]where( ( flo ,slo) , ( fhi ,shi ) ) = bounds $ arbndsnew= ( ( flo ,slo) , ( flo −1+(div ( fhi −flo+1) n), shi ) )Cette fonction crée un nouvel array par <strong>la</strong> fonction array. Cet array a une dimension réduite dans l’axe<strong>de</strong> paquetage. Les éléments <strong>de</strong> cet array sont les vecteurs paquetés PVec, créés par <strong>la</strong> fonction pvec. Lafonction bounds est utilisée <strong>pour</strong> obtenir les limites <strong>de</strong> l’array d’entrée ar. La variable bndsnew détientles nouvelles limites <strong>de</strong> l’array <strong>de</strong> sortie.La fonction simi<strong>la</strong>ire, mkAr2DPVecBySnd, définit <strong>la</strong> vectorisation par l’axe <strong>de</strong> <strong>la</strong> <strong>de</strong>uxième coordonnéeet <strong>la</strong> manière <strong>de</strong> découper est illustrée sur <strong>la</strong> fig. 4.4(c)mkAr2DPVecBySnd :: I → Ar ( I , I ) α → Ar ( I , I ) (PVec I α)mkAr2DPVecBySnd n ar = array bndsnew[ ( ( i , j ) , pvec (1,n) [ (k,ar ! ( i ,slo+ ( j −slo) ∗ n+(k−1))) | k ← [1 .. n] ]) | ( i , j ) ← range bndsnew]where( ( flo ,slo) , ( fhi ,shi ) ) = bounds $ arbndsnew= ( ( flo ,slo) , ( fhi , slo−1+(div (shi−slo+1) n)) )69

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

Saved successfully!

Ooh no, something went wrong!