Outils fondamentaux en traitement d`images
Transcription
Outils fondamentaux en traitement d`images
TP 1. Traitements de base & détection de caractéristiques Exercice 1 : prise en main de Matlab Matlab (matrix laboratory) est un logiciel de calcul numérique spécialisé dans le calcul matriciel. Il est complété par de nombreuses bibliothèques (toolboxes), notamment Image Processing Toolbox. Matlab exécute les instructions tapées dans la fenêtre de commande (command window ) ou enregistrées dans un fichier (qu’on appelle script et qui porte l’extension .m, par exemple : tp1.m). Comme tout langage de programmation, les instructions Matlab s’écrivent en utilisant des variables, des opérateurs ou des fonctions. Une variable permet de stocker une ou plusieurs valeurs. Vous pouvez donner n’importe quel nom aux variables, à condition que celui-ci ne soit pas le nom d’une fonction et qu’il ne contienne que des lettres, des chiffres ou le tiret bas. Par exemple, les instructions a = 42; M = [1 2 3 ; 4 5 6]; permettent de stocker la valeur 42 dans la variable a, et la matrice 1 2 3 4 5 6 dans la variable M. Le point-virgule en fin d’instruction permet d’éviter d’afficher le résultat. 1. Créez la variable α = −10 et la matrice 255 255 255 255 I= . 255 255 255 255 L’élément (i,j) d’une matrice M est identifié par M(i,j). Si l’une des deux coordonnées est remplacée par l’opérateur : (deux-points), alors c’est toute une ligne ou toute une colonne de la matrice qui est identifiée. 2. Modifiez la matrice I précédente afin d’obtenir : 255 255 255 0 . 255 255 255 255 3. Affichez l’élément (1,4) de I, puis la dernière colonne de I. Une fonction est un script regroupant plusieurs instructions. La syntaxe et l’utilisation d’une fonction est accessible à l’aide de l’instruction doc(’fonction’). Ainsi, la fonction imshow permet d’afficher une image. Vous pouvez ouvrir le script imshow.m en tapant edit(’imshow.m’);. 4. Puisqu’une image est stockée par une matrice, la matrice I précédente peut être vue comme une image de taille 2 × 4 ! Affichez I avec l’instruction imshow(I,[0 255]); Faites le lien entre l’image affichée et la matrice I. Exercice 2 : affichage d’une image enregistrée 1. Chargez (imread) puis affichez (imshow) l’image lena.tiff. 2. Convertissez l’image (en couleur) en niveaux de gris (rgb2gray), puis affichez le résultat. 1 le passage d’une image couleur de composante r, v, b à une image en niveaux de gris de valeur g est obtenu grâce à l’expression g = 0,2989 r + 0,5870 v + 0,1140 b. Les coefficients garantissent que g ∈ [0,1] ; ils ont été obtenus par des mesures psychovisuelles. La représentation naturelle de l’image avec imshow code l’intensité des pixels par une couleur. Or, l’image peut également être représentée comme une courbe en trois dimensions, ce qui facilite certaines interprétations. 3. Utilisez mesh pour représenter l’image en trois dimensions. Attention, il est indispensable de convertir l’image en double (double). En effet, l’image originale chargée avec imread est codée par un entier sur 8 bits (donc entre 0 et 255), alors que la fonction mesh ne peut travailler qu’avec des double. Exercice 3 : affichage d’une image de synthèse On rappelle qu’une image couleur est une image à trois bandes (rouge, vert, bleu). C’est donc une matrice à trois dimensions : les deux premières sont les dimensions de l’image, la troisième correspond aux bandes. 1. Synthétisez puis affichez l’image 40 × 80 schématisée ci-dessous. JAUNE BLANC MAGENTA ROUGE VERT CYAN BLEU NOIR Une manière simple de réaliser cet exercice est tout d’abord de créer une image noire aux bonnes dimensions (la fonction zeros crée une matrice remplie de zéros), puis d’affecter la valeur souhaitée aux éléments de la matrice correspondant. Pour cela, I(i1:i2,j1:j2,b) correspond aux pixels de la bande b situés entre les lignes i1 et i2 et les colonnes j1 et j2. 2. Enregistrez l’image obtenue (imwrite). Exercice 4 : amélioration du contraste 1. Affichez l’image mcgregor.png ainsi que son histogramme (imhist). Vous constaterez que l’image est peu lumineuse et peu contrastée : comment cela se traduit-il sur l’histogramme ? 2. Multipliez l’image par un réel positif : que se passe-t-il sur l’image et son histogramme ? 3. Effectuez une égalisation de l’histogramme (histeq). Est-ce que l’objectif de la méthode est atteint ? Exercice 5 : seuillage 1. À partir de l’histogramme de l’image tencoins.png, définissez une valeur de seuil permettant de segmenter l’image afin de distinguer les pièces de monnaie du fond. Affichez l’image segmentée. 2. Le fichier background.png correspond à la luminosité de la scène. Comment utiliser cette nouvelle image pour obtenir une segmentation correcte des pièces de monnaies ? Exercice 6 : transformée de Fourier 1. Chargez l’image sin32.png. 2. Calculez sa transformée de Fourier discrète (TFD) avec la fonction fft2 (après avoir converti l’image en double). 2 3. Affichez la TFD de l’image. Comme la TFD est en double, la plage de valeurs n’est plus forcément [0, 255]. En donnant un vecteur vide ([]) comme deuxième argument de imshow, Matlab se charge de définir la plage de valeurs. Par ailleurs, la TFD est généralement représentée avec les basses fréquences au centre de l’image, contrairement au résultat calculé par fft2. Pour ramener les basses fréquences au centre, utilisez fftshift. 4. Comment s’interprète le module de la TFD ? 5. Effectuez les mêmes opérations avec les images sin16.png puis sin8.png. Que concluez-vous ? 6. Terminez en analysant les transformée de Fourier des images holes.tiff, wall.tiff, weave.tiff, straw.tiff. Exercice 7 : phénomène de crénelage (aliasing ) Le crénelage est un phénomène qui apparaît lorsque l’image est mal échantillonnée. Ce phénomène peut être évité en filtrant l’image convenablement avant l’échantillonnage. Cet exercice a pour but de comparer le sous-échantillonnage sans filtre, avec un filtre gaussien puis un filtre idéal. 1. Chargez et affichez l’image toit.jpg. 2. Sous-échantillonnez l’image d’un facteur trois ; il suffit pour cela de prendre un pixel sur trois dans chaque dimension, ce qui peut être fait avec l’instruction I(1:3:end,1:3:end). Comment se traduit visuellement le phénomène de crénelage ? 3. En sous-échantillonnant l’image, la fréquence d’échantillonnage est-elle modifiée ? Le théorème de Shannon est-il respecté ? Comment s’appelle l’équivalent monodimensionnel du crénelage ? 4. Appliquez un filtre gaussien (fonction fspecial) sur l’image avant le sous-échantillonnage. Réglez les paramètres du filtre afin de diminuer au maximum le crénelage. 5. Appliquez un filtre idéal sur l’image avant le sous-échantillonnage. Choisissez convenablement les fréquences de coupure du filtre pour diminuer le crénelage sans altérer l’image. Un filtre passe-bas idéal élimine complètement les fréquences supérieures à la fréquence de coupure sans modifier les fréquences en deça. Pour implémenter le filtre idéal, il est plus simple de travailler dans le domaine de Fourier pour définir le filtre idéal. Comme dans l’exercice 3, utilisez la fonction zeros et l’indexation I(i1:i2,j1:j2) pour définir le filtre idéal. Exercice 8 : débruitage 1. Chargez l’image toit.jpg et convertissez-la en double. Pour tester la pertinence du filtre moyenneur, on désire bruiter cette image à plusieurs rapport signalà-bruit (RSB) en y ajoutant un bruit blanc gaussien de variance σ 2 . 2. Déterminez l’expression analytique de σ en fonction du RSB désiré. On rappelle que σ 2 correspond à la puissance du bruit. 3. Ajoutez à l’image un bruit blanc gaussien pour un RSB donné, puis affichez l’image bruité. Les fonctions qui peuvent vous être utiles sont : randn (bruit gaussien), .ˆ2 (carré des éléments d’une matrice ; notez le point avant le signe puissance), sqrt (racine carrée), sum (somme des éléments en colonne d’une matrice). 4. Appliquez un filtre moyenneur sur l’image bruitée et observez l’effet de la taille du filtre sur le résultat. 3