function J2 = filtre_exp(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);

	H0 = [1 1 3 1 1 ; 
	      1 3 7 3 1 ;
	      3 7 16 7 3 ;
	      1 3 7 3 1 ;
	      1 1 3 1 1 ];

	H = zeros(5,5);
	for l = 1:5
	    for c = 1:5
		H(l,c) = double(H0(l,c)*1/80);
	    end
	end

	%SOLUTION AVEC LA FONCTION DE MATLAB :
	J2 = imfilter(I2,H);           %B = IMFILTER(A,H,OPTION1,OPTION2,...), OPTION1 : When no boundary option is specified, IMFILTER uses X = 0
					    %The output array is the same size as the input array.  This is the default behavior when no output
					    %size options are specified.

	%SOLUTION EN APPLIQUANT PLUSIEURS FOIS LE FILTRAGE :
	J3= imfilter(J2,H);
	J4= imfilter(J3,H);

	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(J2);      %affichage du résultat
	title(strcat(['PSNR = ', num2str(psnr(I,J2))]));  % affichage du PSNR

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