function varargout = noises_filters_GUI(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @noises_filters_GUI_OpeningFcn, ...
'gui_OutputFcn', @noises_filters_GUI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
%Fonction excut just avant l'affichage
function noises_filters_GUI_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
% Ce que l'on veut afficher avec l'ouverture.
if strcmp(get(hObject,'Visible'),'off')
N=imread('SelectImage.jpg');
global Noiseedit
global Filteredit
Noiseedit=0;
Filteredit=1;
imshow(N);
end
% --- Outputs from this function are returned to the command line.
function varargout = noises_filters_GUI_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%chargement lena
function lena_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
%Definition variables globales
global I;
global J;
%Chargement de lena dans I
I=imread('lena.bmp');
J=I;
imshow(J);
%chargement image Cameraman
function cameraman_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
%Definition variables globales
global I;
global J;
%Chargement de lena dans I
I=imread('cameraman.png');
J=I;
imshow(J);
%chargement image Crayon
function crayon_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
%Definition variables globales
global I;
global J;
%Chargement de lena dans I
I=imread('crayon.jpg');
J=I;
imshow(J);
%chargement image dossier
function immat_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
%Definition variables globales
global I;
global J;
%Chargement de image standartdans I
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'mytitle',...
'C:\Work\myfile.jpg')
I = imread(fullfile(pathname,filename));
J=I;
imshow(J);
% barre de dfilement Image
function ImageMenu_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');%dfinition de la couleur
end
%On dfini les cases de notre barre
set(hObject, 'String', {'salt & pepper noise', 'gaussian noise', 'speckle noise'});
%Bouton Update
function UpdateImage_Callback(hObject, eventdata, handles)
axes(handles.axes1);
cla;
DefilementBruit = get(handles.ImageMenu, 'Value');% on regarde la valeur du menu des image
global I;% on dclare I et J en global pour pouvoir les utiliser dans chaque callback, sans devoir les Reset
global J;
global Noiseedit
switch DefilementBruit %selon la case du menu Image on effectue l'action
case 1%ajoute du bruit salt
J=imnoise(J,'salt & pepper',Noiseedit/100);
imshow(J);
case 2 %ajoute bruit gaussien
J=imnoise(J,'gaussian',Noiseedit/100);
imshow(J);
case 3%ajoute bruit speckle
J=imnoise(J,'speckle',Noiseedit/100);
imshow(J);
end
% Barre de dfilement des Filtres
function FilterMenu_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
set(hObject, 'String', {'Average', 'Median 2D','Median 3-D','Gaussian', 'Wiener'});
%Bouton Update filter
function UpdateFilter_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% rcupration des valeurs du menu des filtres
popup_sel_index = get(handles.FilterMenu, 'Value');
% Appel de nos variables globales
global Filteredit;
global I;
global J;
global sigma;
%application des filtres
switch popup_sel_index
case 1%filtre moyenneur
H2 = fspecial('average',Filteredit);
J= imfilter(J,H2);
imshow(J);
case 2%filtre median
J=medfilt2(J);
imshow(J);
case 3
J=medfilt3(J);
imshow(J);
case 4%filtre gaussien
H = fspecial('Gaussian',Filteredit,sigma);
J=imfilter(J,H);
imshow(J);
case 5%FIltre de wiener
J=wiener2(J);
imshow(J);
end
% Bouton Hist
function Hist_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
%Hist
imhist(J);% On rcupre les valeurs de l'hist dans "histo"
xlim([-10 265]);% on dfini un axe des "x" plus grand pour voir les valeurs
% en "0" et "255".
%Retour image
function retImage_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
global K;
imshow(J)
% Bouton |TF|
function ModFourrier_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
%Fourrier
TF_J=fftshift(fft2(J));% on centre puis on applique fourrier sur J
TF_mod=abs(TF_J);%on calcule le module
imagesc(log(TF_mod))% Affichage du module
% Bouton arg(TF)
function ArgFourrier_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
%Fourrier
TF_J=fftshift(fft2(J));% on centre puis on applique fourrier sur J
TF_arg=angle(TF_J);%on calcule l'argument
imagesc(TF_arg)% Affichage de l'argument
% --- Executes on button press in Compare3D.
function Compare3D_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
%comparaison couleur
compare=abs(I-J);
imshow(compare)
%boutton Compare 2-D
function Compare2D_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
global K;
%Comparaison niveau de gris
K=rgb2gray(I);
compare=abs(K-J);
imshow(compare)
% mettre l'image en couleur
function Color_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
J=I;
imshow(J);
% mettre l'image en gris
function Gray_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
global G;
G=I;
G=rgb2gray(G);
J=G;
imshow(J);
% inversion de couleur
function invcolor_Callback(hObject, eventdata, handles)
% Affcihage sur l'axe 1
axes(handles.axes1);
%clear
cla;
% Appel de nos variables globales
global I;
global J;
J=imcomplement(J);
%inversion couleur
imshow(J);
function editnoise_Callback(hObject, eventdata, handles)
% Appel de nos variables globales
global Noiseedit;
Noiseedit=0;
Noiseedit = str2double(get(hObject, 'String'));
if isnan(Noiseedit) %test si la valeur entre est un nombre
set(hObject, 'String', 0);
errordlg('Input must be a number','Error');
end
% Save the new density value
handles.metricdata.Noiseedit = Noiseedit;
guidata(hObject,handles)
function edit2_Callback(hObject, eventdata, handles)
% Appel de nos variables globales
global Filteredit;
Filteredit = str2double(get(hObject, 'String'));
A=0;
if isnan(Filteredit) || isequal(Filteredit,A) %test c'est un nombre positif
set(hObject, 'String', 0);
errordlg('Input must be a number > 0','Error');%erreur sinin
end
function edit3_Callback(hObject, eventdata, handles)
% Appel de nos variables globales
global sigma;
sigma = str2double(get(hObject, 'String'));
A=0;
if isnan(sigma) || isequal(sigma,A) %test c'est un nombre positif
set(hObject, 'String', 0);
errordlg('Input must be a number > 0','Error');%erreur sinin
end
function mse_Callback(hObject, eventdata, handles)
global I;
global J;
global K;
global eqm;
set(handles.meansquare, 'String', 0);
%Comparaison niveau de gris
K=rgb2gray(I);
handles.metricdata.mse=mean(mean(K-J).^2);
eqm=handles.metricdata.mse;
set(handles.meansquare,'String',eqm);