SALIM ELIASS T2
KASTTET AHMED 2007/2008
RAPPORT TP IMAGES
PLAN:
1-Espace de représentation de couleurs
1-1-Mode RGB
1-2-Mode YCbCr
1-3-Analyse de l’image «Pool.tif»
1-4-Fusion d’images
2-Filtrage
3-Formes dérivatives
3-1-Détection de contours
3-2-Rehaussement
4-Annexes
4-1-Bibliographie
4-2-Scripts MATLAB
Introduction:
Ce rapport présente différentes techniques de traitement d'images numériques que nous avons
utilisé durant les séances de travaux pratiques. Rappelons que le traitement numérique des images est
l'ensemble des techniques permettant de modifier une image numérique dans le but de l'améliorer ou
d'en extraire des informations.
1-Espace de représentation de couleurs
1-1-Mode RGB
Le codage RGB (Red, green, blue, pour Rouge Vert Bleu, en français RVB), mis au point
en1931 par la Commission Internationale de l'Eclairage (CIE) consiste à représenter l'espace des
couleurs à partir de trois rayonnements monochromatiques de couleurs :
• rouge (de longueur d'onde égale à 700,0 nm),
• vert (de longueur d'onde égale à 546,1 nm),
• bleu (de longueur d'onde égale à 435,8 nm).
Cet espace de couleur correspond à la façon dont les couleurs sont généralement codées
informatiquement, ou plus exactement à la manière dont les tubes cathodiques des écrans
d'ordinateurs représentent les couleurs.
Ainsi, le modèle RGB propose de coder sur un octet chaque composante de couleur, ce qui
correspond à 256 intensités de rouge, 256 intensités de vert et 256 intensités de bleu, soient 16777216
possibilités théoriques de couleurs différentes, c'est-à-dire plus que ne peut en discerner l'œil humain
(environ 2 millions). Toutefois, cette valeur n'est que théorique car elle dépend fortement du matériel
d'affichage utilisé. De cette façon en mode RGB, l’image possède trois dimensions: deux spatiales et
une codant la couleur.
Pour représenter les trois couleurs: rouge, vert et bleu, on a besoin de trois matrices.
En appliquant trois filtres respectivement, on peut déterminer l’intensité de ces trois couleurs dans
l’image, ce qui nous permettra de la reconstituer.
1-2-Mode YCbCr
Le standard YCbCr est un modèle de représentation de la couleur dédié à la vidéo analogique.
Il se base sur un mode de transmission vidéo à composantes séparées utilisant trois câbles différents
pour faire transiter les informations de luminance (luminosité) et les deux composantes de
chrominance (couleur).
Dans ce mode l’image possède aussi trois dimensions. Donc on a besoin de trois matrices pour
la représenter : luminance, chrominance rouge, chrominance bleue. Un signal Y, représentatif d'une
luminance (achrome) est généré conformément à la relation:
Y = Kr * R + Kg * G + Kb * B (avec Kr + Kg + Kb = 1)
Deux informations supplémentaires vont permettre l'acheminement des signaux de différences
de couleurs B-Y et R-Y et donc aussi la reconstruction de G-Y à partir de B-Y et de Y, disponibles
avec leurs amplitudes relatives correctes, il sera facile d'afficher les éléments bleus de l'image.
Il en découlera évidemment de même pour le rouge et le vert
Les équations de passage de l’espace RGB à l’espace YCbCr sont :
Y = 0.299 R + 0.587G + 0.114 B
Cb = 0.564(B − Y) + 128
Cr = 0.713(R − Y) + 128
1-3-Analyse de l'image "pool.tif".
IMAGE POOL TIF LUMINANCE DE L'IMAGE
Le canal Y du système YCbCr spécifie la luminosité. Ainsi, nous pouvons observer que la
boule jaune apparaît plus claire que les autres boules sur l'image en luminance.
LA CHROMINANCE ROUGE
LA COMPOSANTE ROUGE
Sur le canal de chrominance rouge Cr, seulement la couleur rouge apparaît en blanc, alors qu’à
la composante R du système RGB les trois couleurs rouge, jaune et blanc apparaissent de la même
façon en blanc puisque ces 3 couleurs contiennent toutes le rouge. D’ailleurs la boule de couleur
blanche apparaît en blanc à la composante bleue aussi mais pas sur le canal de chrominance bleue.
Ceci est logique puisque le système RGB traduit l’intensité des couleurs rouge, vert et bleu. Donc
même les objets de couleurs contenant une de ces couleurs vont apparaître en blanc. Ce qui n’est pas le
cas du système YCbCr qui traduit l’existence exclusive de la couleur rouge pour le canal Cr ou bleu
pour le canal Cb. On peut donc isoler plus facilement la couleur rouge dans la composante Cr que dans
la composante R.
LA CHROMINANCE BLEUE
LA COMPOSANTE BLEUE
Ainsi, nous pouvons faire le même constat que précédemment mais cette fois ci nous
comparons la composante bleue avec la chrominance bleue.
1-4-Fusion de deux images.
Nous devons réalisez la fusion des images background.jpg (arrière-plan) et foreground.jpg
(avant-plan).
L’objectif dans cet exemple est de remplacer le ciel de la deuxième image : le bleu est par
conséquent la couleur caractéristique.
Arrière plan Avant plan
Pour la sélection du bleu, la décomposition YCbCr est mieux adaptée que la décomposition
RGB. Dans le cas de la décomposition RGB, on doit considérer les 3 matrices RGB pour avoir un
pixel bleu et non pas une couleur avec un taux de bleu important comme par exemple le blanc, alors
que pour la décomposition en YCbCr, on ne considère que la matrice Cb pour sélectionner uniquement
la couleur souhaitée. Pour cela on a utilisé un masque en sélectionnant tous les pixels dont le code est
supérieur à 140 (valeur qui code le bleu clair, le bleu foncé est codé par des valeurs inférieures à 140)
dans la palette gray (256).
Image finale
2-Filtrage
Dans cette partie on souhaite filtrer un bruit sur l’image «centrale.tif».
SPECTRE DE L'IMAGE A FILTERER
-0.5
-0.4
-0.3
-0.2
-0.1
0.1
0.2
0.3
0.4
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4
Centrale.tif
Le spectre de l’image nous permet de déterminer les positions des pics de fréquences parasites.
Leurs positions normalisées sont: [0.1,-0.4] et [-0.1, 0.4].
On se fixe pour objectif d’éliminer les fréquences parasites .Il nous faut donc construire un
filtre coupe bande qui éliminera les fréquences indésirables.
La démarche sera la suivante: Notre point de départ sera un filtre passe-bas gaussien, on va
passer de ce filtre à un filtre passe-bande que l’on va transformer ensuite en un filtre coupe-bande.
Dans un premier temps on va appliquer le filtre passe-bas gaussien:
G(x,y)=[1/(2* pi*σ ²)]* exp(x²+y²/2*σ²).
SPECTRE DE L IMAGE FILTREE PAR UN PASS-BAS GAUSSIEN
-0.5
La réponse fréquentielle du filtre passse bas
-0.4
-0.3
1
-0.2
0.8
-0.1
Magnitude
0.6
0
0.4
0.1
0.2
0.2
0
1 0.3
0.5 1
0.5 0.4
0
0
-0.5 -0.5
-1 -1 -0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4
F Fx
y
Notons que le choix de la valeur du paramètre sigma est déterminant pour la suite de la
manipulation. En effet la transformée de fourrier d’une gaussienne d’écart type sigma est une
gaussienne d’écart type 1/sigma. De plus la largeur à la demi-hauteur vaut 22 ln 2 * σ alors que
l’amplitude maximale vaut 1/(2*pi* σ2).Ainsi il faut trouver un compromis entre la sélectivité et
l’amplitude de l’atténuation. On a pris une valeur de sigma supérieure à 1(σ=1.5), ceci permet d’avoir
un filtre sélectif afin de ne pas altérer les fréquences voisines des fréquences parasites avec une
atténuation satisfaisante.
A partir du spectre de l'image filtrée par le passe bas, on vérifie bien que toutes les hautes
fréquences sont coupées.
On constate à partir de l'image filtrée par le passe-bas que lorsqu’on applique ce filtre, l’image devient
floue puisqu'on a éliminé également les hautes fréquences qui contiennent des informations utiles.
L'IMAGE FILTREE PAR UN PASSE BAS
Dans un deuxième temps on va transformer ce filtre en passe bande.
Pour cela, on doit décaler la bande passante du filtre en le modulant par deux exponentielles pour le
transposer dans les deux bandes fréquentielles souhaitées.
g=h.(exp(j*2pi(xo.x+y0.y))+exp(-j2pi(xo.x+y0.y)))=2*h.*cos(2*pi*(X0.*X+Y0.*Y))
Avec [x0, y0]= [0.1, -0.4]:coordonnées des pics de fréquences responsables des bruits, g la
réponse fréquentielle du filtre passe bande et h est la fonction de transfert du filtre passe-bas.
Le but est de supprimer le bruit, on va donc transformer le filtre passe-bande que l'on a obtenu
en un filtre coupe-bande.
Passage du filtre passe bande au filtre coupe bande adapté:
La réponse fréquentielle de ce filtre coupe bande est complémentaire de celle du filtre passe bande
présenté au dessus. Dès lors :
H_passe-bande+H_coupe-bande=Imax
Pour cela, on doit définir une matrice qui vaut Imax au milieu. Cela revient à définir un dirac et le
multiplier par Imax. Avec Imax est la valeur maximale du filtre passe bande.
Finalement, on obtient le filtre coupe bande dont la réponse fréquentielle et le spectre sont
respectivement les suivants:
La réponse fréquentielle du filtre coupe bande
SPECTRE DU FILTRE COUPE BANDE
-0.5
1.5
-0.4
-0.3
1
-0.2
Magnitude
-0.1
0.5 0
0.1
0 0.2
1
0.5 1 0.3
0 0.5
0.4
0
-0.5 -0.5 0.5
Fy -1 -1 -0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Fx
D'après la réponse fréquentielle du filtre coupe-bande, on vérifie que cette méthode est bien
correcte
puisque les lôbes de la gaussienne sont bien situés dans les fréquences à couper: [0.1,-0.4]
et [-0.1,0.4].
Ce qui est conforme aussi avec le spectre du filtre coupe bande, puisqu'on constate la présence de la
couleur bleu pour les fréquences indésirables, ce qui traduit une faible énergie dans ces zones, et une
couleur rouge ailleurs.
L'IMAGE FILTREE PAR UN COUPE BANDE
SPECTRE DE L'IMAGE FIMLTEREE PAR UN COUPE BANDE
-0.5
-0.4
-0.3
-0.2
-0.1
0.1
0.2
0.3
0.4
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4
Le spectre de l’image filtrée par le coupe-bande montre que les fréquences parasites ont été
enlevées.
3-Formes dérivatives
Il existe en traitement d’images numériques différentes approches pour effectuer la
détection de contours: des méthodes dérivatives qui détectent les variations locales d'intensité des
pixels d'une image. Les contours sont alors détectés soit par extraction des maximas locaux de la
dérivée première, soit par extraction des passages par zéro de la dérivée seconde.
L’objectif de cette partie est d’implémenter des formes dérivatives dans une optique de
détection ou de rehaussement de contours. L’image «batiment.bmp» sera utilisée à cette fin
.
3-1-Détection de contours
les contours sont les lieux de variations significatives de l'information.
Pour les détecter, on va utiliser un opérateur calculant le gradient de l'intensité de chaque pixel (on va
le calculer dans un voisinage de 8 points: matrice 3*3 en agissant chaque fois sur le pixel situé au
centre).
Le gradient de l'intensité en fonction des coordonnées de l'image est un vecteur de dimension
deux dont les coordonnées sont les dérivées selon les directions horizontale et verticale. En chaque
point, le gradient pointe dans la direction du plus fort changement d'intensité, et sa longueur représente
le taux de variation dans cette direction.
On connaît alors les points qui présentent un changement soudain de luminosité.
Et comme par définition un contour est une brusque variation de niveau de gris dans une image on
peut alors extraire le contour extérieur des objets.
image d origine batiment.bmp
20
40
60
80
100
120
140
160
180
50 100 150 200 250
Pour la détection de contours on a appliqué un filtre de Sobel. Son masque de dérivation
horizontale Sx2D (détection des contours verticaux) s’écrit sous la forme suivante:
Sx2D=1/8*[1 0 -1
2 0 -2
1 0 -1].
On note que la somme des coefficients de ce filtre est nulle.
Ce filtre est une convolution de deux opérateurs 1D:
Hx1D=1/2*[1 0 1]
Hy1D=1/4*[1 2 1]T
Il est nécessaire de normaliser le résultat, c'est pourquoi on multiplie par 1/2 le premier
masque et par 1/4 le deuxième.
La composante [1 2 1] est un lissage, uniformisant l’image suivant les ordonnées. Le lissage a
pour but la réduction de bruit dans l'image sans éliminer les contours. Puisque la dérivation est
sensible au bruit, il apparaît alors judicieux de filtrer l'image avant de calculer le gradient (la
dérivation).
Ce filtre (le lissage) est un filtrage moyen, où la valeur du pixel est remplacée par la moyenne des
valeurs des pixels adjacents (transformation par convolution).
La composante [1 0 1] est une dérivation suivant les abscisses car la dérivée au premier ordre
s’écrit :
df/dx=1/2*(f(x+1)-f(x-1)).
Remarquons d’après l’expression de la décomposition de Sx2D que le lissage se fait dans la
direction orthogonale à la dérivation.
Detection des contours verticaux
20
40
60
80
100
120
140
160
180
50 100 150 200 250
Le même raisonnement s'applique sur les composantes du masque de dérivation verticale
Sy2D (détection des contours horizontaux).
Sy2D=1/8*[1 2 1
0 0 0
-1 -2 -1].
Detection des contours horizontaux
20
40
60
80
100
120
140
160
180
50 100 150 200 250
On remarque que les contours détectés par le filtre de Sobel sont larges pour permettre
une localisation précise.
Pour effectuer la détection des contours, il suffit alors de calculer, en tout point de l’image
traitée, la norme euclidienne du vecteur formé par les estimées des dérivées horizontale et verticale.
Detection des contours par le module
20
40
60
80
100
120
140
160
180
50 100 150 200 250
3-2-Rehaussement
L'objectif de rehaussement de contours est de rendre plus clairs et nets les contours en
réduisant la transition de l'intensité. Donc un opérateur de rehaussement vise à remplacer le pixel
central par la somme des différences avec ses voisins. L’operateur Laplacien est un détecteur de
contour du second ordre, le contour se trouve là où le Laplacien change de signe : passage par zéro de
la dérivée seconde.
Une estimation de l’opérateur Laplacien peut être obtenue à l’aide du masque 2D de
convolution suivant :
L=1/8*[1 1 1
1 -8 1
1 1 1].
Il peut se décomposer comme suit :
L=1/2*(Lx2D+Ly2D) avec Lx2D=[1 -2 1] ⊗[1 4 1]Τ
Ly2D=Lx2DT
Or d²f/d²x|p,q = [f(p+1,q)-2*f(p,q)+f(p-1,q)]
On retrouve les coefficients [1 -2 1]. c'est ce masque 1D qui est responsable de la
dérivation seconde par rapport aux lignes qui augmente le contraste entre les deux zones
localement au niveau des contours : rehaussement.
Le masque 1D [1 4 1] est un lissage orthogonal à la direction de la dérivation. Le recours au
lissage s'impose dans ce cas car le Laplacien, à lui seul, ne donne pas de bons résultats sur une image
réelle où les changements d'intensité sont rarement nets. De plus le Laplacien est un opérateur très
bruyant à cause du calcul de la dérivée seconde. Un lissage est donc nécessaire pour éliminer le bruit
afin de ne pas rehausser les contours correspondants au bruit.
Le même raisonnement s’applique pour le masque 2D Ly2D.
Rehaussement de contours de l’image «batiment.bmp»:
«batiment.bm
En retranchant le résultat de l'application du Laplacien à l’image originale (la dérivée seconde)
à celle-ci on peut rehausser les contours car cette procédure permet d'accentuer la variation entre les
pixels et puisque notre but est d'augmenter la différence
di on va pouvoir ainsi rehausser les contours.
Dans un premier temps, nous appliquons simplement le Laplacien à l'image de départ ce qui
nous permet de détecter les contours
ontours.
Image après application du masque de Laplace
Puis nous retranchons ce résultat
rés multiplié par un coefficient «α»» à l'image de départ. Cette
dernière opération permet dans le cas d'un échelon moue (contour pas très distingué) de rehausser
rehauss le
contour si le paramètre «α»» est positif (voici le résultat obtenue pour α=4).
Image avec les contours rehaussés
On peut aussi décomposer L en la somme des deux masques L1 et L2 avec :
L1=[0 1 0, 1 -4 1, 0 1 0]
L2=[1 0 1, 0 -4 0 ,1 0 1]
Cette décomposition met en évidence la propriété de linéarité du Laplacien.
Cette décomposition utilise aussi le fait que l'opérateur Laplacien soit invariant par rotation. Et
donc, la détection est invariante à la rotation. C'est à dire que si on applique une rotation à l'image on
peut comme même détecter contours.
Conclusion sur les formes dérivatives:
on peut remarquer que les dérivées premières créent des frontières plus épaisses que les
dérivées secondes mais elles nécessitent un degré moins élevé de lissage puisqu'elles sont moins
sensibles au bruit alors que les dérivées secondes rehaussent mieux les petits détails puisqu'elles sont
capables de détecter les petits changement locaux de l'information d'où une bonne précision. Et c'est
pourquoi les dérivées premières servent plutôt en extraction de contour, alors que les dérivées
secondes servent en rehaussement d'image.
4-Annexes
4-1-Bibliographie
-Initiation au traitement d’images. Y.Berthoumieu
-Introduction au traitement d’images. M.Donias
4-2-Scripts MATLAB
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%KASTTET AHMED
%SALIM ELIASS
%T2 2007-2008
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%------------------------------------------------------------
%Première Partie du TP: Espace De Représentation De Couleurs
%------------------------------------------------------------
%Question 1 : Analyse de l’image pool.tif
clear all;
close all;
A=double(imread('pool.tif'));
R=A(:,:,1);
G=A(:,:,2);
B=A(:,:,3);
%Transformation YCrCb
Y=0.299*R+0.587*G+0.114*B;
Cb=0.564*(B-Y)+128;
Cr=0.713*(R-Y)+128;
figure, imshow(uint8(A));
title('IMAGE POOL TIF');
figure, imshow(uint8(Y));
title('LUMINANCE DE L IMAGE');
figure, imshow(uint8(Cb));
title('LA CHROMINANCE BLEUE');
figure, imshow(uint8(Cr));
title('LA CHROMINANCE ROUGE');
figure, imshow(uint8(R));
title('LA COMPOSANTE ROUGE');
figure, imshow(uint8(B));
title('LA COMPOSANTE BLEUE');
%Question 2 : fusion de deux images
clear all;
close all;
A=double(imread('foreground.jpg'));
B=double(imread('background.jpg'));
%Extraction des composantes de A
Ar=A(:,:,1);
Av=A(:,:,2);
Ab=A(:,:,3);
YA=0.299*Ar+0.587*Av+0.114*Ab;
CbA=0.564*(Ab-YA)+128;
CrA=0.713*(Ar-YA)+128;
%Extraction des composantes de B
Br=B(:,:,1);
Bv=B(:,:,2);
Bb=B(:,:,3);
YB=0.299*Br+0.587*Bv+0.114*Bb;
CbB=0.564*(Bb-YB)+128;
CrB=0.713*(Br-YB)+128;
%Selection du bleu : 140 est le code du bleu clair, tous les autres niveaux du bleu ont un
code inférieur à 140
C=CbA<140;
D=zeros(size(C));
D(:,:)=1-C(:,:);
%Image finale
IM(:,:,1)=Br.*D+Ar.*C;
IM(:,:,2)=Bv.*D+Av.*C;
IM(:,:,3)=Bb.*D+Ab.*C;
%Affichage de l''image du premeier et deuxieme plan et l''image finale
figure; imshow(uint8(A));
title('IMAGE EN PREMIER PLAN');
figure; imshow(uint8(B));
title('IMAGE EN ARRIERE PLAN');
figure; imshow(uint8(IM));
title('IMAGE FINALE');
%------------------------------------------------------------
%Deuxieme Partie du TP: Filtrage de l’image centrale.tif
%------------------------------------------------------------
clear all
close all
%Lecture de l'image
A=double(imread('centrale.tif'));
%Affichage de l'image
figure(1)
imshow(uint8(A));
title('L IMAGE A FILTRER');
N=256;
f=-1/2:1/N:1/2-1/N;
IfA=abs(fftshift(fft2(A)));
%Affichage du spectre l'image
figure(2), imagesc(f,f,log10(IfA));
title('SPECTRE DE L''IMAGE A FILTERER');
%APPLICATION D'UN FILTRE PASSE BAS
sigma=1.5;
[X,Y]=meshgrid(-8*sigma:8*sigma);
h=exp(-(X.^2+Y.^2)/(2*sigma^2))/(2*pi*sigma^2);
IfB=abs(fftshift(fft2(h)));
%Affichage du spectre du filtre passe bas
figure(3), imagesc(f,f,log10(abs(IfB)));
title('SPECTRE DU FILTRE');
%La réponse fréquentielle du filtre passe bas
figure(4)
freqz2(h,40)
title('La réponse fréquentielle du filtre passse bas');
%On applique le filtre passe bas à l'image
Ic=filter2(IfB,A);
%Affichage de l'image filtrée
figure(5)
colormap(gray)
imshow(Ic,[]);
title('L''IMAGE FILTREE PAR UN PASSE BAS');
figure(13),
imagesc(f,f,log10(abs(fftshift(fft2(Ic)))));
title('SPECTRE DE L IMAGE FILTREE PAR UN PASS-BAS GAUSSIEN');
%APPLICATION D'UN FILTRE PASSE BANDE
X0=0.1;
Y0=-0.4;
g=2*h.*cos(2*pi*(X0.*X+Y0.*Y));
IfPB=abs(fftshift(fft2(g)));
%La réponse fréquentielle du filtre passe bande
figure(6)
freqz2(g,40)
title('La réponse fréquentielle du filtre passe bande');
%Affichage du spectre du filtre passe bande
figure(7), imagesc(f,f,log10(IfPB));
%On applique le filtre passe bande à l'image
Ic=filter2(IfPB,A);
%Affichage de l'image filtrée par passe bande
figure(8)
colormap(gray)
imshow(Ic,[]);
title('L''IMAGE FILTREE PAR UN PASSE BANDE');
%APPLICATION D'UN FILTRE COUPE BANDE
I_max=max(abs(fft2(g(:))));
i=-g;
i(ceil(size(g,1)/2),ceil(size(g,1)/2))=I_max-g(ceil(size(g,1)/2),ceil(size(g,1)/2));
IfCB=abs(fftshift(fft2(i)));
Ic=filter2(IfCB,A);
%Affichage du spectre l'image filtrée à l'aide d'un filtre coupe bande
figure(9)
imagesc(f,f,log10(IfCB));
title('SPECTRE DU FILTRE COUPE BANDE');
%La réponse fréquentielle du filtre coupe bande
figure(10)
freqz2(i,40)
title('La réponse fréquentielle du filtre coupe bande');
%Affichage de l'image filtrée par coupe bande
figure(11)
colormap(gray)
Ic1=conv2(A,i);
imshow(uint8(Ic1));
title('L''IMAGE FILTREE PAR UN COUPE BANDE');
figure(12)
imagesc(f,f,log10(abs(fftshift(fft2(Ic)))));
title('SPECTRE DE L''IMAGE FIMLTEREE PAR UN COUPE BANDE');
%------------------------------------------------------------
%Troisieme Partie du TP: Formes derivatives
%------------------------------------------------------------
%question 1: detection de contours
clear all
close all
I=double(imread('batiment.bmp'));
figure, imagesc(I);
colormap(gray(256))
title('image d origine batiment.bmp');
Sx2D=1/8*[1 0 -1; 2 0 -2;1 0 -1];
Sy2D=1/8*[1 2 1; 0 0 0;-1 -2 -1];
Hx1D=1/2*[1 0 -1]';
Hy1D=1/4*[1; 2; 1];
Iv=conv2(Sx2D,I);
figure, imagesc(Iv);
colormap(gray(256))
title('Detection des contours verticaux');
Ih=conv2(Sy2D,I);
figure, imagesc(Ih);
colormap(gray(256))
title('Detection des contours horizontaux');
module=sqrt(Ih.^2+Iv.^2);
figure, imagesc(module);
colormap(gray(256))
title('Detection des contours par le module');
%Question 2: Rehaussement
clear all
close all
%Le masque Laplacien 2D
A=(imread('batiment.bmp'));
L=[1 1 1,1 -8 1,1 1 1];
%%La première décomposition du masque
%Action du masque global 2D L
I=conv2(double(A),double(L),'same');
B=double(A)-I;
figure(7)
imshow(uint8(B));
title('L''image à contours rehaussés');
%Les deux masques 2D
Lx2D=[1 -2 1, 4 -8 4, 1 -2 1];
Ly2D=Lx2D';
I=conv2(double(A),double(Lx2D),'same');
B=double(A)-I;
figure(8)
imshow(uint8(B));
title('L''image à contours horizontaux rehaussés avec le masque H1');
I=conv2(double(A),double(Ly2D'),'same');
B=double(A)-I;
figure(9)
imshow(uint8(B));
title('L''image à contours verticaux rehaussés avec le masque H2');
%Les masques 1D
Hx1=[1 -2 1];
Hx2=[1 4 1]';
IMAGEx1=conv2(A,Hx1,'same');
B=double(A)-IMAGEx1;
figure(10)
imshow(uint8(B),[]);
title('Action du filtre Hx1');
IMAGEx2=conv2(A,Hx2,'same');
B=double(A)-IMAGEx2;
figure(11)
imshow(uint8(B),[]);
title('Action du filtre Hx2');
%%La deuxième décomposition du masque
L1=[0 1 0,1 -4 1,0 1 0];
L2=[1 0 1,0 -4 0,1 0 1];
I1=conv2(A,L1,'same');
B=double(A)-I1;
figure(12)
imshow(uint8(B));
title('Action du filtre L1');
I2=conv2(A,L2,'same');
C=double(A)-I2;
figure(13)
imshow(uint8(C));
title('Action du filtre L2');