Vous êtes sur la page 1sur 16

Traitement d’image

1 Analyser et Rehausser des Images


Cette section décrit les fonctions de la Boîte à outils du Traitement d'image qui supportent une
gamme d'opérations du traitement d'image standard pour analyser et rehausser des images.

1.1 Pixel et Statistiques


La Boîte à outils du Traitement d'image fournit plusieurs fonctions qui retournent l'information au
sujet des valeurs des données qui composent une image. Ces fonctions retournent l'information au
sujet de données de l'image dans plusieurs formes, y compris:
•les valeurs des données pour les pixels sélectionnées (pixval, impixel)
• les valeurs des données le long d'un chemin dans une image (improfile)
• représentation du contour de l'image (imcontour)
• histogramme de l'image (imhist)
• les données Statistiques de l'image (mean2, std2, corr2)

Sélection de pixel
La boîte à outils inclut deux fonctions qui fournissent de l'information au sujet des valeurs des
données de couleur de pixels de l'image spécifié:
• pixval fonction retournant les valeurs des données pour les pixels quand vous déplacez le curseur
sur l'image. pixval peuvent afficher aussi les distances Euclidean entre deux pixels.
• impixel fonction retournant les valeurs des données pour une pixel sélectionnée ou ensemble de
pixels. Vous pouvez fournir les coordonnées des pixels comme arguments de l'entrée, ou vous
pouvez sélectionner des pixels en utilisant la souris.
Pour utiliser pixval, vous affichez en premier une image et alors entrez la commande pixval. pixval
installe une barre noire au fond du chiffre qui affiche les coordonnées (x,y) du pixel dont le curseur
est actuellement dessus, et les données de la couleur pour ce pixel. Si vous cliquez sur l'image et
maintenez le bouton de souris pendant que vous déplacez le curseur, le pixval affiche aussi les
Euclidean distancent entre le point vous avez cliqué sur et l'emplacement du curseur courant. pixval
affiche une ligne entre ces points pour indiquer l'existence de la distance mesuré. Quand vous lacher
le bouton de souris, la ligne et la distance disparaissent. pixval vous donne des résultats plus
immédiats qu'avec impixel, mais impixel a l'avantage de retourne ses résultats dans une variable, et
elle peut être appelée. Dans cet exemple, vous appelez impixel et cliquez sur trois points dans
l'image affichée, et presser alors sur le Retour.
imshow canoe.tif
vals = impixel

