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.

Jaromír BRAMBOR6.2. APPROCHE MACRO BLOCS AUX TRANSPOSITIONS ET ROTATIONSL’approche <strong>de</strong> travail par les macro blocs est générale et peut être implémentée sur n’importe quellearchitecture, parallèle ou séquentielle. Nous nous en servons sur les architectures SWAR et nous allonsen découvrir l’utilité pratique en exploitant les capacités SIMD, ce qui aboutira aux algorithmes plusrapi<strong>de</strong>s. Des performances encore meilleures peuvent être obtenues sur les architectures où nous pouvonsexploiter le parallélisme <strong>de</strong> données et <strong>de</strong> tâche, implicitement présent dans ces algorithmes, e.g. sur lesarchitectures multithread.6.2.1 Découpage <strong>de</strong>s arrays en macro blocs et leur recol<strong>la</strong>geCommençons notre explication du fonctionnement par macro blocs avec l’introduction formelle dudécoupage et du recol<strong>la</strong>ge <strong>de</strong>s arrays.Nous avons besoin <strong>de</strong> définir une fonction <strong>de</strong> découpage d’un array 2D en arrays 2D plus petits,tous ayant <strong>de</strong>s dimensions i<strong>de</strong>ntiques. La fonction arrayToMxNBlocs définit ce découpage. Elle prendcomme arguments un array et <strong>de</strong>ux paramètres, m et n, qui indiquent le nombre <strong>de</strong> macro blocs voulusdans l’array <strong>de</strong> sortie, respectivement dans <strong>la</strong> première et <strong>de</strong>uxième dimension. La fonction retourne unarray <strong>de</strong> dimensions (m, n) dont les éléments sont également <strong>de</strong>s arrays :arrayToMxNBlocs :: I → I → Ar ( I , I ) α → Ar ( I , I ) ( Ar ( I , I ) α)arrayToMxNBlocs m n ar =array ( (1,1) , (m,n))[ ( ( i , j ) , array ( (1,1) , (p,q)) [ ( (k, l ) , ar ! ( ( i−1)∗p+k, ( j −1)∗q+ l ) )| (k, l ) ← range ( (1,1) , (p,q)) ] )| ( i , j ) ← range ( (1,1) , (m,n)) ]where(d 1 ,d 2 ) = dimsAr2D ar ; p = div d 1 m; q = div d 2 nNous définissons également une fonction <strong>de</strong> composition, duale à <strong>la</strong> fonction <strong>de</strong> découpage, quiconstruit un array complet à partir d’un array découpé en macro blocs. La fonction arrayFromMxNBlocseffectue cette tâche :arrayFromMxNBlocs :: Ar ( I , I ) ( Ar ( I , I ) α) → Ar ( I , I ) αarrayFromMxNBlocs ar =array ( (1,1) , (p,q))[ ( ( ( i−1)∗d 1 +k, ( j −1)∗d 2 + l ) , ar ! ( i , j ) ! (k, l ) )| ( i , j ) ← range ( (1,1) , (m,n)) , (k, l ) ← range((1,1) , (d 1 ,d 2 ) ) ]where(m,n) = dimsAr2D ar ; (d 1 ,d 2 ) = dimsAr2D (ar ! (1,1)) ; p = d 1 ∗ m; q = d 2 ∗ n6.2.2 L’algorithme générique travail<strong>la</strong>nt sur les macro blocsNous avons déjà mentionné, d’une façon informelle, comment les algorithmes <strong>de</strong> transposition et <strong>de</strong>rotation vont travailler sur les macro blocs. Ce qui nous reste à détailler maintenant, c’est <strong>la</strong> représentationformelle d’un algorithme qui décrirait ce procédé.Nous nous apercevons que les algorithmes <strong>de</strong> transposition (par <strong>la</strong> diagonale et antidiagonale) et <strong>de</strong>rotation (<strong>de</strong> + π 2 et <strong>de</strong> − π 2) sont très simi<strong>la</strong>ires dans leur fonctionnement. En effet, <strong>la</strong> structure <strong>de</strong> cesalgorithmes est <strong>la</strong> même, ce qui change c’est l’opération exacte qui est effectuée. Nous allons en profiter<strong>pour</strong> introduire un algorithme qui assure <strong>la</strong> structure <strong>de</strong> fonctionnement <strong>de</strong> ces quatre algorithmes et quiest décrit par l’algorithme 6.2 comme fonction trRot2DMB.Pour définir une opération spécifique, nous <strong>de</strong>vons choisir les valeurs <strong>de</strong>s arguments <strong>de</strong> ce skeleton.Les paramètres m et n désignent les nombres <strong>de</strong> blocs dans le premier et le <strong>de</strong>uxième axe sur lesquellesl’array d’entrée ar sera découpé. Le paramètre how est un paramètre textuel et désigne l’opération àexécuter. Les valeurs que nous pouvons passer par ce paramètre sont ”T D”, ”TA”, ”R + ” et ”R − ” etcorrespon<strong>de</strong>nt aux clefs <strong>de</strong> <strong>la</strong> fonction <strong>de</strong> définition commune <strong>pour</strong> les transpositions et les rotations,trRot2D. C’est en utilisant cette fonction que nous définissons les fonctions globales, fg, et locales, fl, àl’intérieur <strong>de</strong> cet algorithme.131

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

Saved successfully!

Ooh no, something went wrong!