Cours:Elen4 TNS TP TraitImage : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Débruitage)
(Débruitage)
Ligne 110 : Ligne 110 :
 
* filtre linéaire séparable / non séparable
 
* filtre linéaire séparable / non séparable
 
* filtre non linéaire
 
* filtre non linéaire
 +
 +
=== Débruitage linéaire ===
 +
 +
Pour réduire le bruit, il est possible d'appliquer un filtre moyenneur dont voici la réponse impulsionnelle :
 +
<center>
 +
{| class="wikitable"
 +
|-
 +
| 1/9 || 1/9 || 1/9
 +
|-
 +
| 1/9 || 1/9 || 1/9
 +
|-
 +
| 1/9 || 1/9 || 1/9
 +
|}
 +
</center>
 +
 +
{{q| b)}} A l'aide de la fonction <code>imfilter</code>, appliquer le filtre moyenneur aux images <code>Xb1</code> et <code>Xb2</code>.
 +
 +
Vous pourrez également tester le résultat en implémentant le filtre à l'aide d'un produit de convolution (<code>conv2(...)</code> ou dans Fourier (<code>fft2(...)</code>)
 +
 +
{{Todos| Apprécier la qualité du débruitage linéaire sur chaque image.}}
 +
 +
{{Todos| Vous pourrez également tester un filtre de débruitage plus efficace, en utilisant une réponse impulsionnelle gaussiennce :}}
 +
<center>
 +
<code>h = fspecial('gaussian', ...)</code>
 +
</center>
 +
 +
=== Débruitage non-linéaire ===
 +
 +
{{q| c)}} Il est possible d'appliquer des filtres non-linéaires. Dans notre cas, vous pouvez tester l'effet d'un filtre non-linéaire de type médiane (à la place de la moyenne) :
 +
 +
<code>
 +
fun = @(x) median(x(:));
 +
 +
Y = nlfilter(X, [3 3], fun);
 +
</code>
 +
 +
{{Todos| Apprécier la qualité de ce débruitage non-linéaire sur chaque image.}}
  
 
== Détection de contours ==
 
== Détection de contours ==

Version du 20 mars 2023 à 16:20

Retour à la page du cours

TP4 : Traitement d'images numériques

Le travail de ce TP va consister à

  • observer et manipuler (simplement) la représentation spatiale d'images numériques;
  • observer et interpréter le contenu fréquentiel des images;
  • appliquer des filtres linéaires pour : débruiter des images ou faire apparaitre leurs contours;
  • détecter des motifs dans des images

Représentation des images numériques

Une image numérique est un signal numérique bidimensionnel. C'est donc une fonction réelle ou complexe de deux variables indépendantes. De manière générale, une image est représentée par :

x(k,l) avec k,l ∈ ℤ

Si les domaines de variation des variables sont finis, alors le signal x(k,l) peut être représenté par une tableau rectangulaire.

Chargement et visualisation

Matlab possède en librairie un ensemble d’images tests qu’il est possible de charger avec la commande suivante :

X = imread('coins.png');

Pour la visualisation, la commande la plus simple est imshow(X). Il existe les commandes suivantes plus spécialisées :

figure ouvre une nouvelle fenêtre graphique
image(X) affiche une image X (palette de fausses couleurs par défaut)
imagesc(X) comme image(X) mais ajuste la dynamique de l’image pour remplir toute cette palette
colormap modifie la palette d’une image affichée. Exemple colormap(gray).

    Todos.png Charger et afficher l’image coins.png en testant les diverses commandes d’affichage.

    Todos.png Observer comment sont stockées les valeurs des pixels dans le tableau I.

Modification de niveaux de gris

a) Puisque les valeur de luminance sont (pour l'image moon) codées sur 8 bits. Il est possible d'inverser la palette (en niv. de gris) par la transformation suivante

Y(k,l) = 255 - X(k,l)

    Todos.png Inverser l'image coins et afficher le résultat.

b) Pour binariser une image, le plus simple est de choisir une valeur seuil :

si X(k,l)>seuil Y(k,l)=1
sinon Y(k,l) = 0

    Todos.png Choisir une valeur seuil pour permettre de binariser l'image de façon à afficher les pièces en blanc sur fond noir.

    Todos.png Essayer de faire de même avec l'image imread('rice.png').

Images couleurs

a) Lire l'image ngc6543a.jpg.

b) Observer comment sont stockées les valeurs des pixels dans le tableau. Que représente la troisième dimension ?

c) Binariser l'image pour obtenir une image binaire faisant apparaitre le noyau de la galaxie seul.

Contenu fréquentiel des images

On utilisera une image test de caméraman :

X = imread('cameraman.tif');

a) Lire et afficher l'image X.

b) Calculer ses coefficients de Fourier à l'aide de la fonction fft2() (FFT en deux dimensions).

c) Calculer et afficher le spectre d'amplitude et le spectre de phase.

  • On rappelle que pour centrer l'affichage des fréquences, il est commode d'utiliser fftshift2(...)
  • Il sera probablement judicieux d'utiliser une échelle log pour les intensités des harmoniques : log(1+...)

d) Essayer d'interpréter le contenu fréquentiel à partir de l'image du spectre d'amplitude, et de l'image du spectre de phase.

Débruitage

De façon similaire au TP n°3, l'objectif est de filtrer une image

Xb(k,l) = X(k,l) + B(k,l)

X etant une image 'propre' et B une image de bruit.

Pour X, on prendra l'image cameraman : X = imread('cameraman.tif');

Bruitage

a) À l'aide de la fonction imnoise, créer :

  • une image Xb1 en ajoutant à l'image X du bruit gaussien
  • et une image Xb2 en ajoutant à l'image X du bruit poivre et sel (salt-and-pepper)

    Todos.png Afficher les images Xb1 et Xb2 pour observer les deux types de bruit

  • filtre linéaire séparable / non séparable
  • filtre non linéaire

Débruitage linéaire

Pour réduire le bruit, il est possible d'appliquer un filtre moyenneur dont voici la réponse impulsionnelle :

1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9

b) A l'aide de la fonction imfilter, appliquer le filtre moyenneur aux images Xb1 et Xb2.

Vous pourrez également tester le résultat en implémentant le filtre à l'aide d'un produit de convolution (conv2(...) ou dans Fourier (fft2(...))

    Todos.png Apprécier la qualité du débruitage linéaire sur chaque image.

    Todos.png Vous pourrez également tester un filtre de débruitage plus efficace, en utilisant une réponse impulsionnelle gaussiennce :

h = fspecial('gaussian', ...)

Débruitage non-linéaire

c) Il est possible d'appliquer des filtres non-linéaires. Dans notre cas, vous pouvez tester l'effet d'un filtre non-linéaire de type médiane (à la place de la moyenne) :

fun = @(x) median(x(:));

Y = nlfilter(X, [3 3], fun);

    Todos.png Apprécier la qualité de ce débruitage non-linéaire sur chaque image.

Détection de contours

  • Sobel

Détection de motifs

par corrélation et corrélation normalisée