Profil de l'intensité
La fonction improfile calcule et représente les valeurs de l'intensité le long d'un segment de ligne
ou un chemin multiligne dans une image. Vous pouvez fournir les coordonnées des segments de
ligne comme arguments de l'entrée, ou vous pouvez définir le chemin désiré en utilisant la souris.
Dans l'un et l'autre cas, improfile utilise l'interpolation pour déterminer les valeurs de points
également espacés le long du chemin. (Par défaut, improfile utilise l'interpolation du voisin la plus
proche. Pour un segment de ligne seul, improfile représente les valeurs de l'intensité dans une vue à
deux dimensions. Pour un chemin multiligne, improfile représente les valeurs de l'intensité dans une
vue à trois dimensions.
Dans cet exemple, vous appelez improfile et spécifiez une ligne seule avec la souris. La ligne est
montrée en rouge, et tirée de gauche à droite.
imshow debye1.tif
improfile

1
Histogram de l’Image
Un histogramme d'image est un tableau dans qui montre la distribution d'intensités de l’image
indexée ou d'intensité. la fonction imhist de de l'histogramme d'image crée cette représentation en
faisant n casiers espacé également, chacun qui représente une gamme de valeurs des données. Il
calcule alors le nombre de pixels dans chaque gamme. Par exemple, les commandes au-dessous
d'une image de grains de riz, et un histogramme basé sur 64 casiers.
I = imread('rice.tif');
imshow(I)
figure, imhist(I,64)

Données Statistiques
Vous pouvez calculer des statistiques standard d'une image en utilisant les fonctions mean2, std2,
et corr2. mean2 et std2 calculent la moyenne et déviation standard des éléments d'une matrice.
corr2 calcule le taux de corrélation entre deux matrices de la même dimension. Ces fonctions sont
des versions à deux dimensions de mean, std, et du corrcoef

Rehaussement de l'image
Les techniques du rehaussement d'image sont utilisées pour améliorer une image où “améliorez” est
défini quelquefois objectivement (par exemple, augmentez le ratio signal-bruit), et quelquefois
subjectivement (par exemple, faites de sorte que certains détail soit plus facile à voir en modifiant
les couleurs ou intensités). Cette section discute des techniques du rehaussement d'image comme
l’Ajustement de l’intensité et le•Débruitage
Les fonctions décrites dans cette section appliquent à l'origine aux images d’intensité. Cependant,
quelques-unes de ces fonctions peuvent être appliquées aussi pour les images de coleur.
Ajustement d’intensité
L'ajustement de l'intensité est une technique pour dresser une carte l'intensité d'une image évaluée à
une nouvelle gamme. Par exemple, rice.tif. est une image du contraste basse. L'histogramme de
rice.tif indique qu'il n'y a pas de valeurs au-dessous de 40 ou au-dessus de 225. Si on redistribue les
valeurs des données pour remplir la gamme d’intensité entière [0, 255], vous pouvez augmenter le
contraste d’image. Vous pouvez faire ce genre d'ajustement avec la fonction imadjust. La syntaxe
générale d'imadjust est J = imadjust(I,[low_in high_in],[low_out high_out]) où low_in et high_in
sont les intensités d'entrée et low_out et high_out dans la sortie. Par exemple, ce code exécute
l'ajustement décrit au-dessus.
I = imread('rice.tif');
J = imadjust(I,[0.15 0.9],[0 1]);
Le premier vecteur est passé à imadjust, [0.15 0.9], spécifie les valeurs maximales et minimales dd
l’intensité. Le deuxième vecteur, [0 1], spécifie les nouveaux extremes. Donc, l'exemple dresse une
carte l'intensité valeur 0.15 dans l'image de l'entrée à 0 dans l'image de la sortie, et 0.9 à 1.
Note que vous devez spécifier les intensités comme valeurs entre 0 et 1 sans se soucier de la classe
de I. Si I est uint8, les valeurs que vous fournissez sont multipliées par 255 pour déterminer les
valeurs effectives; si I est uint16, les valeurs sont multipliées par 65535. De la même façon, vous
pouvez diminuer le contraste d'une image en resserrant la gamme des données, comme dans cet
appel.
J = imadjust(I,[0 1],[0.3 0.8]);
En plus d'augmenter ou diminuer le contraste, vous pouvez exécuter une large variété d'autres
rehaussements d'image avec imadjust. Dans l'exemple au-dessous, le manteau de l'homme est trop
sombre pour révéler tout détail. L'appel à imadjust dresse une gamme [0,51] dans l'image de l'entrée
de l'uint8 à [128,255] dans l'image de la sortie. Cela change considérablement l'image, et aussi
élargit la gamme dynamique des portions sombres de l'image originale, en le faisant beaucoup plus
facile à voir les détails dans le manteau. Cependant, notez que parce que toutes les valeurs au-
dessus de 51 dans l'image originale sont dressées une carte à 255 (blanc) dans l'image ajustée

2
I = imread('cameraman.tif');
J = imadjust(I,[0 0.2],[0.5 1]);
Mettre Automatiquement la limite l'ajustement
Pour utiliser imadjust, vous devez exécuter typiquement deux étapes:
1 visualisation de l'histogramme de l'image pour déterminer les limites de la valeur de l'intensité.
2 spécifient ces limites comme une fraction entre 0.0 et 1.0 afin que vous puissiez les passer à
imadjust dans le vecteur [low_in high_in]
Pour une façon plus commode de spécifier ces limites, utilisez la fonction du stretchlim. Cette
fonction calcule l'histogramme de l'image et détermine l'ajustement limite automatiquement.
stretchlim retourne ces valeurs comme fractions dans le vecteur [high_in du low_in]; par exemple,
I = imread('rice.tif');
J = imadjust(I,stretchlim(I),[0 1]);
Note que vous auriez aussi pu créer l'image du gabarit en faire un zoom sur l'image et utilisant la
version interactive imcrop. Par exemple, avec text.tif a affiché dans la fenêtre du chiffre courante,
entrez le zoom sur
a = imcrop
Pour déterminer les coordonnées de traits dans une image, vous pouvez utiliser la fonction du
pixval.
Terminologie
Terms Definitions
Adaptive A filter whose properties vary across an image depending on the local
filter characteristics of the image pixels.
Contour A path in an image along which the image intensity values are equal to a constant.
A curve that follows a path of rapid change in image intensity. Edges are often
Edge associated with the boundaries of objects in a scene. Edge detection is used to
identify the edges in an image.
A quantitative measurement of an image or image region. Examples of image
Property
region properties include centroid, bounding box, and area.
A graph used in image analysis that shows the distribution of intensities in an
image. The information in a histogram can be used to choose an appropriate
Histogram enhancement operation. For example, if an image histogram shows that the range of
intensity values is small, you can use an intensity adjustment function to spread the
values across a wider range.
Errors in the image acquisition process that result in pixel values that do not reflect
Noise
the true intensities of the real scene.
A set of intensity values taken from regularly spaced points along a line segment or
Profile multiline path in an image. For points that do not fall on the center of a pixel, the
intensity values are interpolated
Quadtree
decomposition An image analysis technique that partitions an image into homogeneous blocks

2 Filtrage linéaire et synthèse de filtres

2.1 Convolution et correlation


Le filtrage linéaire d'une image est accompli à travers une opération appelé la convolution. Dans
convolution, la valeur d’un pixel est calculée comme un somme pondéré de pixels avoisinants. La
matrice de poids est appelée le kernel de la convolution, aussi connu comme le filtre. Par exemple,
soit l'image
A = [17 24 1 8 15
23 5 7 14 16
4 6 13 20 22

3
10 12 19 21 3
11 18 25 2 9]
et le kernel de la convolution est
h = [8 1 6
357
4 9 2]
Alors la figure ci-dessous montre comment on calcule la convolution au pixel (2,4) utilisant les
étapes suivantes:

1 tourne le kernel de 180 degrés autour de son 4 additionner les produits obtenus.
centre. Ainsi nous aurons comme sortie :
2 glisser le centre du kernel jusqu’au pixel (2,4). 1.2 8.9 15.4 7.7 15 16.3 13.6 20.1 22.8
3 multiplier chaque élément du kernel tourné par 575
le contenu du pixel qui coincide avec cet élément.

Correlation
L'opération appelée corrélation est presque la
meme que la convolution. Dans la corrélation,
la valeur d'un pixel est aussi calculée comme
une somme pondérée de pixels élémentaires
avoisinants. La différence est que la matrice
de poids, dans ce cas, appelée la kernel de la
corrélation , n'est pas retournée pendant le
calcul

2.2 Filtrage utilisant filter2 , conv2


conv2
Convolution à deux dimensions
Syntax C = conv2(A,B)
C = conv2(hcol,hrow,A)
C = conv2(...,'shape')
Description C = conv2(A,B) calcule la convolution à deux dimensions de matrices A et B. Si l’une
de ces matrices décrit une réponse du filtre à impulsion finie à deux dimensions (FIR), l'autre
matrice est filtrée. La dimension de C dans chaque dimension est égale à la somme des dimensions
de A et B moins un. C'est, si la dimension de A est [ma,na] et la dimension de B est [mb,nb], alors
la dimension de C est [ma+mb-1,na+nb-1].
C = conv2(hcol,hrow,A) convolu A d’abord avec le vecteur hcol le long des lignes et ensuite avec
le vecteur hrow le long des colonnes. Si hcol est un vecteur colonne et hrow est un vecteur ligne,
c’est équivalent à C = conv2(hcol*hrow,A).
C = conv2 (..., 'shape') retourne une partie de la convolution à deux dimensions, comme spécifié par
le paramètre de la shape:
‘full’ Retourne la convolution à deux dimensions pleine (par défaut).

4
‘same’ Retourne la partie centrale de la convolution de la même dimension comme A.
‘valid’ Retourne seulement la partie de la convolution calculée sans le padding zero. Utiliser cette
option, C a la dimension [ma-mb+1,na-nb+1] quand all(size(A) >= size(B)). Autrement
le conv2 revient [].
Le conv2 de l'algorithme utilise une mise en oeuvre cérémonieuse simple de l'équation de la
convolution à deux dimensions dans forme spatiale. Si un et b sont fonctionne de deux variables
discrètes, n1 et n2, alors la formule pour la convolution à deux dimensions de a et b est

Exemples
Exemple 1. Pour le cas ' same', conv2 retourne la partie centrale de la convolution. Le" centre" cède
au début plus qu’à la fin. Cet exemple calcule en premier la convolution de utilisant l’option par
défaut (' full'), ensuite calcule la convolution en utilisant ' same'. Notez que la matrice obtenue en
utilisant ' same' correspond aux éléments soulignés de celle obtenue en utilisant l’option par défaut.
A = rand(3);
B = rand(4);
C = conv2(A,B) % C is 6-by-6  C = 0.1838 0.2374 0.9727 1.2644 0.7890 0.3750
0.6929 1.2019 1.5499 2.1733 1.3325 0.3096
0.5627 1.5150 2.3576 3.1553 2.5373 1.0602
0.9986 2.3811 3.4302 3.5128 2.4489 0.8462
0.3089 1.1419 1.8229 2.1561 1.6364 0.6841
0.3287 0.9347 1.6464 1.7928 1.2422 0.5423
Cs = conv2(A,B,'same') % Cs is the same size as A: 3-by-3 Cs = 2.3576 3.1553 2.5373
3.4302 3.5128 2.4489
1.8229 2.1561 1.6364
Exemple 2. Dans le traitement d'image, l'opération du repére les contours de Sobel est une
convolution à deux dimensions d'une matrice avec la matrice spéciale :
s = [1 2 1; 0 0 0; -1 -2 -1];
Ce filtre extrait les contours horizontaux.
A = zeros(10);A(3:7,3:7) = ones(5); H = conv2(A,s); mesh(H)
Avec le transposé, le filtre s extrait les bords verticaux de A.
V = conv2(A,s');
filter2
Syntaxe du filtrage numérique à deux dimensions
Y = filter2(h,X)
Y = filter2(h,X,shape)
Description Y = filter2(h,X) filtres les données dans X avec filtre RIF à deux dimensions caractérisé
par la matrice h. Il calcule le résultat, Y, en utilisant la corrélation à deux dimensions, et retourne la
partie centrale de la corrélation qui a la même dimension comme X.
Y = filter2(h,X,shape) retourne la partie de Y spécifiée par le paramètre shape. shape est une option
avec une de ces valeurs:
' full' Retourne la corrélation à deux dimensions pleine. Dans ce cas, Y est plus grand que X.
' same' (default) Retourne la partie centrale de la corrélation. Dans ce cas, Y est la même dimension
comme X.
' valid' retourne seulement la partie de la corrélation calculée sans padding zéro. Dans ce cas, Y est
plus petit que la corrélation X.

5
2.3 Filtrage utilisant imfilter
Le filtrer des images, avec corrélation ou convolution, peut se faire à l’aide de la fonction imfilter
de la toolbox Image Processing . Cet exemple filtre l'image dans le fichier blood1.tif avec un filtre 5
par 5 qui contient des poids égaux. Un tel filtre est souvent appelé le filtre moyen.
I = imread('blood1.tif');
h = ones(5,5) / 25;
I2 = imfilter(I,h);
La fonction imfilter peut réaliser le filtrage en utilisant la corrélation ou la convolution. Il utilise la
corrélation par défaut, parce que les fonctions de synthèse du filtre et la fonction fspecial utilisent la
kernel de la corrélation. imfilter(A,h,' conv')% filtre qui utilise la convolution.
Options d’extrapolation
Quand on calcule la sortie d’un pixel aux
bords de l’image, une portion de la kernel de
la convolution ou celle de la corrélation est en
dehors de l'image
La fonction imfilter remplit par défaut les
pixels manquants par des zeros.Il s’agit de
padding zero.
Imfilter offre une extrapolation alternative
appelée la méthode a de la reproduction
frontalière. Dans la reproduction frontalière,
la valeur de toute pixel à l'extérieur de l'image
est déterminée en reproduisant la valeur de
pixel frontalière la plus proche.
Pour filtrer en utilisant la reproduction frontalière, on ajoute l’option 'replicate'.
I3 = imfilter(I,h,'replicate');
Rapport avec d’Autres Fonctions du Filtrage
MATLAB a plusieurs fonctions du filtrage à deux dimensions et multi dimensionnelles. La fonction
filter2 effectue la corrélation à deux dimensions; le conv2 effectue laconvolution à deux
dimensions; et le convn réalise la convolution multidimensionnelle.
Chacun de ces autres fonctions du filtrage toujours convertissent l'entrée en double, et la sortie est
toujours double. Aussi, chacun de ces autres fonctions du filtrage suppose toujours le padding zero,
et ils ne supportent pas d'autres options d’extrapolation. Par contraste, la fonction imfilter ne
convertit pas l'entrée en double. La fonction imfilter offre autre possibilité de l’extrapolation
Utilisation de Types du Filtre Prédéfinis
La fonction fspecial produit plusieurs types de filtres prédéfinis, dans la forme de kernel de la
corrélation. Après avoir créé un filtre avec fspecial, vous pouvez l'appliquer directement à vos
données de imfilter. Cet exemple illustre l‘application de filtre unsharp à une image de l'intensité. Il
a pour effet de rendre des bords et détail fin dans l'image plus marqués.
I = imread('moon.tif');
h = fspecial('unsharp');
I2 = imfilter(I,h);

2.4 Synthèse de Filtres


Cette section décrit l’utilisation du domaine de la fréquence pour concevoir des filtres. Les sujets
discutés incluent:
• filtres à réponse impulsionnelle Finie (FIR ou RIF), il s’agit d’un filtre linéaire
•la méthode transformation en fréquence qui transforme un filtre FIR unidimensionnel en un filtre
FIR à deux dimensions
• la méthode d’échantillonnage en fréquence qui crée un filtre basé sur une réponse en fréquences
désirée

6
•la méthode fenêtrage qui multiplie la réponse de l'impulsion idéale avec une fenêtre pour créer le
filtre
•Creation de la matrice de la réponse en fréquences désirée
•Calcul la réponse en fréquences d'un filtre

2.4.1.1 Filtres FIR


La Boîte à outils du Traitement d'image supporte une classe de filtre linéaire, la réponse
impulsionnelle finie à deux dimensions (FIR) filtre. Les filtres FIR ont plusieurs caractéristiques qui
les rendent idéal pour traitement d'image dans l'environnement MATLAB:
 Les filtres FIR sont faciles à représenter comme matrices de coefficients.
 Les filtres FIR bi-dimensionnels sont des extensions naturelles de filtres FIR unidimensionnels.
 Il y a plusieurs méthodes célèbres, fiables pour synthèse du filtre FIR.
 Les filtres FIR sont faciles à réaliser.
 Les filtres FIR peuvent être conçus pour avoir phase linéaire que empêchent la distorsion.
Une autre classe de filtre, la réponse de l'impulsion infinie (IIR) filtre, n'est pas convenable pour les
applications du traitement d'image. Il manque de la stabilité inhérente et la facilité de synthèse et
mise en oeuvre du filtre FIR. Par conséquent, cette boîte à outils ne fournit pas les filtres IIR.
FIR Filters

2.4.1.2 Méthode de la Transformation en fréquence


La méthode de la transformation en fréquence transforme un filtre FIR unidimensionnel en un filtre
FIR à deux dimensions. La méthode de la transformation en fréquence conserve la plupart des
caractéristiques du filtre unidimensionnel, en particulier la bande passante de la transition et
caractéristiques de l'ondulation. Cette méthode utilise une matrice de la transformation, un
ensemble d'éléments qui définissent la transformation de la fréquence.
ftrans2 rend effectif la méthode de la transformation en fréquence. La matrice de la transformation
par défaut de cette fonction produit des filtres avec symétrie presque circulaire. En définissant votre
propre matrice de la transformation, vous pouvez obtenir des symétries différentes.
La méthode de la transformation en fréquence produit généralement de très bons résultats, comme
c'est plus facile de concevoir un filtre unidimensionnel avec les caractéristiques particulières qu'un
filtre à deux dimensions correspondant. Par exemple, le prochain exemple conçoit un equiripple
optimal filtre FIR unidimensionnel et l'utilise pour créer un filtre à deux dimensions avec les
caractéristiques semblables. La forme de la réponse en fréquences unidimensionnelle est clairement
évidente dans la réponse à deux dimensions.
b = remez(10,[0 0.4 0.6 1],[1 1 0 0]);
h = ftrans2(b);
[H,w] = freqz(b,1,64,'whole');
colormap(jet(64))
plot(w/pi-1,fftshift(abs(H)))
figure, freqz2(h,[32 32])

2.4.1.3 La Méthode d’échantillonnage en Fréquence


La la Méthode d’échantillonnage en Fréquence crée un filtre basé sur une réponse en fréquences
désirée. Soit une matrice de points qui définissent la forme de la réponse en fréquences, cette
méthode crée un filtre dont la réponse en fréquences à partir de ces points.
fsamp2 de la fonction de la boîte à outils rend effectif cette méthode de synthèse pour les filtres FIR
à deux dimensions. le fsamp2 retourne une réponse en fréquences h du filtre en utilisant les points
dans la matrice de l'entrée Hd. L'exemple au-dessous crée un 11 par 11 filtre qui utilise fsamp2, et
représente la réponse en fréquences du filtre résultant. (freqz2 est utilisé, pour calcule la réponse en
fréquences à deux dimensions d'un filtre.
Hd = zeros(11,11); Hd(4:8,4:8) = 1;
7
[f1,f2] = freqspace(11,'meshgrid');
mesh(f1,f2,Hd), axis([-1 1 -1 1 0 1.2]), colormap(jet(64))
h = fsamp2(Hd);
figure, freqz2(h,[32 32]), axis([-1 1 -1 1 0 1.2])

2.4.1.4 Méthode du fenêtrage


La méthode du fenêtrage consiste à multiplier la réponse de l'impulsion idéale avec une fenêtre pour
créer un filtre correspondant. La méthode du fenêtrage produit un filtre dont la réponse en
fréquences se rapproche d'une réponse en fréquences désirée. Cependant, la méthode du fenêtrage a
tendance à produire de meilleurs résultats que la méthode d’échantillonnage de fréquence.
fwind1 supporte deux méthodes différentes pour faire les fenêtres à deux dimensions il utilise:
•Transforme une seule fenêtre unidimensionnelle pour créer une fenêtre à deux dimensions qui est
symétrique presque circulairement, en utilisant un processus semblable à rotation,
•Creation d’une fenêtre rectangulaire, séparable de deux fenêtres unidimensionnelles, en calculant
leur produit externe L'exemple dessous le fwind1 utilise pour créer un 11 par 11 filtre de la réponse
en fréquences désirée Hd. Ici, la fonctionhamming est utilisé pour créer une fenêtre
unidimensionnelle que fwind1 étend alors à une fenêtre à deux dimensions.
Hd = zeros(11,11); Hd(4:8,4:8) = 1;
[f1,f2] = freqspace(11,'meshgrid');
mesh(f1,f2,Hd), axis([-1 1 -1 1 0 1.2]), colormap(jet(64))
h = fwind1(Hd,hamming(11));
figure, freqz2(h,[32 32]), axis([-1 1 -1 1 0 1.2])

2.4.1.5 Créer la Matrice de la Réponse en fréquences Désirée


Les fonctions de synthèse du filtre fsamp2, fwind2, et fwind2 créent tous des filtres basés sur une
matrice de la magnitude de la réponse en fréquences désirée. Vous pouvez créer une matrice de la
réponse en fréquences désirée appropriée en utilisantla fonction du freqspace. freqspace retourne
les valeurs des fréquences également espacées, pour toute réponse de la dimension. Si vous créez
une matrice de la réponse en fréquences désirée en utilisantdes points de fréquences autre que ceux
retournées par freqspace, vous pouvez obtenir des résultats inattendus, tel que phase non linéaire.
Par exemple, créer une réponse en fréquences passe-bas idéale circulaire avec une coupure à 0.5
[f1,f2] = freqspace(25,'meshgrid');
Hd = zeros(25,25); d = sqrt(f1.^2 + f2.^2) < 0.5;
Hd(d) = 1;
mesh(f1,f2,Hd)
Notez que pour cette réponse en fréquences, les filtres produits par fsamp2, fwind1, et fwind2 sont
rèels. Ce résultat est désirable pour la plupart des applications du traitement d'image. Pour
accomplir ceci en général, la réponse en fréquences désirée devrait être symétrique par rapport à
l'origine de la fréquence (f1 = 0, f2 = 0).

2.5 La Réponse en fréquences d'un Filtre


La fonction du freqz2 calcule la réponse en fréquences pour un filtre à deux dimensions. Sans
sortie, le freqz2 crée une représentation de la réponse en fréquences. Par exemple, considérez ce
filtre FIR,
h =[0.1667 0.6667 0.1667
0.6667 -3.3333 0.6667
0.1667 0.6667 0.1667];
Cete commande calcule et affiche la réponse en fréquences de h de 64 par 64 points.
freqz2(h)

8
pour obtenir la matrice de la réponse en fréquences H et les vecteurs de fréquences f1 et f2, utilisez
des arguments de sortie
[H,f1,f2] = freqz2(h);
freqz2 normalise le f1 des fréquences et f2 afin que la valeur 1.0 corresponde à demi la fréquence
de l'échantillonnage, ou  radians. Pour une simple réponse mxn, comme montré au-dessus, le
freqz2 utilise la transformé de Fourier rapide à deux dimensions fft2 de la fonction. Vous pouvez
spécifier aussi des vecteurs de fréquence arbitraires, mais dans ce cas, freqz2 utilise un algorithme
plus lent.

3 Transformés de l’image
La représentation mathématique d'une image est généralement une fonction à deux variables
spatiales. La valeur de la fonction à un emplacement particulier représente l'intensité de l'image à ce
point.
Le terme transformé fait référence à une représentation mathématique alternative d'une image.
Terminologie
Une compréhension des termes suivants vous aidera pour utiliser ce chapitre. Notez que ce tableau
inclut des brèves définitions de termes cités comme transformé.
Terms Definitions
Discrete A transform whose input and output values are discrete samples, making it convenient for computer
transform manipulation. Discrete transforms implemented by MATLAB and the Image Processing Toolbox
include the discrete Fourier transform (DFT) and the discrete cosine transform (DCT).
Frequency The domain in which an image is represented by a sum of periodic signals with varying frequency.
domain
Inverse An operation that when performed on a transformed image, produces the original image
transform
Spatial domain The domain in which an image is represented by intensities at given points in space. This is the
most common representation for image data.
Transform An alternative mathematical representation of an image. For example, the Fourier transform is a
representation of an image as a sum of complex exponentials of varying magnitudes, frequencies,
and phases. Transforms are useful for a wide range of purposes, including convolution,
enhancement, feature detection, and compression.

3.1 Transformé de Fourier


Les transformés de Fourier est une représentation d'une image comme une somme d'exponentials
complexe des amplitudes, les fréquences, et les phases variables. Les Transformés de Fourier un
rôle crucial dans une gamme large d'applications du traitement d'image, y compris amélioration,
analyse, restauration, et compression.
Si f (m, n) est une fonction de deux des variables spatial discret m et n, alors nous définissons les
transformés de Fourier à deux dimensions de f (m, n) par la relation

Les transformés de Fourier à deux dimensions inverses est donné par

3.2 Transformé de Fourier discrète


Travailler avec la transforme Fourier habituellement sur un ordinateur implique une forme du
transformé connu sous le nom de la transformé de Fourier discret (DFT). Il y a deux principales
raisons pour utiliser cette forme:
•l’entré et la sortie du DFT sont tous les deux discret qui le fait commode pour les manipulations de
l'ordinateur.

9
•l’existence d’un algorithme rapide pour calculer le DFT connu sous le nom de transformé de
Fourier rapide (FFT).

Les fonctions fft, fft2, et fftn permet de réaliser l'algorithme de transformé de Fourier rapide pour
calculer le DFT unidimensionnel, DFT à deux dimensions, et DFT N-Dimensionnel,
respectivement. Les ifft des fonctions, ifft2, et ifftn calculent le DFT inverse.

Exemple
Construisons une matrice f qui est semblable à la fonction f(m,n). f(m,n) est égal à 1 dans la région
rectangulaire et 0 ailleurs. Nous utilisons une image binaire pour représenter f(m,n).
f = zeros(30,30);
f(5:24,13:17) = 1;
imshow(f,'notruesize')
F = fft2(f);
F2 = log(abs(F));
imshow(F2,[-1 5],'notruesize'); colormap(jet); colorbar
Nous pouvons obtenir un échantillonnage plus fin du transformé de Fourier par zéro padding de f
pour calculer son DFT. Le zéro padding et calcul DFT peuvent être exécutés dans un pas à pas avec
cet commande.
F = fft2(f,256,256);
Le coefficient de fréquences zéro est affiché , plutôt dans le coin supérieur gauche que le centre.
Vous pouvez arranger ce problème en utilisant la fonction fftshift de qui échange les quadrants de F
afin que le coefficient de fréquences zéro soit dans le centre.
F = fft2(f,256,256);
F2 = fftshift(F);
imshow(log(abs(F2)),[-1 5]); colormap(jet); colorbar

3.3. Applications

3.3.1 Réponse en fréquences de Filtres Linéaires


Les Transformés de Fourier de la réponse de l'impulsion d'un filtre linéaire donne la réponse en
fréquences du filtre. Le freqz2 de la fonction calcule et affiche la réponse en fréquences d'un filtre.
La réponse en fréquences du kernel de la convolution Gaussien montre que ce filtre fait passer les
basses fréquences et atténue les hautes fréquences.
h = fspecial('gaussian');
freqz2(h)

Value Description
'gaussian 'Gaussian lowpass filter
'sobel' Sobel horizontal edge-emphasizing filter
'prewitt' Prewitt horizontal edge-emphasizing filter
'laplacian' Filter approximating the two-dimensional Laplacian operator
'log' Laplacian of Gaussian filter

10
'average' Averaging filter
'unsharp' Unsharp contrast enhancement filter

h = fspecial('average',hsize) returns an averaging filter h of size hsize. The argument hsize can be a
vector specifying the number of rows and columns in h, or it can be a scalar, in which case h is a
square matrix. The default value for hsize is [3 3].
h = fspecial('disk',radius) returns a circular averaging filter (pillbox) within the square matrix of
side 2*radius+1. The default radius is 5.
h= fspecial('gaussian',hsize,sigma) returns a rotationally symmetric Gaussian lowpass filter of size
hsize with standard deviation sigma (positive). hsize can be a vector specifying the number of rows
and columns in h, or it can be a scalar, in which case h is a square matrix. The default value for
hsize is [3 3]; the default value for sigma is 0.5.
h= fspecial('laplacian',alpha) returns a 3-by-3 filter approximating the shape of the two-
dimensional Laplacian operator. The parameter alpha controls the shape of the Laplacian and
must be in the range 0.0 to 1.0. The default value for alpha is 0.2.
h = fspecial('log',hsize,sigma) returns a rotationally symmetric Laplacian of Gaussian filter of size
hsize with standard deviation sigma (positive). hsize can be a vector specifying the number of rows
and columns in h, or it can be a scalar, in which case h is a square matrix. The default value for
hsize is [5 5] and 0.5 for sigma.
h = fspecial('motion',len,theta) returns a filter to approximate, once convolved with an image, the
linear motion of a camera by len pixels, with an angle of theta degrees in a counterclockwise
direction. The filter becomes a vector for horizontal and vertical motions. The default len is 9 and
the default theta is 0, which corresponds to a horizontal motion of nine pixels.
h = fspecial('prewitt') returns a 3-by-3 filter h (shown below) that emphasizes horizontal edges by
approximating a vertical gradient. If you need to emphasize vertical edges, transpose the filter h'.
[ 1 1 1 0 0 0 -1 -1 -1 ] To find vertical edges, or for x-derivatives, use h'.
h = fspecial('sobel') returns a 3-by-3 filter h (shown below) that emphasizes horizontal edges using
the smoothing effect by approximating a vertical gradient. If you need to emphasize vertical edges,
transpose the filter h'. [ 1 2 1 0 0 0 -1 -2 -1 ]
h = fspecial('unsharp',alpha) returns a 3-by-3 unsharp contrast enhancement filter. fspecial creates
the unsharp filter from the negative of the Laplacian filter with parameter alpha. alpha controls the
shape of the Laplacian and must be in the range 0.0 to 1.0. The default value for alpha is 0.2

Example
I = imread('cameraman.tif');
subplot(2,2,1);
imshow(I); title('Original Image');

H = fspecial('motion',20,45);
MotionBlur = imfilter(I,H,'replicate');
subplot(2,2,2);
imshow(MotionBlur);title('Motion Blurred Image');

H = fspecial('disk',10);
blurred = imfilter(I,H,'replicate');
subplot(2,2,3);
imshow(blurred); title('Blurred Image');

H = fspecial('unsharp');

11
sharpened = imfilter(I,H,'replicate');
subplot(2,2,4);
imshow(sharpened); title('Sharpened Image');

3.3.2 Convolution rapide


Une propriété clé du transformé de Fourierest que la multiplication de deux transformés de
Fouriercorrespond à la convolution des fonctions spatiales associées. Cette propriété, avec le
Transformé de Fourier rapide , formes la base pour un algorithme de la convolution rapide.
Supposez que A est une matrice MxN et B est une matrice PxQ. La convolution de A et B peut être
calculé utiliser les pas suivants:
1 extrapoler A et B par des zéros afin qu'ils soient au moins (M+P 1) Par-(N+Q). (Souvent A et B
sont extrapolées à une dimension d’une puissance de 2 parce que le fft2 est plus rapide.)
2 calculent le DFT à deux dimensions de A et B en utilisantfft2.
3 multiplication les deux DFTs ensemble.
4 utilisant ifft2, calculez le DFT à deux dimensions inverse du résultat de pas 3.
Par exemple,
A = magic(3);
B = ones(3);
A(8,8) = 0; % Zero pad A to be 8 by 8
B(8,8) = 0; % Zero pad B to be 8 by 8
C = ifft2(fft2(A).*fft2(B));
C = C(1:5,1:5); % Extract the nonzero portion
C = real(C) % Remove imaginary part caused by roundoff error
La méthode de la convolution Basée sur FFT- est utilisée plus souvent pour les grandes entrées.
Pour les petites entrées c'est généralement plus rapide à utiliser imfilter.
Localisant les Caractéristiques de l'Image
Les Transformés de Fourier peut aussi être utilisé pour réaliser la corrélation qui est en rapport
étroit avec la convolution. La corrélation peut être utilisée pour localiser des caractéristiques dans
une image; dans ce contexte la corrélation est souvent appelée l'assortiment du gabarit.
Par exemple, supposez vous voulez localiser des événements de la lettre “un” dans une image qui
contient le texte. Cet exemple lit dans text.tif et crée une image du gabarit en extrayant une lettre
“a”.
bw = imread('text.tif');
a=bw(59:71,81:91); %Extract one of the letters a from the image.
imshow(bw);
figure, imshow(a);
La corrélation de l'image de la lettre “a” avec la image peut être calculé en tournant en premier
l'image de “a” par 180° utiliser alors la technique de la convolution Basée sur FFT décrit au-dessus.
(la convolution est équivalente à corrélation si vous tournez le kernel de la convolution par 180°)
C = real(ifft2(fft2(bw) .* fft2(rot90(a,2),256,256)));
figure, imshow(C,[])%Display, scaling data to appropriate range.
max(C(:)) %Find max pixel value in C.
ans =51.0000
thresh = 45; %Use a threshold that s a little less than max.
figure, imshow(C > thresh)%Display showing pixels over threshold.

4 Region-Based Processing
Terms Definitions
Binary mask A binary image with the same size as the image you want to process. The mask contains 1’s for all
pixels that are part of the region of interest, and 0’s everywhere else
Filling a A process that “fills” a region of interest by interpolating the pixel values from the borders of the
region region. This process can be used to make objects in an image seem to disappear as they are replaced

12
with values that blend in with the background area
Filtering a The process of applying a filter to a region of interest. For example, you can apply an intensity
region adjustment filter to certain regions of an image
Interpolation The process by which we estimate an image value at a location in between image pixels.
Masked An operation that applies filtering only to the regions of interest in an image that are identified by a
filtering binary mask. Filtered values are returned for pixels where the binary mask contains 1’s; unfiltered
values are returned for pixels where the binary mask contains 0’s
Region of A portion of an image that you want to filter or perform some other operation on. You define a region
interest of interest by creating a binary mask. There can be more than one region defined in an image. The
regions can be “geographic” in nature, such as polygons that encompass contiguous pixels, or they
can be defined by a range of intensities. In the latter case, the pixels are not necessarily contiguous.
..

Image Resizing
I = imread('rice.tif');
J = imresize(I,1.25);
Y = imresize(X,[100 150],'bilinear')
'nearest' Nearest neighbor (the default)
'bilinear' Bilinear interpolation
'bicubic' Bicubic interpolation
nlfilter
The example below uses nlfilter to set each pixel to the maximum value in its 3-by-3 neighborhood.
I = imread('tire.tif');
f = inline('max(x(:))');
I2 = nlfilter(I,[3 3],f);

Arithmétique
Function Description
imabsdiff Absolute difference of two images
imadd Add two images
imcomplement Complement an image
imdivide Divide two images
imlincomb Compute linear combination of two images
immultiply Multiply two images
imsubtract Subtract two images

I = imread('cameraman.tif');
J = uint8(filter2(fspecial('gaussian'), I));
K = imabsdiff(I,J);
imshow(K,[]) % [] = scale data automatically

I = imread('rice.tif');
J = imread('cameraman.tif');
K = imadd(I,J);
imshow(K)

I = imread('rice.tif');
blocks = blkproc(I,[32 32],'min(x(:))');
background = imresize(blocks,[256 256],'bilinear');
Ip = imdivide(I,background);
imshow(Ip,[])

I = imread('cameraman.tif');
13
J = uint8(filter2(fspecial('gaussian'), I));
K = imlincomb(1,I,-1,J,128); % K(r,c) = I(r,c) - J(r,c) + 128
imshow(K)

I = imread('moon.tif');
I16 = uint16(I);
J = immultiply(I16,I16);
imshow(I), figure, imshow(J)

I = imread('rice.tif');
blocks = blkproc(I,[32 32],'min(x(:))');
background = imresize(blocks,[256 256],'bilinear');
Ip = imdivide(I,background);
imshow(Ip,[]) % [] = let imshow scale data automatically

Contours de l'image
Vous pouvez utiliser la fonction imcontour de la boîte à outils pour afficher une représentation du
contour des données dans une image d'intensité.
Cet exemple affiche une image d'intensité de grains de riz et une représentation du contour des
données d'image.
I = imread('rice.tif');
imshow(I)
figure, imcontour(I)

14
h = fspecial('sobel')
h =1 2 1
0 0 0
-1 -2 -1

h = fspecial('prewitt')
h =1 1 1
0 0 0
-1 -1 -1

h = fspecial('laplacian')
h =0.1667 0.6667 0.1667
0.6667 -3.3333 0.6667
0.1667 0.6667 0.1667

15
16

Vous aimerez peut-être aussi