traitement des images avec matlab
TRANSCRIPT
Résume TP : traitement d’images support physique Omar Bella
1)La fonction histogramme:
function h = histograme1(I) I = double(I); p = 0; for i = 1:10 s = sum(I==p) s = sum(s); h(i) = s; p = p + 1; end plot(h); end
2) la fonction histogramme cumule :
function hc = histogramec(I) I = double(I); p = 0; for i = 1:256 s = sum(I==p); s = sum(s); h(i) = s; p = p + 1; end hc(1) = h(1); for i = 2:256 hc(i) = h(i) + hc(i-1); end end
3)la fonction distance :
function d =distanc(I,x1,y1,x2,y2,dist)
switch dist case 'eclu' d = sqrt((x1-x2)^2 + (y1-
y2)^2) case 'city' d = abs(x1-x2)+abs(y1-y2) case 'manth' d = max(abs(x1-x2),abs(y1-y2)) end end
4)la fonction etirement:
function n = etirement(I) I = double(I);
Max = max(I(:))
Min = min(I(:))
n = ((I - Min)*255)/(Max - Min); n = uint8(n);
end
5)la fonction rgb2GRAY :
function g = rgbtogray(I) I = double(I); [h w c] = size(I); if c ==3 R = I(:,:,1); G = I(:,:,2); B = I(:,:,3); g = 0.299*R + 0.587*G + 0.114*B; end g = uint8(g); x = g(100,100) end
6)la fonction detection de countour :
function grad = u_Contoure(I, operateur,
diriction) J = double(I);
switch operateur case 'sobel' sx = [1 -2 -1; 0 0 0; 1 2 1]; sy = sx'; case 'prewith' sx = [-1 1 1; 0 0 0; 1 1 1]; sy = sx'; end
switch diriction case 'horizontal' grad = u_Filter(J, sx); case 'vertical' grad = u_Filter (J, sy); case 'both' gx = u_Filter (J, sx); gy = u_Filter (J, sy); grad = sqrt(gx.^2 + gy^2); end grad = uint8(grad); end
7)la fonction u_filter :
function R = u_Filter(I, sv) I=double(I); [h,w] = size(I); for i = 2:h-1 for j=2:w-1 k = sv.*I(i-1:i+1, j-
1:j+1); J(i, j) = sum(k(:)); end end R = uint8(J); end
Résume TP : traitement d’images support physique Omar Bella
8)la fonction variance :
function v = variance(I) I = double(I); [h w] = size(I) N = h*w moy = sum(I(:)); moy = moy/N;
v = (I - moy).^2; v = sum(v(:)); v = v/N end
9)la fonction egalise:
function g = egalise(f) [w h c] = size(f); I = f; if c == 3 I = rgb2gray(f); end
I = double(I); H = zeros(256); HC = zeros(256); taille = w*h;
for m = 1:w for n = 1:h val = I(m, n); H(val + 1) = H(val + 1) + 1; end end
HC(1) = H(1);
for m = 2:256 HC(m) = HC(m-1) + H(m); end
for m = 1:w for n = 1:h val = I(m, n); g(m, n) = 255*HC(val+1)/taille; end end
g = uint8(g); end
10)la fonction bruit :
function ib=bruiter_image(I) ib=imnoise(I,'salt & pepper'); figure(1);subplot(4,2,1);imshow(I);title('I
mage initiale');
subplot(4,2,2);imshow(ib);title('Image
bruitee');
11)la fonction filter gauss:
function if_gauss=filtre_gauss(I) J=double(I)/255.0;
h=fspecial('gaussian',[5 5 ],0.9); if_gauss=conv2(h,J); figure(1);subplot(4,2,7);imshow(I);title('i
mage initiale'); subplot(4,2,8);imshow(if_gauss);title('imag
e filtre(filtre gaussian)');
12)la fonction filter moyenneur:
function if_moy=filtre_moy(I) f=ones(7)/9; if_moy=imfilter(I,f); figure(1);subplot(4,2,3);imshow(I);title('i
mage initiale'); subplot(4,2,4);imshow(if_moy);title('image
filtre(filtre moyenneur)');
13) la fonction filtre median :
function r=med(i) r=medfilt2(i,[10 10]); figure(3);subplot(1,2,1);imshow(i);title('i
mage originale'); figure(3);subplot(1,2,2);imshow(r);title('i
mage filtree');
14)la fonction rgb2ycbcr:
function c = rgb2yacbcr(i); i=double(i); A=[65.481 -37.797 112;128.553 -74.203 -
93.786 ;24.966 112 -18.214 ]; k=i./255; u=reshape(k,[],3); s=u*A; s1=s(:,1)+16; s2=s(:,2)+128; s3=s(:,3)+128; j=reshape(cat(3,s1,s2,s3),size(i)); c=uint8(j); end
15) le filter gauss avec meshgrid :
function T=gauss_h (taille,sigma,I) I=double(I); switch taille case 3 m=1; case 5 m=2;
Résume TP : traitement d’images support physique Omar Bella
case 7 m=3; end [X Y]=meshgrid(-m:m,-m:m); GA=(1/(2*pi*sigma^2))*exp(-
(X.^2+Y.^2)/(2*sigma^2)); [h w]=size(I); for i=2:h-1 for j=2:w-1 k=GA.*I(i-m:i+m,j-m:j+m); T(i,j)=sum(k(:)); end end T=uint8(T); imshow(T); end
16)le filter median:
function img = filter_medien(I) I=double(I); [h w]=size(I); img = zeros(size(I)); for i=2:h-1 for j=2:w-1 m = I(i-1:i+1,j-1:j+1); for k=1:9 for p=1:8 if m(p)>m(p+1) aide = m(p); m(p) = m(p+1); m(p+1) = aide; end end end img(i,j) = m(5); end end img = uint8(img); imshow(img); end
17)détection de contours par hystérises :
function ig=detec(I) I=double(I);
[h w c]=size(I); sth=[1 0 -1]; stv=sth'; igx =zeros(size(I)); igy =igx; for i=2:h-1 for j=2:w-1 igx1 = sth.*I(i,j-1:j+1); somx = sum(igx1); igx(i,j) = somx;
igy1 =stv.*I(i-1:i+1,j);
somy = sum(igy1); igy(i,j) = somy; end end
for i=2:h-1 for j=2:w-1 ig(i-1,j-
1)=abs(igx(i,j)+abs(igy(i,j))); end end ig=uint8(ig); imshow(ig); end
Les relations : Egalisation d’histogramme :
( ) ( )
P :le nbre de bits Hc :histo cumule Nl :nbre de lignes
Nc :nbre de colonnes
Etirement d’histogramme :
( ) ( ( ) )
Inversion de la dynamique : ( ) ( ) ( )
La correction gamma :
( )
( )
Changement d’échelle : Interpolation du plus proche voisin par copie des pixels Interpolation bilinéaire : Plus complexe Offre de bien meilleur résultats
Filtrage et détection de contours :
Filtres linéaires :sous forme de convolution
Filtres non linéaires :une forme non linéaire
L ’u être=1
Effets de bords (solution) : -0 padding :le voisinage en dehors a des valeurs nulles.
Résume TP : traitement d’images support physique Omar Bella
-duplication :le voisinage en dehors prend la valeur du pixel ’ p u p . -négliger les bords -effet miroir.
Passe-bas : -réduit le bruit -réduit les faibles détails ’ -crée du flou -tous les coefficients du noyau sont positifs
1) filtres moyenneurs(linéaire) : - v u ’u p v v -la somme des coeff=1 -plus d et grand plus le lissage est important
2)filtres gaussien (linéaires) : -meilleur lissage et une meilleure reduction du bruit -sigma>1 :rendre imade floue -sigma<1 :reduire le bruit -sigma est grand plus la cloche est large plus le fou sera marque
-avantages : L ’ u -filtre séparable
Filtre médian(non linéaire) : Filtre non-linéaire Elimine le bruit impulsionnel (aléatoire) Préserve ’ contour sans les rendre flous Peut-être applique itérativement
Inconvénients : a tendance a « déplacer » les frontières
Passe haut : Accentue les contours (rehaussement) Augmente les détails ’ Amplifie le bruit La noyau contient des coeff positifs et négatifs.
Le laplacien(rehaussement de contraste) :mesure la rapidité
des changements ’intensité sur le voisinage afin de rendre les contours visible
-la détection de contours :est une technique de réduction
’ ’ u u p forcement fermées formant les frontières significatives de ’
Les contours hautes frequ=> passe haut Masques de convolution des opérateurs pour image de gradient :prewitt-sobel-roberts-kirsch