image thumbnail
from Noises and Filters GUI by CyrilSPA
For a better comprehension of how interact noises with 2D and 3D images and how to filter them.

noises_filters_GUI.m
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);

Contact us