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 BRAMBORAlgorithme 5.12 : gpuTexture, skeleton algorithmique d’affichage d’une texture dans le framebufferdu GPU1 gpuTexture :: Commands → Env → Env2 gpuTexture cmd e = pipeGPU vpid rasterize fpTexture rpid cmd e34 fpTexture :: FProg5 fpTexture e (p, d, cs, [ ( txi ,txp) ] ) = mkF p d [ (1,col) ] [ ( txi ,txp) ]6 where7 col = smpBor<strong>de</strong>r ( ( getTXs $ e) ! ! txi ) txpLe fonctionnement <strong>de</strong> cet algorithme s’appuie sur le bloc <strong>de</strong> traitement <strong>de</strong>s fragments et, par conséquent,l’algorithme spécifie le fragment programme fpTexture <strong>pour</strong> cet affichage. Le reste du pipelinen’effectue que le passage d’une unité à l’autre – vertex programme vpid retourne le vertex inchangé,l’unité <strong>de</strong> rastérisation rasterize effectue <strong>la</strong> rastérisation standard et nous n’utilisons aucune fonctionnalitéspécifique <strong>de</strong> post-traitement <strong>de</strong>s fragments (exprimé par rpid).Le fonctionnement du fragment programme se compose d’appel d’une seule fonction – fonctiond’échantillonnage <strong>de</strong>s textures smpBor<strong>de</strong>r. Ses <strong>de</strong>ux arguments sont <strong>la</strong> texture, spécifiée par l’expression( ( getTXs $ e) ! ! txi )et qui récupère <strong>la</strong> texture <strong>de</strong> l’environnement, et par <strong>la</strong> position txp du texel à échantillonner.L’algorithme <strong>de</strong> <strong>la</strong> di<strong>la</strong>tation suit <strong>la</strong> logique présentée. Nous modifions le fragment programme <strong>pour</strong>ce but. Plutôt qu’échantillonner un seul texel <strong>de</strong> <strong>la</strong> texture, nous procédons à l’échantillonnage <strong>de</strong> toutle voisinage spécifié par <strong>la</strong> liste <strong>de</strong>s vecteurs <strong>de</strong> dép<strong>la</strong>cement ngb. Dans le cœur <strong>de</strong> <strong>la</strong> fonction fpDi<strong>la</strong>tedéfinissant le fragment programme, nous créons (ligne 7) <strong>la</strong> fonction d’échantillonnage smpfnc par l’applicationpartielle <strong>de</strong> <strong>la</strong> fonction smpBor<strong>de</strong>r à <strong>la</strong> texture qui est récupérée <strong>de</strong> l’environnement env <strong>de</strong><strong>la</strong> même manière que dans l’algorithme précé<strong>de</strong>nt. Nous appliquons, ligne 8, <strong>la</strong> fonction <strong>de</strong> spécialisationdu voisinage specNgbSQR <strong>pour</strong> obtenir <strong>de</strong>s in<strong>de</strong>x pointant vers les pixels du voisinage. Ensuite,l’échantillonnage par <strong>la</strong> fonction smpf nc est appliquée et nous fournit les valeurs <strong>de</strong>s pixels samples. Lavaleur résultante col est obtenue, ligne 9, par l’application <strong>de</strong> <strong>la</strong> fonction morphologique <strong>de</strong> di<strong>la</strong>tation,ngbDi<strong>la</strong>te.L’initialisation <strong>de</strong> l’environnement <strong>de</strong> travail du GPU doit être effectué <strong>de</strong> <strong>la</strong> même façon que décritprécé<strong>de</strong>mment.Algorithme 5.13 : gpuTexture, skeleton algorithmique <strong>de</strong> <strong>la</strong> di<strong>la</strong>tation, image est stockée dans <strong>la</strong>texture, résultat sera écrit dans le framebuffer du GPU1 gpuDi<strong>la</strong>te :: Ngb → Commands → Env → Env2 gpuDi<strong>la</strong>te ngb cmd e = pipeGPU vpid rasterize ( fpDi<strong>la</strong>te $ ngb) rpid cmd e34 fpDi<strong>la</strong>te :: Ngb → FProg5 fpDi<strong>la</strong>te ngb e (p, d, cs, [ ( txi ,txp) ] ) = mkF p d [ (1,col) ] [ ( txi ,txp) ]6 where7 smpfnc = smpBor<strong>de</strong>r ( ( getTXs $ e) ! ! txi )8 samples = map smpfnc (specNgbSQR ngb txp)9 col = ngbDi<strong>la</strong>te samples122

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

Saved successfully!

Ooh no, something went wrong!