Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parSalim Heni Modifié depuis plus de 8 années
1
Université de Monastir Faculté des sciences de Monastir Réalisé par : Salim HENI Rehaussement d’images avec préservation de contours sur GPGPU Soutenance de Mastère Pour l’obtention du DIPLÔME DE MASTERE en Micro et nanoélectronique Encadré par : Mme. Nabila FILALI 1 Soutenu le 24 décembre 2013
2
2 Algorithmes de rehaussement 2 Implémentation sous Matlab 3 Conclusions et perspectives 5 Contexte du projet 1 Implémentation sur GPGPU 4
3
Unité de recherche: Unité de Métrologie et des Systèmes Energétiques à l’ENIM 3 Image de tomographie laser d’un écoulement de type jet d’air rond
4
Système d’acquisition : caméra monochrome (pixel sur 8bits) Diamètre de la buse d’injection = 12,4mm. Champ d’observation est souvent petit (10 à 17 cm) 4
5
Exemples de traitement: Extraction des contours Suivi de structures spatio-temporel Détection de formes Dans le cadre d’une continuité d’un travail de recherche [Filali 2011 ] Accélération de l’algorithme de rehaussement sur GPGPU 5
6
6 Notion de rehaussement spatial d’images Contraste Zoom numérique (changement de résolution) + Filtrage Augmentation des structures à étudier avec préservation des contours et sans pertes d’information Choix de deux algorithmes : Filtrage et Interpolation
7
Filtrage 7 Les images acquises sont le plus souvent entachées de bruits (gaussiens à cause de l’ensemencement).
8
Linéaires avec 8 Les filtres Non linéaires avec Le filtre gaussienLe filtre bilatéral
9
L'interpolation « au plus proche voisin » L'interpolation bilinéaire 9 Interpolation
10
L’interpolation par Spline Catmull-Rom (CMR) L’interpolation bicubique 10
11
Les environnements de programmation utilisés : Matlab : Etude, mise au point et validation C++ (Visual studio 2008 v9): Estimation temps CPU GPU (CUDA) : Accélération et parallélisation des calculs 11
12
12 Chargement et affichage de l'image à traiter Calcul des poids gaussien de distance Extraction d'une région locale de (wxw) pixels Calcul des poids gaussien d'intensité Calcul de la réponse de filtre bilatéral L’organigramme de l’algorithme du filtre bilatéral Sigma_d=2 Sigma_r=0,1
13
13 Image originale Avec Filtre bilatéral Image bruitée Avec Filtre gaussien
14
14 PSNR filtre bilatéral filtre gaussien 31,19 dB 29,03 dB Le filtre bilatéral présente la valeur du PSNR la plus élevée donc il est plus efficace. Lequel qui préserve mieux les contours ?
15
15
16
L’organigramme de l’algorithme d’interpolation 16 Chargement et affichage de l'image à traiter Copie d'une ligne de l’image d’entrée Calcul des nouveaux pixels par interpolation Affichage de l’image interpolée
17
interpolation NN interpolation bilinéaire interpolation Spline CMR interpolation bicubique Image originale Image décimée 17
18
18 Image du jet NNbilinéairebicubiqueSpline PSNR26.18 dB33.26 dB35.26 dB35.74 dB Pour une image en niveaux de gris de 250x250 pixels.
19
19 interpolation NN interpolation bilinéaire interpolation Splineinterpolation bicubique Effet d’escalier Génération du flou Léger flou Aucun artefact
20
Bilan (suite aux études quantitative et qualitative) Le filtre bilatéral est plus avantageux que le filtre gaussien L’interpolation par Spline Catmull-Rom est la meilleure en termes de qualité de l’image obtenue. les deux algorithmes retenus 20 Portage sur GPGPU
21
Matériel utilisé PC de bureau disposant d’une carte mère à base d’un CPU Pentium d’Intel (2.00 GHz) Une carte graphique de type GeForce 9500 GT de NVIDIA (32 cores ) Ressource Mémoire globale totale Mémoire partagée par SM Nombre de registre par SM Taille du Warp Nombre de threads par bloc Dimension maximale de blocs Dimension maximale de la grille Taille1 Go16 Ko 32512512x512x64 65535x65535 x1 Contraintenon Partagée par tous les blocs Partagé par tous les threads Nonnon 21
22
Un exemple d'une grille de (3x2) blocs de (2x2) threads Implémentation du kernel du filtre bilatéral 22 24 pixels
23
23 Chargement et affichage de l'image à traiter Calcul des poids gaussien de distance Extraction d'une région locale Calcul des poids gaussien d'intensité Calcul de la réponse de filtre bilatéral
24
Influence du nombre de threads par bloc en utilisant la mémoire globale 24 Implémentation du kernel du filtre bilatéral
25
Influence du nombre de threads par bloc en utilisant la mémoire texture 25 Implémentation du kernel du filtre bilatéral
26
26 Temps d’exécution (en ms) MatlabC++ GPU (mémoire texture) Speed-Up GPU/Matlab Speed-Up GPU/C++ Image 1 (128x128) pixels 97583121,534 4879156 Image 2 (256x256) pixels 3876712646,211 6461210 Image 3 (512x512) pixels 155485497724,901 6219199 Comparaison entre l'implémentation GPU (mémoire texture) et l'implémentation séquentielle sur CPU Implémentation du kernel du filtre bilatéral
27
27 Temps d’exécution (en ms) C++ GPU (mémoire texture) Débit CPU (C++) (Mpix/s) Débit GPU (Mpix/s) Speed-Up GPU/C++ w=13742,7620,7 87135 w=3204410,9160,13 24187 w=54961 24,824 0,05 11199 w=7922045,0170,03 6205 Influence du choix de la taille de la fenêtre (w) Implémentation du kernel du filtre bilatéral
28
Interpolation d’un pixel selon X (Zoom x2) 28 Implémentation du kernel d’interpolation par Spline CMR Principe de fonctionnement du kernel d'interpolation (zoom x2)
29
29 Temps d'exécution (en ms) 32 threads128 threads256 threads512 threads Image 1 (128x128) pixels 3,5323,2973,3893,382 Image 2 (256x256) pixels 13,32613,44914,10017,168 Image 3 (512x512) pixels 54,97569,08453,88453,185 Influence du nombre de threads par bloc en utilisant la mémoire globale pour un zoom x3 Implémentation du kernel d’interpolation par Spline CMR
30
30 Temps d’exécution (en ms) MatlabC++ GPU (mémoire globale) GPU (mémoire partagée) Image 1 (128x128) pixels 97583123,3892,476 Image 2 (256x256) pixels 38767126414,1007,084 Image 3 (512x512) pixels 155485497753,88437,210 Comparaison entre l'implémentation GPU (mémoire globale et partagée ) et l'implémentation séquentielle sur CPU Des gains d’environ 2x en passant de l'implémentation utilisant la mémoire globale vers celle avec la mémoire partagée Des gains d’environ 133x comparés au calcul séquentiel en C++. Implémentation du kernel d’interpolation par Spline CMR
31
Temps d’exécution (en ms) x2x3x4x5x6x7x8 Image 1 (128x128) pixels 1,0722,4763,9965,7237,91010,21613,630 Image 2 (256x256) pixels 4,0397,08415,60922,15130,61539,84753.130 Image 3 (512x512) pixels 15,93737,21061,28887,199120,44157,103210,105 Temps d’exécution en ms du kernel de l'interpolation en fonction du zoom (mémoire partagée) Évolution non linéaire 31 Implémentation du kernel d’interpolation par Spline CMR
32
32 2- Accélération sur GPGPU (GeForce 9500 GT) : Programmation parallèle sous CUDA de l’algorithme d’interpolation par Spline CMR Temps d’ exécution 133x plus rapide que sur CPU (C++) Programmation parallèle sous CUDA de l’algorithme du filtre bilatéral Temps d’ exécution 205x plus rapide que sur CPU (C++) 1- Programmation sous Matlab et C++ de: Différents algorithmes d’interpolation Deux types de filtres (gaussien et bilatéral)
33
33 Le portage de l’algorithme complet de rehaussement sur FPGA pour offrir la possibilité du traitement en temps réel des images acquises avec des caméras rapides. L’utilisation des nouvelles cartes graphiques NVIDIA qui seront sur marché en 2014. L’architecture de ces cartes offre la possibilité de faire un appel du kernel à partir d’un autre kernel. Cette nouveauté permet de faire tout le traitement (Filtrage et interpolation) sur GPU sans nécessité de retour au CPU, qui va augmenter le gain en temps d’exécution. Portage sur GPGPU d’autres approches développées pour améliorer les performances du filtre bilatéral. Rehaussement pour des traitements 3D.
34
34
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.