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