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 Algorithmes de rehaussement 2 Implémentation sous Matlab 3 Conclusions et perspectives 5 Contexte du projet 1 Implémentation sur GPGPU 4
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
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
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 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
Filtrage 7 Les images acquises sont le plus souvent entachées de bruits (gaussiens à cause de l’ensemencement).
Linéaires avec 8 Les filtres Non linéaires avec Le filtre gaussienLe filtre bilatéral
L'interpolation « au plus proche voisin » L'interpolation bilinéaire 9 Interpolation
L’interpolation par Spline Catmull-Rom (CMR) L’interpolation bicubique 10
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 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 Image originale Avec Filtre bilatéral Image bruitée Avec Filtre gaussien
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
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
interpolation NN interpolation bilinéaire interpolation Spline CMR interpolation bicubique Image originale Image décimée 17
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 interpolation NN interpolation bilinéaire interpolation Splineinterpolation bicubique Effet d’escalier Génération du flou Léger flou Aucun artefact
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
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 x512x x65535 x1 Contraintenon Partagée par tous les blocs Partagé par tous les threads Nonnon 21
Un exemple d'une grille de (3x2) blocs de (2x2) threads Implémentation du kernel du filtre bilatéral pixels
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
Influence du nombre de threads par bloc en utilisant la mémoire globale 24 Implémentation du kernel du filtre bilatéral
Influence du nombre de threads par bloc en utilisant la mémoire texture 25 Implémentation du kernel du filtre bilatéral
26 Temps d’exécution (en ms) MatlabC++ GPU (mémoire texture) Speed-Up GPU/Matlab Speed-Up GPU/C++ Image 1 (128x128) pixels , Image 2 (256x256) pixels , Image 3 (512x512) pixels , 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 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, w= ,9160, w= ,824 0, w= ,0170, Influence du choix de la taille de la fenêtre (w) Implémentation du kernel du filtre bilatéral
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 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 Temps d’exécution (en ms) MatlabC++ GPU (mémoire globale) GPU (mémoire partagée) Image 1 (128x128) pixels ,3892,476 Image 2 (256x256) pixels ,1007,084 Image 3 (512x512) pixels ,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
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, 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 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 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 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