Traitement d’images sur carte 3D Application temps réel de filtres sur cartes 3D évoluées
Traitement d’images sur carte 3D Introduction I - Calculs sur cartes 3D II - Réalisation III - Applications Conclusion Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images Introduction Traitement numérique d’images calculs sur nombreux pixels Cartes 3D performantes pour calculs sur textures, buffers Augmentation de leur puissance de calcul > loi de Moore Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images I – Calculs sur cartes 3D Carte graphique = machine de calculs parallèles Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images I – Calculs sur cartes 3D Flexibilité d’utilisation du GPU pour calculs sur cartes graphiques récentes (depuis 2001) 2 unités de traitement à notre disposition Vertex Shader Pixel Shader Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images I – Calculs sur cartes 3D Pour traitement d’images: Utilisation du Pixel Shader TEXTURE Figure - Les unités de traitement avec leur paramètres d’entrée Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images I – Calculs sur cartes 3D Exploitation de la carte 3D par API 3D: Direct3D de Microsoft OpenGL Exploitation des Shader Units par langages: Shading Assembler Cg « C for graphics » de nVidia HLSL « High Level Shading Language » Microsoft GLSL « OpenGL Shading Language » Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images II - Réalisation Création de deux bibliothèques xlGraphics: Encapsulation des API 3D (Direct3D 9) xlImage: Basé sur xlGraphics Fournit des classes et fonctions pour T.I. Permet le traitement numérique d’images sur carte 3D Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images II - Réalisation xlGraphics Création d’une fenêtre de rendu xlImage Gestion des images Définition d’un pipeline des opérations à effectuer sur une image Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images II - Réalisation xlImage : classes d’opération SourceOperator D3D9LoadImage FilterOperator D3D9Filter D3D9SeparableFilter D3D9IterativeFilter OutputOperator D3D9View Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images II - Réalisation xlImage : diagramme des classes Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Ecriture des filtres en HLSL Un filtre = une ou plusieurs passes de rendu Pour chaque passe de rendu : 1 « Pixel Shader » Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Application Filtres classiques Uniforme Médian Gaussienne Filtre moyenne 3x3 Image bruitée Image originale Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre d’approximation médian (3x3) Explications Valeur milieu sur chaque ligne Valeur milieu sur la colonne obtenue Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre d’approximation médian Algorithme : 1ère passe Pass1Median () Debut Si Pixel ( x-1 ) < Pixel ( x ) Alors Si Pixel ( x ) < Pixel ( x+1 ) Retourner Pixel ( x ) ; Sinon Retourner max ( Pixel ( x-1 ), Pixel ( x+1 ) ) ; FinSi Si Pixel ( x-1 ) < Pixel ( x+1 ) Retourner Pixel ( x-1 ) ; Retourner max ( Pixel ( x ), Pixel ( x+1 ) ) ; Fin Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre d’approximation médian Algorithme : 2ème passe Pass2Median () Debut Si Pixel ( y-1 ) < Pixel ( y ) Alors Si Pixel ( y ) < Pixel ( y+1 ) Retourner Pixel ( y ) ; Sinon Retourner max ( Pixel ( y-1 ), Pixel ( y+1 ) ) ; FinSi Si Pixel ( y-1 ) < Pixel ( y+1 ) Retourner Pixel ( y-1 ) ; Retourner max ( Pixel ( y ), Pixel ( y+1 ) ) ; Fin Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre d’approximation médian (3x3) Résultats Image bruitée Filtre d’approximation médian 3x3 Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de Kuwahara (5x5) Explications Calcul moyenne et variance dans sous-région La moyenne avec variance min est choisie Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de Kuwahara Algorithme : 1ère passe Debut Pour i de -1 à 1 Faire Pour j de -1 à 1 Cumul += Pixel ( x+i, y+j ) ; FinPour Moyenne = Cumul * Poids ; Cumul += Pixel ( x+i, y+j ) - Moyenne; Variance = dot_product (Cumul, Poids.xxx); Retourner flottant4( Moyenne, Variance ); Fin Pass1Kuwahara () Initialisation Moyenne : flottant3 = 0.0 ; Cumul : flottant3 = 0.0 ; Variance : flottant = 0.0 ; Poids : flottant = 1.0 / 9.0 ; FinInitialisation Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de Kuwahara Algorithme: 2ème passe Pass2Kuwahara () Debut Retourner TrouveMoyennePourMinVariance ( Pixel ( x-1, y-1 ), Pixel ( x+1, y-1), Pixel ( x-1, y+1 ), Pixel ( x+1, y+1 ) ) ; Fin Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de Kuwahara 5x5 Résultats 1 itération 3 itérations 5 itérations Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de diffusion anisotrope Algorithme : 1ère passe Pass1Krissian98v2 () Initialisation Sortie : flottant4 ; Gradient : flottant2 ; FinInitialisation Begin Gradient.x = Pixel ( x+1, y ) – Pixel ( x-1, y ) ; Gradient.y = Pixel ( x, y+1 ) – Pixel ( x, y-1 ) ; Sortie.r = Pixel ( x, y ) ; // luminance Sortie.g = Gradient.x ; // gradient en x Sortie.b = Gradient.y ; // gradient en y Gradient /= 2.0 ; Sortie.a = PeronaMalik1 ( Gradient.x * Gradient.x + Gradient.y * Gradient.y ) ; Retourner Sortie ; End Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de diffusion anisotrope Algorithme : 2ème passe Pass2Krissian98v2 () Initialisation DT : flottant = 0.25 ; DeltaX : flottant ; DeltaY : flottant ; DeltaImage : flottant ; FinInitialisation Begin DeltaX = Pixel ( x+1, y ).a * Pixel ( x+1, y).g – Pixel ( x-1, y ).a * Pixel ( x-1, y ).g ; DeltaY = Pixel ( x, y+1 ).a * Pixel ( x, y+1).b – Pixel ( x, y-1 ).a * Pixel ( x, y-1 ).b ; DeltaImage = DeltaX + DeltaY ; Retourner flottant4 ( ( Pixel ( x, y ).r + DT * DeltaImage ).xxx, 0.0 ) ; End Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de diffusion anisotrope Résultats: fonction de diffusion de Perona-Malik 1 dt = 0.25 et K = 0.05 50 itérations 100 itérations 150 itérations Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de diffusion anisotrope Résultats: fonction de diffusion de Perona-Malik 2 dt = 0.25 et K = 0.022 50 itérations 100 itérations 150 itérations Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de diffusion anisotrope Résultats: fonction de diffusion de Weickert dt = 0.25 et K = 0.04 50 itérations 100 itérations 150 itérations Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images III - Applications Filtre de diffusion anisotrope Résultats: fonction de diffusion de Geman-Reynolds dt = 0.25 et K = 5 50 itérations 100 itérations 150 itérations Xavier LEMAITRE DESS RSI - Traitement d'Images
DESS RSI - Traitement d'Images Conclusion Le traitement numérique d’images sur carte 3D c’est possible Comparer les mêmes algorithmes sur CPU Xavier LEMAITRE DESS RSI - Traitement d'Images