function gradient_sobel_prewitt (I)  %fonction qui prend en paramètre une image I et affiche les images des coord et de la norme pour le gradient de Sobel et Prewitt
    [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=I;
    %I2=imnoise(I,'gaussian',0, 0.05);
    %I2=imnoise(I,'salt & pepper',0.4);

%SOBEL : 
    %SOLUTION 1 AVEC LA FONCTION imfilter DE MATLAB :
    H1 = fspecial('sobel');    %H = FSPECIAL('sobel') returns 3-by-3 filter that emphasizes horizontal edges utilizing the smoothing effect by approximating a
                              %vertical gradient. If you need to emphasize vertical edges, transpose the filter H: H'. [1 2 1;0 0 0;-1 -2 -1].
    GH1 = imfilter(double(I2),H1);
    GV1 = imfilter(double(I2),H1');
    %J1= uint8(sqrt(double(abs(GH1).^2 + abs(GV1).^2)));  %norme 2
    %J1= uint8(abs(GH1) + abs(GV1));  %norme 1
    %J1= uint8(max(abs(GH1), abs(GV1)));  %norme infinie
    
    %Max locaux pour la norme du gradient :
    J1 = max_locaux_norme_grad (GH1, GV1, 1);
    
    %seuillage : 
    %seuil = input('Donner le seuil: ');
    %bin1 =(J1 >= seuil); % * 255;
    %seuillage hysteresis : 
    seuil = input('Donner le seuil1: ');
    seuil2 = input('Donner le seuil2: ');
    bin1 = hysteresis(J1, seuil, seuil2);

    %SOLUTION 2 AVEC LA FONCTION edge DE MATLAB :
    [K1,s1] = edge(I2, 'sobel');    %BW = EDGE(I,'sobel',THRESH) specifies the sensitivity threshold for the Sobel method. EDGE ignores all edges that are not stronger than 
                                        %THRESH.  If you do not specify THRESH, or if THRESH is empty ([]), EDGE chooses the value automatically.

 %PREWITT : 
    %SOLUTION 1 AVEC LA FONCTION imfilter DE MATLAB :
    H2 = fspecial('prewitt');    %H = FSPECIAL('prewitt') returns 3-by-3 filter that emphasizes horizontal edges utilizing the smoothing effect by approximating a
                                 %vertical gradient. If you need to emphasize vertical edges, transpose the filter H: H'. [1 2 1;0 0 0;-1 -2 -1].
    GH2 = imfilter(double(I2),H2);
    GV2 = imfilter(double(I2),H2');
    %J2= uint8(sqrt(double(abs(GH2).^2 + abs(GV2).^2)));  %norme 2
    J2= uint8(abs(GH2) + abs(GV2));  %norme 1
    %J2= uint8(max(abs(GH2), abs(GV2)));  %norme infinie
    
    %Max locaux pour la norme du gradient :
    %J2 = max_locaux_norme_grad (GH2, GV2, 1);
    
    %seuillage : 
    bin2 =(J2 >= seuil) * 255;

    %SOLUTION 2 AVEC LA FONCTION edge DE MATLAB :
    [K2,s2] = edge(I2, 'prewitt');    %BW = EDGE(I,'prewitt',THRESH) specifies the sensitivity threshold for the Sobel method. EDGE ignores all edges that are not stronger than 
                                      %THRESH.  If you do not specify THRESH, or if THRESH is empty ([]), EDGE chooses the value automatically.
                                       
    figure
    %divise la fenêtre en 3 ligne et 2 colonnes : pour afficher 2 images l'une à côté de l'autre
    subplot(3, 2, 1)  %sélectionne le premier cadran 
    colormap(gray)
    imagesc(J1);    %affichage la norme 2 du grad de Sobel
    title(strcat('Max loc norme 1 Sobel - min = ', num2str(min(min(J1))), ' max = ', num2str(max(max(J1)))));
    
    subplot(3, 2, 2) %sélectionne le deuxième cadran
    colormap(gray)
    imagesc(J2);    %affichage la norme 2 du grad de Prewitt
    title(strcat('norme 1 Prewitt - min = ', num2str(min(min(J2))), ' max = ', num2str(max(max(J2)))));

    subplot(3, 2, 3) %sélectionne le 3ème cadran
    colormap(gray)
    imagesc(bin1);   %affichage de la solution 1 (Sobel)
    title(strcat(['Sobel (hysteresis) - seuil1 : ', num2str(seuil), ' - seuil2 : ', num2str(seuil2)]));  % affichage du seuil
    
    subplot(3, 2, 4) %sélectionne le 4ème cadran
    colormap(gray)
    imagesc(K1);      %affichage de la solution 2 (Sobel)
    title(strcat(['Sobel - Seuil égal à ', num2str(s1*255)]));  % affichage du seuil
    
    subplot(3, 2, 5) %sélectionne le 5ème cadran
    colormap(gray)
    imagesc(bin2);   %affichage de la solution 1 (Prewitt)
    title(strcat(['Prewitt - Seuil égal à ', num2str(seuil)]));  % affichage du seuil
    
    subplot(3, 2, 6) %sélectionne le 6ème cadran
    colormap(gray)
    imagesc(K2);      %affichage de la solution 2 (Prewitt)
    title(strcat(['Prewitt - Seuil égal à ', num2str(s2*255)]));  % affichage du seuil
    
    