function J = filtre_median5 (I)  %fonction qui prend en paramètre une image I et retourne une image J filtrée
	[m, n, can] = size(I); %m=nb lignes, n=nb colonnes, can=nb canaux
	if(can > 1)
	    I = rgb2gray(I);  %dans le cas d'une image couleur, la transformer en NG
	end

	%I2=imnoise(I,'gaussian',0, 0.05);
	I2=imnoise(I,'salt & pepper',0.4);

	%SOLUTION EN ENLEVANT LES LIGNES ET COLONNES DE DEBUT ET FIN :
	J=I;
	for l = 3:1:m-2;       %on enlève 2 lignes au début et à la fin
	    for c = 3:1:n-2;   %on enlève 2 colonnes au début et à la fin
	    %récupération des pixels voulus
	    filtre = I2(l-2:l+2, c-2:c+2);
	    %transformation de la matrice en vecteur
	    vecteurfiltre = reshape(filtre,1,25);  
	    %tri du vecteur
	    filtretrie = sort(vecteurfiltre);
	    %on remplace le pixel de l'image par la valeur médiane
	    J(l,c) = filtretrie(13);
	    end;
	end;

	%SOLUTION AVEC LA FONCTION DE MATLAB :
	J2= medfilt2(I2, [5 5]);    %B = MEDFILT2(A,[M N]) performs median filtering of the matrix A in two dimensions. Each output pixel contains the median
			    %value in the M-by-N neighborhood around the corresponding pixel in the input image. 
			    %MEDFILT2 pads the image with zeros on the edges, so the median values for the points within [M N]/2 of the edges may appear distorted.
	 
			    %B = MEDFILT2(A) performs median filtering of the matrix A using the default 3-by-3 neighborhood.

	%SOLUTION EN APPLIQUANT PLUSIEURS FOIS LE FILTRAGE :
	J4= medfilt2(J2, [5 5]);


	figure
	%divise la fenêtre en 1 ligne et 2 colonnes : pour afficher 2 images l'une
	%à côté de l'autre
	subplot(1, 2, 1)  %sélectionne le premier cadran 
	colormap(gray)
	imagesc(J);      %affichage du résultat
	title(strcat(['PSNR = ', num2str(psnr(I,J))]));  % affichage du PSNR

	subplot(1, 2, 2) %sélectionne le deuxième cadran
	colormap(gray)
	imagesc(J4);   %affichage du résultat
	title(strcat(['PSNR = ', num2str(psnr(I,J4))]));  % affichage du PSNR
