Découvrez notre Chaîne YouTube "Devenir Ingénieur"

Objectifs

  • Savoir l’utilité de l’histogramme d’une image
  • Savoir tracer l’histogramme d’une image
  • Savoir ajuster le contraste d’une image
  • Savoir égaliser l’histogramme d’une image
  • Savoir implémenter son propre technique d’ajustement du contraste
  • Savoir les caractéristiques de la distribution gaussienne
  • Etc.

Problématique

Il arrive que le contraste d’une image soit mal réglé suite à une faible luminosité ou pise de vue. Une image plus claire ou plus sombre indique un mauvais réglage du contraste. Appliquer son algorithme à une image mal ajustée peut dégrader les performances de son algorithme.   Dans ce tuto on verra 4 techniques qui vont vous permettre d’effectuer le réglage du contraste ainsi  l’égalisation de l’histogramme.

Technique 1

La première technique consiste à normaliser les valeurs des pixels d’une image par rapport à la valeur maximale de l’image. Par exemple, dans le cas d’une image double (où le contraste variée entre MIN=0 et MAX=1) , si la valeur maximale est égale à MAX=0.25 (<1) alors il suffit de deviser toutes les valeurs par 0.25 afin d’obtenir des valeurs des pixels allant de 0 à 1=0.25/MAX. Il se peut que la valeur minimale est non égale à 0, du coup une division par (MAX-MIN) du pixel (i,j) de l’image I sera encore mieux. En général, l’expansion de la dynamique consiste à diviser es valeurs I(i,j) par (MAX-MIN). On peut ajouter un coefficient multiplication (M) afin d’augmenter la luminosité de l’image Ci-dessous l’extrait u code Matlab de la technique.

b=max(im_in(:)); % Valeur Max des pixels
a=min(im_in(:)); % Valeur Min des pixels
M=1;             % Contraste Max désiré
im_out=im_in*M/(b-a);

Technique 2

La technique est identique à la première. Elle fait appel à la fonction Matlab imadjust()

im_out=imadjust(im_in);

Technique 3

L’utilisation des deux techniques est limitée pour les images ayant des intensités inférieures strictement à 1. Si la valeur  maximale est égale à 1, les deux techniques n’apportent aucun changement à l’image résultante. De plus on peut avoir une image mal éclairée à cause d’une mauvaise distribution des intensités dans l’image. Dans ce cas,  l’égalisation de l’histogramme peut être utilisée pour améliorer le contraste de l’image. Ci-dessous l’extrait du code Matlab.

im_out=histeq(im_in);

Voir le tuto pour plus de détails

Technique 4

La technique 4 est une combinaison entre la première technique et amélioration du contraste au voisinage de la valeur moyenne des pixels. La technique est utilisable pour toute sorte d’images. Même si la valeur maximale des  pixels est égale à 1 ! Elle consiste à calculer la moyenne globale de l’image et son écart-type (le sigma). En suite, éclairer plus les pixels autour de la valeur moyenne, généralement entre Moyenne+/-2*SIGMA. Ci-dessous l’extrait du code Matlab (voir le tuto pour plus de détails).

Technique 4 ajustement de contraste

im_out=imadjust(im_in); 
Moy=mean(im_out(:));
Sig=sqrt(var(im_out(:))); 
v0=Moy-2*Sig ;
v1=Moy+2*Sig;
A=2;
im_out1=im_out;
[M,N]=size(im_out);

for i=1:M
    for j=1:N
        I=im_out(i,j);
        if I>v0 && I<v1
            im_out1(i,j)=im_out1(i,j)*A;
        end;
    end;
end;

Programme  Complet

clear all; close all; clc;




%% Traitement d'Images | Matlab #5: Ajustement de la luminosité, le contraste ou la netteté
%% www.Electronique-Mixte.fr



% Savoir l'utilité de l'histogramme d'une image 
% Savoir tracer l'histogramme d'une image 
% Savoir ajuster le contraste d'une image 
% Savoir égaliser l'histogramme d'une image 
% Savoir implémenter son propre technique d'ajustement du contraste  
% Savoir les caractéristiques de la distribution gaussienne 
% Etc.





%% Image Originale

% Lecture 
% im_rgb= imread('spine.tif');
im_rgb= imread('kids.tif');
% im_rgb= imread('tire.tif');

% RGB/Gray => Gray 
im_1=im2double(im_rgb);
[M,N,P]=size(im_1);
if P==3
    im_in=rgb2gray(im_1);
else
    im_in=im_1;
end;

% figure
% subplot(121);imshow(im_in);
% subplot(122); hist(im_in(:),300); grid on; 
% return; 







%% Technique  1
b=max(im_in(:)); % Valeur Max des pixels
a=min(im_in(:)); % Valeur Min des pixels
M=1;             % Contraste Max désiré

im_out=im_in*M/(b-a);

%% Technique  2
% im_out=imadjust(im_in);


%% Technique  3
% im_out=histeq(im_in);


%% Technique 4 #BONUS
% Moy=mean(im_out(:));
% Sig=sqrt(var(im_out(:))); 
% v0=Moy-2*Sig ;
% v1=Moy+2*Sig;
% A=2;
% im_out1=im_out;
% [M,N]=size(im_out);
% 
% for i=1:M
%     for j=1:N
%         I=im_out(i,j);
%         if I>v0 && I<v1
%             im_out1(i,j)=im_out1(i,j)*A;
%         end;
%     end;
% end;

%% Affichage

figure(1);
subplot(221); imshow(im_in);title('Image Originale','fontsize',16);
subplot(222); imshow(im_out); title('Image Ajustée','fontsize',16);
subplot(223); hist(im_in(:),300);title('Image Originale','fontsize',16); grid on;
subplot(224); hist(im_out(:),300); title('Image Ajustée','fontsize',16); grid on;

% figure(2);
% subplot(221); imshow(im_in);title('Image Originale','fontsize',16);
% subplot(222); imshow(im_out1); title('Image Ajustée','fontsize',16);
% subplot(223); imshow(im_out2); title('Image Ajustée','fontsize',16);
% subplot(224); imshow(im_out3); title('Image Ajustée','fontsize',16);

% figure(3);
% subplot(131); imshow(im_in);title('Image Originale','fontsize',16);
% subplot(132); imshow(im_out); title('Image Ajustée','fontsize',16);
% subplot(133); imshow(im_out1); title('Image Ajustée+','fontsize',16);

imwrite(im_in,'im_in.png'); 
imwrite(im_out,'im_out.png'); 

Accueil Image | Matlab

Click to rate this post!
[Total: 1 Average: 5]

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée.

Anti-Robot *

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.