Modifier le contraste d'une image c'est multiplier chaque valeur des pixels par un facteur. Si P(l,c) est l'image alors :
où f est le facteur de contraste appliqué (f>0).
Modifier la brillance d'une image c'est sommer chaque valeur de pixel par un facteur. Si P(l,c) est l'image alors :
où f est le facteur de brillance appliqué.
Cette correction applique une transformation non linéaire à chaque pixel. Le facteur gamma va définir la courbe non linéaire qui va être appliquée.
on a :
sur cette courbe on a normalisé la valeur des pixels entre 0 et 1. Pour appliquer ces courbes il faut normaliser l'image suivant sa valeur de pixel
maximal (exemple 255 pour une image 8 bits), appliquer la correction gamma puis dénormaliser. On utilise l'équation suivante :
On peut inverser la correction gamma en inversant le facteur gamma.
Le but de cette correction est d'utiliser toute la gamme de valeur possible. La plus petite valeur est amenée à 0 et la plus grande à 255 (pour 8 bits) on utilise :
ou Pbas et la valeur la plus petite de l'image et Phaut la plus grande.
function guicontbrill
clear all;
close all;
figure( 'Name','translation',...
'NumberTitle','off',...
'color',[0.3137 0.3137 0.5098]);
a(1)=axes('units','normalized',...
'position',[0.05 0.4 0.4 0.4]);
a(2)=axes('units','normalized',...
'position',[0.5 0.4 0.4 0.4]);
uicontrol( 'style','pushbutton',...
'string','load',...
'Position', [10 10 50 20],...
'callback',@loadimage);
uicontrol( 'style','popup',...
'string','contrast|auto contrast|brillance|gamma',...
'Min',0,'Max',4,...
'Position', [70 10 100 20],...
'callback',{@choix,'type'});
uicontrol( 'style','edit',...
'string','1',...
'Position', [180 10 100 20],...
'callback',{@facteuredit,'facteur'});
uicontrol( 'style','pushbutton',...
'string','executer',...
'Position', [290 10 100 20],...
'callback',@executer);
text(1)=uicontrol( 'style','text',...
'string','type correction ',...
'Position', [70 30 100 20]);
text(2)=uicontrol( 'style','text',...
'string','facteur ',...
'Position', [180 30 100 20]);
%parametre initial
setappdata(gcf,'x',1);
setappdata(gcf,'type',0);
setappdata(gcf,'facteur',1);
function loadimage(~,~)
% appeler quand appui check box
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'mytitle',...
'C:\Work\myfile.jpg')
x = imread(filename);
if (length(size(x))>2)
x=x(:,:,1);% on prend une seul plan image noir et blanc chaque plan sont egaux
end
k = whos('x');
if k.class == 'uint8'
k=8;
end
setappdata(1,'k',k);
setappdata(1,'x',x);
axes(a(1))
imshow(x)
axes(a(2))
imshow(x)
end
function executer(hObj,~,Name)
type = getappdata(1,'type');
img = getappdata(1,'x');
facteur = getappdata(1,'facteur');
[ligne colonne]=size(img);
img = double(img);
img2=zeros(ligne,colonne);
if type==0 || type==1
img2=img.*facteur;
elseif type==2
amin = min(min(img));
amax = max(max(img));
facteur = 0 + (img - amin).*((255 - 0 )/(amax - amin));
img2=facteur;
elseif type==3
img2=img+facteur;
else
amax = max(max(img));
img2 = ((img./amax).^facteur).*amax;
end
axes(a(2))
imshow(uint8(img2))
end
function choix(hObj,~,Name)
% Called when user activates popup menu
val = get(hObj,'Value'); %0|1=ligne, 2=colonne, 3=croix, 4=carre
setappdata(1,Name,val);
end
function facteuredit(hObj,~,Name)
% Called when user activates popup menu
val = str2num(get(hObj,'String')); %0|1=ligne, 2=colonne, 3=croix, 4=carre
setappdata(1,Name,val);
end
end
Copyright © 2010-2014, tous droits réservés, contact : operationpixel@free.fr