Catégories
Algorithme Matlab Projets traitement d'image Projets traitement du signal Traitement du signal sur FPGA Traitement du signal sur matlab

Ajustement de Contraste – 3 Techniques faciles

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

Laisser un commentaire