LISTING PROGRAM
1. Form Utama
function varargout = ProgramFilter(varargin) % Begin initialization code - DO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ProgramFilter_OpeningFcn, ... 'gui_OutputFcn', @ProgramFilter_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
function ProgramFilter_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject; logo = imread ('logo.bmp'); axes(handles.axeslogo); imshow(logo);
% Update handles structure guidata(hObject, handles);
function varargout = ProgramFilter_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function menuFilter_Callback(hObject, eventdata, handles) function submenuAdd_Callback(hObject, eventdata, handles) Form_Add_Noise;
delete(handles.figure1);
function submenuNonoise_Callback(hObject, eventdata, handles) formNoNoise;
delete(handles.figure1);
function menuHelp_Callback(hObject, eventdata, handles) FormHelp;
delete(handles.figure1);
function menuabout_Callback(hObject, eventdata, handles) FormAbout;
delete(handles.figure1);
selection = questdlg(['Keluar dari Aplikasi ini ?'],['Keluar dari Aplikasi ini ...'],'Ya','Tidak','Ya');
if strcmp(selection,'Tidak') return;
end;
delete(handles.figure1);
2. Form Proses filter dengan citra yang dibangkitkan noise
function varargout = Form_Add_Noise(varargin) % FORM_ADD_NOISE M-file for Form_Add_Noise.fig % Begin initialization code - DO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Form_Add_Noise_OpeningFcn, ... 'gui_OutputFcn', @Form_Add_Noise_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
function Form_Add_Noise_OpeningFcn(hObject, eventdata, handles, varargin)
% Choose default command line output for Form_Add_Noise handles.output = hObject;
% Update handles structure guidata(hObject, handles);
% --- Outputs from this function are returned to the command line. function varargout = Form_Add_Noise_OutputFcn(hObject, eventdata, handles)
% Get default command line output from handles structure varargout{1} = handles.output;
% Tombol Open File
function btnOpenFile_Callback(hObject, eventdata, handles)
[nama_file,nama_path] = uigetfile({'*.bmp','File bmp (*.bmp)'},'Buka File Citra');
if ~isequal(nama_file,0)
handles.citra=imread(fullfile(nama_path,nama_file)); guidata(hObject,handles);
axes(handles.citraAsli); imshow(handles.citra);
[Baris Kolom Warna]=size(handles.citra) set(handles.editpanjang,'String',Baris); set(handles.editlebar,'String',Kolom);
msgbox('Citra berhasil diinputkan, Silahkan Tambah Noise ','Sukses');
return; end;
% Tombol Clear
function btnClear_Callback(hObject, eventdata, handles) cla(handles.citraAsli);
cla(handles.citraNoise); cla(handles.citraHasilMid); cla(handles.citraHasilYp);
set(handles.editpanjang,'string',''); set(handles.editlebar,'string',''); set(handles.editmsemidR,'string',''); set(handles.editmsemidG,'string',''); set(handles.editmsemidB,'string',''); set(handles.editpsnrmidR,'string',''); set(handles.editpsnrmidG,'string',''); set(handles.editpsnrmidB,'string',''); set(handles.editmseypR,'string',''); set(handles.editmseypG,'string',''); set(handles.editmseypB,'string',''); set(handles.editpsnrypR,'string',''); set(handles.editpsnrypG,'string',''); set(handles.editpsnrypB,'string',''); set(handles.editmid,'string',''); set(handles.edityp,'string',''); % Tombol Speckle Noise
function btnspeckle_Callback(hObject, eventdata, handles) Citra_Asli = getimage(handles.citraAsli);
citra =Citra_Asli(:,:,:); C=Citra_Asli;
C=im2double(C);
nilai = get(handles.popSpeckle,'Value') if nilai == 1
probabilitas = 0.01 elseif nilai == 2
probabilitas =0.05 elseif nilai == 3 probabilitas =0.1 elseif nilai == 4 probabilitas =0.15 end
Noise_Speckle = C + sqrt(12*probabilitas)*C.*(rand(size(C))-0.5); Citra_Speckle = Noise_Speckle(:,:,:);
axes(handles.citraNoise); imshow(Noise_Speckle);
set(handles.textnoise,'String','Speckle');
msgbox('Noise Speckle berhasil ditambahkan, Silahkan diFilter ','Sukses');
% Tombol Uniform Noise
function btnuniform_Callback(hObject, eventdata, handles) Citra_Asli = getimage(handles.citraAsli);
citra =Citra_Asli(:,:,:); C=Citra_Asli;
var_a = get(handles.popa,'Value') if var_a == 1
a = 0.01 elseif var_a == 2 a =0.1
else a =1 end
var_b = get(handles.popa,'Value') if var_b == 1
b = 0.1 else
b =0.5 end
Citra_Uniform = C + (a+(b-a) * rand(size(C))); if Citra_Uniform > 255
Citra_Uniform = 255; elseif Citra_Uniform < 0 Citra_Uniform = 0; end
axes(handles.citraNoise); imshow(Citra_Uniform);
set(handles.textnoise,'String','Uniform');
msgbox('Noise Uniform berhasil ditambahkan, Silahkan diFilter ','Sukses');
% Tombol Filter
function btnFilter_Callback(hObject, eventdata, handles) %ProgressBar
itr = 100000; %number of iteration process
h=waitbar(0,'Please wait..'); %initialization progressbar vblock = 100; %update progressbar every vblock
k = 1;
for i=1:itr %loop data
if(k*vblock==i) %update progressbar
waitbar(i/itr); %setting progressbar k = k+1;
end% PROCESS FUNCTION end
close(h); %close progressbar %MIDPOINT FILTER
global runtimeMid; runtimeMid= cputime;
temp = getimage(handles.citraNoise); [m,n,c] = size(temp);
ukuran = 3;
setengah = floor(ukuran / 2); Citra_Midpoint = temp;
for i = 1+setengah : m-setengah for j = 1+setengah: n-setengah
for co = 1:c %co menerangkan color maskP = zeros(3,3);
for k = -setengah : setengah for l = -setengah : setengah
end end
midP=maskP(:);
midP=(min(midP)+max(midP))/2; Citra_Midpoint(i,j,co) = midP; end
end end
axes(handles.citraHasilMid); imshow(Citra_Midpoint);
runtimeMid = cputime -runtimeMid; global runtimeMid;
%Yp MEAN FILTER global runtimeYp; runtimeYp = cputime;
temp = getimage(handles.citraNoise); [m,n,c] = size(temp);
ukuran = 3; orde = 2;
setengah = floor(ukuran / 2); citra_Yp = double(temp); for i=1+setengah : m-setengah for j=1+setengah: n-setengah for co = 1:c
jum = 0;
for p = -setengah : setengah for q = -setengah : setengah
jum = jum + temp(i+p, j+q,co)^orde / (ukuran * ukuran);
end end
citra_Yp(i,j,co) = jum ^ (1/orde); end
end end
axes(handles.citraHasilYp); imshow(citra_Yp);
msgbox('Proses Filter Berhasil!','Sukses'); %Runtime proses YP
runtimeYp = cputime -runtimeYp; global runtimeYp;
%Hitung MSE & PSNR
CA = getimage(handles.citraAsli); CM = getimage(handles.citraHasilMid); CY = getimage(handles.citraHasilYp);
NilaiMSE_1 =sum(( double(CA)-double(CM).^2)/(m*n)); NilaiMSEMid = sum(NilaiMSE_1)
NilaiMSE_2 =sum(( double(CA)-double(CY).^2)/(m*n)); NilaiMSEYp = sum(NilaiMSE_2)
set(handles.editpsnrmidR,'String',NilaiPSNRMid(:,:,1)); set(handles.editmsemidG,'String',NilaiMSEMid(:,:,2)); set(handles.editpsnrmidG,'String',NilaiPSNRMid(:,:,2)); set(handles.editmsemidB,'String',NilaiMSEMid(:,:,3)); set(handles.editpsnrmidB,'String',NilaiPSNRMid(:,:,3)); set(handles.editmid,'String',runtimeMid);
set(handles.editmseypR,'String',NilaiMSEYp(:,:,1)); set(handles.editpsnrypR,'String',NilaiPSNRYp(:,:,1)); set(handles.editmseypG,'String',NilaiMSEYp(:,:,2)); set(handles.editpsnrypG,'String',NilaiPSNRYp(:,:,2)); set(handles.editmseypB,'String',NilaiMSEYp(:,:,3)); set(handles.editpsnrypB,'String',NilaiPSNRYp(:,:,3)); set(handles.edityp,'String',runtimeYp);
%Tombol Save Citra Noise
function saveNoise_Callback(hObject, eventdata, handles) [name,path] = uiputfile({'*.bmp'},'Save Image');
if isequal([name,path],[0,0]) return
else
Hasil = getimage(handles.citraNoise); imwrite(Hasil, strcat(path,name)); end
% Tombol Save Citra Midpoint
function btnSaveMid_Callback(hObject, eventdata, handles) [name,path] = uiputfile({'*.bmp'},'Save Image');
if isequal([name,path],[0,0]) return
else
Hasil = getimage(handles.citraHasilMid); imwrite(Hasil, strcat(path,name));
end
% Tombol Save Citra Yp Mean
function btnSaveYp_Callback(hObject, eventdata, handles) [name,path] = uiputfile({'*.bmp'},'Save Image');
if isequal([name,path],[0,0]) return
else
Hasil = getimage(handles.citraHasilYp); imwrite(Hasil, strcat(path,name)); end
%
-function home_Callback(hObject, eventdata, handles) ProgramFilter;
delete(handles.figure1);
%
-function filter_Callback(hObject, eventdata, handles)
%
-function help_Callback(hObject, eventdata, handles) FormHelp;
%
-function about_Callback(hObject, eventdata, handles) FormAbout;
delete(handles.figure1);
%
-function exit_Callback(hObject, eventdata, handles)
selection = questdlg(['Keluar dari Aplikasi ini ?'],['Keluar dari Aplikasi ini ...'],'Ya','Tidak','Ya');
if strcmp(selection,'Tidak') return;
end;
delete(handles.figure1);
%
-function submenuNonoise_Callback(hObject, eventdata, handles) formNoNoise;
delete(handles.figure1);
3. Form Proses filter dengan citra yang sudah memiliki noise
function varargout = formNoNoise(varargin) % FORMNONOISE M-file for formNoNoise.fig % Begin initialization code - DO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @formNoNoise_OpeningFcn, ... 'gui_OutputFcn', @formNoNoise_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
% --- Executes just before formNoNoise is made visible.
function formNoNoise_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject; guidata(hObject, handles);
function varargout = formNoNoise_OutputFcn(hObject, eventdata, handles)
% Tombol Open file
function btnOpen1_Callback(hObject, eventdata, handles)
[nama_file,nama_path] = uigetfile({'*.bmp','File bmp (*.bmp)'},'Buka File Citra');%'File bmp (*.bmp)'
if ~isequal(nama_file,0)
guidata(hObject,handles); axes(handles.citraAsli); imshow(handles.citra); [m n]=size(handles.citra);
set(handles.panjang,'String',n); set(handles.lebar,'String',m);
msgbox('Citra berhasil diinputkan','Sukses'); else
return; end;
% Tombol Filter Midpoint
function btnFilterMid_Callback(hObject, eventdata, handles) global runtime1;
runtime1 = cputime; %Progress Bar
itr = 100000; %number of iteration process
h=waitbar(0,'Please wait..'); %initialization progressbar vblock = 100; %update progressbar every vblock
k = 1;
for i=1:itr %loop data
if(k*vblock==i) %update progressbar
waitbar(i/itr); %setting progressbar k = k+1;
end
% PROCESS FUNCTION end
close(h) %close progressbar
citraAsli = getimage(handles.citraAsli); citraAsli = im2double(citraAsli);
pro = 0.00001;
temp= citraAsli +sqrt(12*pro)*citraAsli.*(rand(size(citraAsli))-.5); [m,n,c] = size(temp);
ukuran = 3;
setengah = floor(ukuran / 2); Citra_Midpoint = temp;
for i = 1+setengah : m-setengah for j = 1+setengah: n-setengah
for co = 1:c %co menerangkan color maskP = zeros(3,3);
for k = -setengah : setengah for l = -setengah : setengah
maskP(setengah+1-k,setengah+1-l)= temp(i-k,j-l,co); end
end
midP=maskP(:);
midP=(min(midP)+max(midP))/2; Citra_Midpoint(i,j,co) = midP; end
end end
runtime1 = cputime -runtime1; global runtime1;
set(handles.editmid,'String',runtime1); % Tombol Filter Yp Mean
function btnFilterYp_Callback(hObject, eventdata, handles) global runtime;
runtime = cputime; % Speckle 0.001%
citraAsli = getimage(handles.citraAsli); citraAsli = im2double(citraAsli);
pro = 0.00001; %probabilitas noise Speckle 0.001%
temp = citraAsli +sqrt(12*pro)*citraAsli.*(rand(size(citraAsli))-.5);%proses pembangkitan noise Speckle
%Prgress Bar
itr = 100000; %number of iteration process
h=waitbar(0,'Please wait..'); %initialization progressbar vblock = 100; %update progressbar every vblock
k = 1;
for i=1:itr %loop data
if(k*vblock==i) %update progressbar
waitbar(i/itr); %setting progressbar k = k+1;
end end
close(h) %close progressbar [m,n,c] = size(temp);
ukuran = 3; orde = 2;
setengah = floor(ukuran / 2); citra_Yp = double(temp); for i=1+setengah : m-setengah for j=1+setengah: n-setengah
for co = 1:c %co menyatakan color jum = 0;
for p = -setengah : setengah for q = -setengah : setengah
jum = jum + temp(i+p, j+q,co)^orde / (ukuran * ukuran);
end end
citra_Yp(i,j,co) = jum ^ (1/orde); end
end end
axes(handles.citraHasilYp); imshow(citra_Yp);
runtime = cputime -runtime; global runtime;
set(handles.edityp,'String',runtime); % Tombol Save Citra Midpoint
if isequal([name,path],[0,0]) return
else
Hasil = getimage(handles.citraHasilMid); imwrite(Hasil, strcat(path,name));
end
% Tombol Save Citra Yp Mean
function btnSaveYp_Callback(hObject, eventdata, handles) [name,path] = uiputfile({'*.bmp'},'Save Image');
if isequal([name,path],[0,0]) return
else
Hasil = getimage(handles.citraHasilYp); imwrite(Hasil, strcat(path,name)); end
%
-function home_Callback(hObject, eventdata, handles) ProgramFilter;
delete(handles.figure1);
%
-function filter_Callback(hObject, eventdata, handles)
%
-function help_Callback(hObject, eventdata, handles) FormHelp;
delete(handles.figure1);
%
-function about_Callback(hObject, eventdata, handles) FormAbout;
delete(handles.figure1);
%
-function exit_Callback(hObject, eventdata, handles)
selection = questdlg(['Keluar dari Aplikasi ini ?'],['Keluar dari Aplikasi ini ...'],'Ya','Tidak','Ya');
if strcmp(selection,'Tidak') return;
end;
delete(handles.figure1);
%
-function addnoise_Callback(hObject, eventdata, handles) Form_Add_Noise;
delete(handles.figure1); % Tombol Clear
function btnClear_Callback(hObject, eventdata, handles) cla(handles.citraAsli);
cla(handles.citraHasilMid); cla(handles.citraHasilYp);
set(handles.edityp,'string','');
4. Form Help
function varargout = FormHelp(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @FormHelp_OpeningFcn, ... 'gui_OutputFcn', @FormHelp_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
function FormHelp_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
guidata(hObject, handles);
function varargout = FormHelp_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
%
-function home_Callback(hObject, eventdata, handles) ProgramFilter;
delete(handles.figure1);
function filter_Callback(hObject, eventdata, handles) function menuAbout_Callback(hObject, eventdata, handles) FormAbout;
delete(handles.figure1);
function exit_Callback(hObject, eventdata, handles)
selection = questdlg(['Keluar dari Aplikasi ini ?'],['Keluar dari Aplikasi ini ...'],'Ya','Tidak','Ya');
if strcmp(selection,'Tidak') return;
end;
delete(handles.figure1);
function subMenuAdd_Callback(hObject, eventdata, handles) Form_Add_Noise;
delete(handles.figure1);
function subMenuNoNoise_Callback(hObject, eventdata, handles) formNoNoise;
delete(handles.figure1);
function varargout = FormAbout(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @FormAbout_OpeningFcn, ... 'gui_OutputFcn', @FormAbout_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
function FormAbout_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
% Update handles structure guidata(hObject, handles);
function varargout = FormAbout_OutputFcn(hObject, eventdata, handles) foto = imread('Fanny.jpg');
axes(handles.citraAsli); imshow(foto);
varargout{1} = handles.output;
%
-function home_Callback(hObject, eventdata, handles) ProgramFilter;
delete(handles.figure1);
function filter_Callback(hObject, eventdata, handles) function subMenuAdd_Callback(hObject, eventdata, handles) Form_Add_Noise;
delete(handles.figure1);
function subMenuNoNoise_Callback(hObject, eventdata, handles) formNoNoise;
delete(handles.figure1);
function help_Callback(hObject, eventdata, handles) FormHelp;
delete(handles.figure1);
function exit_Callback(hObject, eventdata, handles)
selection = questdlg(['Keluar dari Aplikasi ini ?'],['Keluar dari Aplikasi ini ...'],'Ya','Tidak','Ya');
if strcmp(selection,'Tidak') return;
end;