function J = egalisation (I)  
    [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
    %Histogramme :
    histo = zeros(256);   %matrice de zéros de taille 256x256 : pour compter les niveaux de gris de 0 à 255
    for i=1:m             %pour toutes les lignes
        for j=1:n         %pour toutes les colonnes
            histo(I(i,j)+1)= histo(I(i,j)+1)+1;  %+1 car les indices d'une matrice commencent à 1 : ne remplit que la première colonne
        end
    end
    %densité de proba :
    histog2 = ((double(histo)/(m*n)));  %nb entre 0 et 1

    %fonction de répartition :
    for i=2:256
        histog2(i) = histog2(i) + histog2(i-1);  
    end
    histog2 = histog2 * 255;  %fonction d'egalisation : nb entre 0 et 255
        
    %for i=1:m
    %    for j=1:n
    %        gris = I(i,j)+1;
    %        J(i,j) = uint8(histog2(gris));  %on applique la fonction de répartition à l'image
    %    end
    %end
    J = uint8(histog2(I+1));  %on applique la fonction de répartition à l'image

    figure
    imshow(I); 
    %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)
    image(I);      %affichage de l'image originale
    title(strcat('min = ', num2str(min(min(I))), ' max = ', num2str(max(max(I)))));

    subplot(3, 2, 2) %sélectionne le deuxième cadran
    colormap(gray)
    image(J);  
    title(strcat('min = ', num2str(min(min(J))), ' max = ', num2str(max(max(J)))));

    subplot(3, 2, 3) %sélectionne le 3ème cadran
    plot(imhist(I));

    subplot(3, 2, 4) %sélectionne le 4ème cadran
    plot(imhist(J));

    subplot(3, 2, 5) %sélectionne le 5ème cadran
    x = 1:1:255;
    y = histog2(x);
    plot(x,y);
    title('LUT egalisation');
    xlabel('NG entree');
    ylabel('NG sortie');

