1. Form Program_Filtering - Implementasi Perbandingan Low-Pass Filtering dan High- Pass Filtering untuk Mereduksi Noise pada Citra Digital
LISTING PROGRAM
1. Form Program_Filtering function varargout = Program_Filtering(varargin) % Begin initialization code - DO NOT EDIT
gui_Singleton = 1; gui_State = struct( 'gui_Name' , mfilename, ...
'gui_Singleton' , gui_Singleton, ... 'gui_OpeningFcn' , @Program_Filtering_OpeningFcn, ...
'gui_OutputFcn' , @Program_Filtering_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 Program_Filtering_OpeningFcn(hObject, ~, handles, varargin)
handles.output = hObject; guidata(hObject, handles); logo = imread ( 'Logo\logo2.png' ); axes(handles.axesLogo); imshow(logo);
function varargout = Program_Filtering_OutputFcn(~, ~, handles)
varargout{1} = handles.output;
function menuprogram_Callback(~, ~, ~) function menuhelp_Callback(~, ~, ~)
FormHelp;
function menuabout_Callback(~, ~, ~)
FormAbout;
function submenu_withnoise_Callback(~, ~, ~)
FormCitraDenganNoise;
function submenu_nonoise_Callback(~, ~, ~)
FormCitraTanpaNoise;
function menuexit_Callback(~, ~, ~)
selection = questdlg( 'Keluar dari Aplikasi ini
?' , 'Exit' , 'Ya' , 'Tidak' , 'Ya' ); if strcmp(selection, 'Tidak' ) return ; end ;
close all ;
2. Form Citra Dengan Noise function varargout = FormCitraDenganNoise(varargin) % Begin initialization code - DO NOT EDIT
gui_Singleton = 1; gui_State = struct( 'gui_Name' , mfilename, ...
'gui_Singleton' , gui_Singleton, ... 'gui_OpeningFcn' , @FormCitraDenganNoise_OpeningFcn, ...
'gui_OutputFcn' , @FormCitraDenganNoise_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 FormCitraDenganNoise_OpeningFcn(hObject, ~, handles,
varargin) handles.output = hObject; guidata(hObject, handles);
function varargout = FormCitraDenganNoise_OutputFcn(~, ~, handles)
varargout{1} = handles.output;
function menuprogram_Callback(~, ~, ~) function menuhelp_Callback(~, ~, ~)
FormHelp;
function menuclose_Callback(~, ~, ~)
close;
function submenu_withnoise_Callback(~, ~, ~) function submenu_nonoise_Callback(~, ~, ~)
FormCitraTanpaNoise; % --- Executes on button press in btnOpen.
function btnOpen_Callback(hObject, ~, handles)
[nama_file, nama_path] = uigetfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Open 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]=size(handles.citra); set(handles.txtnamafile, 'string' ,nama_file); set(handles.txtpanjang, 'string' ,Kolom);
set(handles.txtlebar, 'string' ,Baris); msgbox( 'Citra berhasil diinputkan, Lanjutkan ke
Filtering' , 'Sukses' , 'modal' ); else return ; end ; % --- Executes on button press in btnClear. function btnClear_Callback(hObject, eventdata, handles)
set(handles.txtnamafile, 'string' , '' ); set(handles.txtpanjang, 'string' , '' ); set(handles.txtlebar, 'string' , '' ); cla(handles.citraAsli); cla(handles.citraILP); cla(handles.citraBLP); cla(handles.citraGLP); cla(handles.citraIHP); cla(handles.citraBHP); cla(handles.citraGHP); set(handles.mseILP, 'string' , '-' ); set(handles.psnrILP, 'string' , '-' ); set(handles.runtimeILP, 'string' , '-' ); set(handles.mseBLP, 'string' , '-' ); set(handles.psnrBLP, 'string' , '-' ); set(handles.runtimeBLP, 'string' , '-' ); set(handles.mseGLP, 'string' , '-' ); set(handles.psnrGLP, 'string' , '-' ); set(handles.runtimeGLP, 'string' , '-' ); set(handles.mseIHP, 'string' , '-' ); set(handles.psnrIHP, 'string' , '-' ); set(handles.runtimeIHP, 'string' , '-' ); set(handles.mseBHP, 'string' , '-' ); set(handles.psnrBHP, 'string' , '-' ); set(handles.runtimeBHP, 'string' , '-' ); set(handles.mseGHP, 'string' , '-' ); set(handles.psnrGHP, 'string' , '-' ); set(handles.runtimeGHP, 'string' , '-' );
% --- Executes on button press in btnFilter. function btnFilter_Callback(hObject, eventdata, handles)
Img = getimage(handles.citraAsli); Fs = double(Img); d0 = str2double(get(handles.editCutoff, 'string' )); n = str2double(get(handles.editOrde, 'string' ));
if (isempty(get(handles.editOrde, 'string' ))) &&
(isempty(get(handles.editCutoff, 'string' ))) warndlg( 'Masukkan Nilai Cut-off dan Orde' , 'Error' , 'modal' )
elseif (d0 <= 0) && (n <= 0) warndlg( 'Nilai Cut-off = 0 < d0 < 1; Nilai Orde = 1 < N <
4' , 'Error' , 'modal' ) elseif (isempty(get(handles.editCutoff, 'string' ))) || (d0 <= 0) ||
(d0 > 1) warndlg( 'Nilai Cut-off = 0 < d0 < 1' , 'Error' , 'modal' )
elseif (isempty(get(handles.editOrde, 'string' ))) || (n <= 0) || (n >
4) warndlg( 'Nilai Orde = 1 < N < 4' , 'Error' , 'modal' )
else
R = Fs(:,:,1); G = Fs(:,:,2); B = Fs(:,:,3);
%Ideal Low-pass %global runtimeILP;
runtimeILP = cputime; ilp_R = ilpf(R,d0); ilp_G = ilpf(G,d0); ilp_B = ilpf(B,d0); img_ilp = cat(3, ilp_R, ilp_G, ilp_B); runtimeILP = cputime - runtimeILP; axes(handles.citraILP); imshow(img_ilp); [MSE PSNR] = mse_psnr(Img, img_ilp); set(handles.mseILP, 'String' ,MSE); set(handles.psnrILP, 'String' ,PSNR); set(handles.runtimeILP, 'String' ,runtimeILP);
%Butterworth Low-pass %global runtimeBLP;
runtimeBLP = cputime; blp_R = blpf(R,d0,n); blp_G = blpf(G,d0,n); blp_B = blpf(B,d0,n); img_blp = cat(3, blp_R, blp_G, blp_B); runtimeBLP = cputime - runtimeBLP; axes(handles.citraBLP); imshow(img_blp); [MSE PSNR] = mse_psnr(Img, img_blp); set(handles.mseBLP, 'String' ,MSE); set(handles.psnrBLP, 'String' ,PSNR); set(handles.runtimeBLP, 'String' ,runtimeBLP);
%Gaussian Low-pass %global runtimeGLP;
runtimeGLP = cputime; glp_R = glpf(R,d0); glp_G = glpf(G,d0); glp_B = glpf(B,d0); img_glp = cat(3, glp_R, glp_G, glp_B); runtimeGLP = cputime - runtimeGLP; axes(handles.citraGLP); imshow(img_glp); [MSE PSNR] = mse_psnr(Img, img_glp); set(handles.mseGLP, 'String' ,MSE); set(handles.psnrGLP, 'String' ,PSNR); set(handles.runtimeGLP, 'String' ,runtimeGLP);
%Ideal High-pass
%global runtimeIHP;
runtimeIHP = cputime; ihp_R = ihpf(R,d0); ihp_G = ihpf(G,d0); ihp_B = ihpf(B,d0); img_ihp = cat(3, ihp_R, ihp_G, ihp_B); runtimeIHP = cputime - runtimeIHP; axes(handles.citraIHP); imshow(img_ihp); [MSE PSNR] = mse_psnr(Img, img_ihp); set(handles.mseIHP, 'String' ,MSE); set(handles.psnrIHP, 'String' ,PSNR); set(handles.runtimeIHP, 'String' ,runtimeIHP);
%Butterworth High-pass %global runtimeBHP;
runtimeBHP = cputime; bhp_R = bhpf(R,d0,n); bhp_G = bhpf(G,d0,n); bhp_B = bhpf(B,d0,n); img_bhp = cat(3, bhp_R, bhp_G, bhp_B); runtimeBHP = cputime - runtimeBHP; axes(handles.citraBHP); imshow(img_bhp); [MSE PSNR] = mse_psnr(Img, img_bhp); set(handles.mseBHP, 'String' ,MSE); set(handles.psnrBHP, 'String' ,PSNR); set(handles.runtimeBHP, 'String' ,runtimeBHP);
%Gaussian High-pass %global runtimeGHP;
runtimeGHP = cputime; ghp_R = ghpf(R,d0); ghp_G = ghpf(G,d0); ghp_B = ghpf(B,d0); img_ghp = cat(3, ghp_R, ghp_G, ghp_B); runtimeGHP = cputime - runtimeGHP; axes(handles.citraGHP); imshow(img_ghp); [MSE PSNR] = mse_psnr(Img, img_ghp); set(handles.mseGHP, 'String' ,MSE); set(handles.psnrGHP, 'String' ,PSNR); set(handles.runtimeGHP, 'String' ,runtimeGHP);
end % --- Executes on button press in btnSaveNoise. function btnSaveNoise_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraNoise); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveILP.
function btnSaveILP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraILP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveBLP. function btnSaveBLP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraBLP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveGLP. function btnSaveGLP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraGLP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveIHP. function btnSaveIHP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraIHP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveBHP. function btnSaveBHP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return
else
Img = getimage(handles.citraBHP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveGHP. function btnSaveGHP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img= getimage(handles.citraGHP); imwrite(Img, strcat(nama_path,nama_file));
end function editCutoff_Callback(~, ~, ~) function editCutoff_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject, 'BackgroundColor' ),
get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );
end function editOrde_Callback(~, ~, ~) function editOrde_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject, 'BackgroundColor' ),
get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );
end
3. Form Citra Tanpa Noise function varargout = FormCitraTanpaNoise(varargin) % Begin initialization code - DO NOT EDIT
gui_Singleton = 1; gui_State = struct( 'gui_Name' , mfilename, ...
'gui_Singleton' , gui_Singleton, ... 'gui_OpeningFcn' , @FormCitraTanpaNoise_OpeningFcn, ...
'gui_OutputFcn' , @FormCitraTanpaNoise_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 FormCitraTanpaNoise_OpeningFcn(hObject, ~, handles,
varargin) handles.output = hObject; guidata(hObject, handles);
function varargout = FormCitraTanpaNoise_OutputFcn(~, ~, handles)
varargout{1} = handles.output;
function menuProgram_Callback(~, ~, ~) function menuHelp_Callback(~, ~, ~)
FormHelp;
function menuClose_Callback(~, ~, ~)
close;
function submenu_withnoise_Callback(~, ~, ~)
FormCitraDenganNoise;
function submenu_nonoise_Callback(~, ~, ~) function btnOpen_Callback(hObject, ~, handles)
[nama_file, nama_path] = uigetfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Open 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] = size(handles.citra); set(handles.txtnamafile, 'string' ,nama_file); set(handles.txtpanjang, 'string' ,Kolom); set(handles.txtlebar, 'string' ,Baris); uiwait(msgbox( 'Citra berhasil diinputkan, Silahkan Generate Noise
' , 'Success' , 'modal' )); else return ; end ; % --- Executes on button press in btnClear. function btnClear_Callback(~, ~, handles)
set(handles.txtnoise, 'string' , '' ); set(handles.txtnamafile, 'string' , '' ); set(handles.txtpanjang, 'string' , '' ); set(handles.txtlebar, 'string' , '' ); cla(handles.citraAsli); cla(handles.citraNoise); cla(handles.citraILP); cla(handles.citraBLP); cla(handles.citraGLP); cla(handles.citraIHP); cla(handles.citraBHP); cla(handles.citraGHP); set(handles.mseILP, 'string' , '-' ); set(handles.psnrILP, 'string' , '-' ); set(handles.runtimeILP, 'string' , '-' ); set(handles.mseBLP, 'string' , '-' ); set(handles.psnrBLP, 'string' , '-' ); set(handles.runtimeBLP, 'string' , '-' ); set(handles.mseGLP, 'string' , '-' ); set(handles.psnrGLP, 'string' , '-' ); set(handles.runtimeGLP, 'string' , '-' ); set(handles.mseIHP, 'string' , '-' ); set(handles.psnrIHP, 'string' , '-' ); set(handles.runtimeIHP, 'string' , '-' ); set(handles.mseBHP, 'string' , '-' ); set(handles.psnrBHP, 'string' , '-' ); set(handles.runtimeBHP, 'string' , '-' ); set(handles.mseGHP, 'string' , '-' ); set(handles.psnrGHP, 'string' , '-' ); set(handles.runtimeGHP, 'string' , '-' ); % --- Executes on button press in btnExpo.
function btnExpo_Callback(~, ~, handles)
img = getimage(handles.citraAsli); P = str2double(get(handles.editExpo, 'string' ));
if (isempty(get(handles.editExpo, 'string' )))
warndlg( 'Masukkan Nilai Probabilitas' , 'Error' , 'modal' )
elseif (P <= 0) || (P > 10)
warndlg( 'Nilai probabilitas = 0 < Probabilitas <=
10' , 'Error' , 'modal' ) else
P = P/100; Img = noiseexponential(img,P); axes(handles.citraNoise); imshow(Img); [MSE PSNR] = mse_psnr(img, Img); set(handles.mse, 'String' ,MSE); set(handles.psnr, 'String' ,PSNR); set(handles.txtnoise, 'string' , 'Exponential Noise' ); uiwait(msgbox( 'Noise Eksponensial berhasil ditambahkan, Lanjutkan
ke proses Filtering' , 'Success' , 'modal' )); end % --- Executes on button press in btnRayleigh. function btnRayleigh_Callback(~, ~, handles)
img = getimage(handles.citraAsli); A = str2double(get(handles.editA, 'string' )); B = str2double(get(handles.editB, 'string' ));
if (isempty(get(handles.editA, 'string' ))) &&
(isempty(get(handles.editB, 'string' ))) warndlg( 'Masukkan Nilai A dan B' , 'Error' , 'modal' )
elseif (A <= 0) && (B <= 0) warndlg( 'Nilai A = 10 < A < 100; Nilai B = 250 < B <
2500' , 'Error' , 'modal' ) elseif (isempty(get(handles.editA, 'string' ))) || (A <= 0) || (A >
100) warndlg( 'Nilai 10 < A < 100' , 'Error' , 'modal' )
elseif (isempty(get(handles.editB, 'string' ))) || (B <= 0) || (B >
2500) warndlg( 'Nilai 250 < B < 2500' , 'Error' , 'modal' )
else
Img = noiserayleigh(img,A,B); axes(handles.citraNoise); imshow(Img); [MSE PSNR] = mse_psnr(img, Img); set(handles.mse, 'String' ,MSE); set(handles.psnr, 'String' ,PSNR); set(handles.txtnoise, 'string' , 'Rayleigh Noise' ); uiwait(msgbox( 'Noise Rayleigh berhasil ditambahkan, Lanjutkan ke
proses Filtering ' , 'Success' , 'modal' )); end % --- Executes on button press in btnFilter. function btnFilter_Callback(~, ~, handles)
citra_asli = getimage(handles.citraAsli); Img = getimage(handles.citraNoise); Fs = double(Img); d0 = str2double(get(handles.editCutoff, 'string' )); n = str2double(get(handles.editOrde, 'string' ));
if (isempty(get(handles.editOrde, 'string' ))) &&
(isempty(get(handles.editCutoff, 'string' ))) warndlg( 'Masukkan Nilai Cut-off dan Orde' , 'Error' , 'modal' )
elseif (d0 <= 0) && (n <= 0)
warndlg( 'Nilai Cut-off = 0 < d0 < 1; Nilai Orde = 1 < N <
4' , 'Error' , 'modal' ) elseif (isempty(get(handles.editCutoff, 'string' ))) || (d0 <= 0) ||
(d0 > 1) warndlg( 'Nilai Cut-off = 0 < d0 < 1' , 'Error' , 'modal' )
elseif (isempty(get(handles.editOrde, 'string' ))) || (n <= 0) || (n >
4) warndlg( 'Nilai Orde = 1 < N < 4' , 'Error' , 'modal' )
else
R = Fs(:,:,1); G = Fs(:,:,2); B = Fs(:,:,3);
%Ideal Low-pass %global runtimeILP;
runtimeILP = cputime; ilp_R = ilpf(R,d0); ilp_G = ilpf(G,d0); ilp_B = ilpf(B,d0); img_ilp = cat(3, ilp_R, ilp_G, ilp_B); runtimeILP = cputime - runtimeILP; axes(handles.citraILP); imshow(img_ilp); [MSE PSNR] = mse_psnr(citra_asli, img_ilp); set(handles.mseILP, 'String' ,MSE); set(handles.psnrILP, 'String' ,PSNR); set(handles.runtimeILP, 'String' ,runtimeILP);
%Butterworth Low-pass %global runtimeBLP;
runtimeBLP = cputime; blp_R = blpf(R,d0,n); blp_G = blpf(G,d0,n); blp_B = blpf(B,d0,n); img_blp = cat(3, blp_R, blp_G, blp_B); runtimeBLP = cputime - runtimeBLP; axes(handles.citraBLP); imshow(img_blp); [MSE PSNR] = mse_psnr(citra_asli, img_blp); set(handles.mseBLP, 'String' ,MSE); set(handles.psnrBLP, 'String' ,PSNR); set(handles.runtimeBLP, 'String' ,runtimeBLP);
%Gaussian Low-pass %global runtimeGLP;
runtimeGLP = cputime; glp_R = glpf(R,d0); glp_G = glpf(G,d0); glp_B = glpf(B,d0); img_glp = cat(3, glp_R, glp_G, glp_B); runtimeGLP = cputime - runtimeGLP; axes(handles.citraGLP); imshow(img_glp); [MSE PSNR] = mse_psnr(citra_asli, img_glp); set(handles.mseGLP, 'String' ,MSE); set(handles.psnrGLP, 'String' ,PSNR); set(handles.runtimeGLP, 'String' ,runtimeGLP);
%Ideal High-pass %global runtimeIHP;
runtimeIHP = cputime; ihp_R = ihpf(R,d0); ihp_G = ihpf(G,d0); ihp_B = ihpf(B,d0); img_ihp = cat(3, ihp_R, ihp_G, ihp_B); runtimeIHP = cputime - runtimeIHP; axes(handles.citraIHP); imshow(img_ihp); [MSE PSNR] = mse_psnr(citra_asli, img_ihp); set(handles.mseIHP, 'String' ,MSE); set(handles.psnrIHP, 'String' ,PSNR); set(handles.runtimeIHP, 'String' ,runtimeIHP);
%Butterworth High-pass %global runtimeBHP;
runtimeBHP = cputime; bhp_R = bhpf(R,d0,n); bhp_G = bhpf(G,d0,n); bhp_B = bhpf(B,d0,n); img_bhp = cat(3, bhp_R, bhp_G, bhp_B); runtimeBHP = cputime - runtimeBHP; axes(handles.citraBHP); imshow(img_bhp); [MSE PSNR] = mse_psnr(citra_asli, img_bhp); set(handles.mseBHP, 'String' ,MSE); set(handles.psnrBHP, 'String' ,PSNR); set(handles.runtimeBHP, 'String' ,runtimeBHP);
%Gaussian High-pass %global runtimeGHP;
runtimeGHP = cputime; ghp_R = ghpf(R,d0); ghp_G = ghpf(G,d0); ghp_B = ghpf(B,d0); img_ghp = cat(3, ghp_R, ghp_G, ghp_B); runtimeGHP = cputime - runtimeGHP; axes(handles.citraGHP); imshow(img_ghp); [MSE PSNR] = mse_psnr(citra_asli, img_ghp); set(handles.mseGHP, 'String' ,MSE); set(handles.psnrGHP, 'String' ,PSNR); set(handles.runtimeGHP, 'String' ,runtimeGHP);
end % Fungsi Exponential Noise function [G] = noiseexponential(F, a)
[m, n, o] = size(F); F = double(F); G = zeros(m, n, o);
for i=1 : m for j=1 : n for k=1 : o
noise = -1/a * log(1 - rand); G(i,j,k) = round(F(i,j,k) + noise);
if G(i,j,k) > 255
G(i,j,k) = 255;
end end end end
G = uint8(G);
% Fungsi Rayleigh Noise function [G] = noiserayleigh(F, a, b)
[m, n, o] = size(F); F = double(F); G = zeros(m, n, o);
for i=1 : m for j=1 : n for k=1 : o
noise = a + sqrt(-b * log(1 - rand)); G(i,j,k) = round(F(i,j,k) + noise);
if G(i,j,k) > 255
G(i,j,k) = 255;
end end end end
G = uint8(G); % --- Executes on button press in btnSaveNoise.
function btnSaveNoise_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({
'*.bmp' , 'Windows Bitmap (*.bmp)' ; ... '*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraNoise); imwrite(Img, strcat(nama_path,nama_file));
%H = msgbox('Citra Noise berhasil disimpan','Success','modal'); end % --- Executes on button press in btnSaveILP. function btnSaveILP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraILP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveBLP. function btnSaveBLP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraBLP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveGLP. function btnSaveGLP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraGLP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveIHP. function btnSaveIHP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraIHP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveBHP. function btnSaveBHP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img = getimage(handles.citraBHP); imwrite(Img, strcat(nama_path,nama_file));
end % --- Executes on button press in btnSaveGHP. function btnSaveGHP_Callback(~, ~, handles)
[nama_file,nama_path] = uiputfile({ '*.bmp' , 'Windows Bitmap (*.bmp)' ; ...
'*.png' , 'Portable Network Graphics (*.png)' }, ... 'Save File Citra' ); if isequal([nama_file,nama_path],[0,0]) return else
Img= getimage(handles.citraGHP); imwrite(Img, strcat(nama_path,nama_file));
end function editExpo_Callback(~, ~, ~) function editExpo_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject, 'BackgroundColor' ),
get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );
end function editA_Callback(~, ~, ~) function editA_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject, 'BackgroundColor' ),
get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );
end function editB_Callback(~, ~, ~) function editB_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject, 'BackgroundColor' ),
get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );
end function editCutoff_Callback(~, ~, ~) function editCutoff_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject, 'BackgroundColor' ),
get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );
end
function editOrde_Callback(~, ~, ~) function editOrde_CreateFcn(hObject, ~, ~) if ispc && isequal(get(hObject, 'BackgroundColor' ),
get(0, 'defaultUicontrolBackgroundColor' )) set(hObject, 'BackgroundColor' , 'white' );
end
4. Form Help function varargout = FormHelp(varargin) % Begin initialization code - DO NOT EDIT
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 % End initialization code - DO NOT EDIT function FormHelp_OpeningFcn(hObject, ~, handles, varargin)
handles.output = hObject; guidata(hObject, handles);
function varargout = FormHelp_OutputFcn(~, ~, handles)
varargout{1} = handles.output;
function menuHelp_Callback(~, ~, ~) function menuclose_Callback(~, ~, ~)
close;
5. Form About function varargout = FormAbout(varargin) % Begin initialization code - DO NOT EDIT
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, ~, handles, varargin)
handles.output = hObject; guidata(hObject, handles); foto = imread ( 'Logo\IMG_0004.jpg' ); axes(handles.axesFoto); imshow(foto);
function varargout = FormAbout_OutputFcn(~, ~, handles)
varargout{1} = handles.output;
function menuabout_Callback(~, ~, ~) function menuclose_Callback(~, ~, ~)
close;
6. Fungsi ilpf.m
function F = ilpf(Fs, d0) % Berdasarkan buku 'Teori dan Aplikasi Pengolahan Citra' % oleh: Abdul Kadir & Adhi Susanto % hal : 157-158
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid
idx = find(u > q/2); u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u);
% Hitung jarak D(v,u)
D = sqrt(V.^2 + U.^2);
% Hitung frekuensi ambang sebesar d0 kali lebar citra
ambang = d0 * q;
% Peroleh fungsi transfer
Hf = double(D <= ambang);
% Transformasi via FFT dengan zero padding
Ff = fft2(Fs, p, q);
% Pemfilteran
G = Hf.* Ff;
% Transformasi balik
F = real(ifft2(G)); F = uint8(F(1:a, 1:b));
7. Fungsi ihpf.m
function F = ihpf(Fs, d0) % Berdasarkan buku 'Teori dan Aplikasi Pengolahan Citra' % oleh: Abdul Kadir & Adhi Susanto
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid
idx = find(u > q/2); u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u);
% Hitung jarak D(v,u)
D = sqrt(V.^2 + U.^2);
% Hitung frekuensi ambang
ambang = d0 * p; Hlr = double(D <= ambang); % Lolos-rendah Hlt = 1 - Hlr; % Lolos-tinggi
% Transformasi via FFT dengan zero padding
Ff = fft2(Fs, p, q);
% Pemfilteran
G = Hlt .* Ff;
% Transformasi balik
F = real(ifft2(G)); F = uint8(F(1:a, 1:b));
8. Fungsi blpf.m function F = blpf(Fs, d0, n) % Berdasarkan buku 'Teori dan Aplikasi Pengolahan Citra' % oleh: Abdul Kadir & Adhi Susanto % hal : 159-160
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid
idx = find(u > q/2); u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u);
% Hitung jarak D(v,u)
D = sqrt(V.^2 + U.^2);
% Menentukan n kalau n tidak disebutkan if nargin == 2
n = 1;
end % Hitung frekuensi ambang
ambang = d0 * p; Hf = 1 ./ (1 + (D ./ ambang) .^(2 * n));
% Transformasi via FFT dengan zero padding
Ff = fft2(Fs, p, q);
% Pemfilteran
G = Hf .* Ff;
% Transformasi balik
F = real(ifft2(G)); F = uint8(F(1:a, 1:b));
9. Fungsi bhpf.m function F = bhpf(Fs, d0, n) % Berdasarkan buku 'Teori dan Aplikasi Pengolahan Citra' % oleh: Abdul Kadir & Adhi Susanto % hal : 165-166
[a, b] = size(Fs); r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid
idx = find(u > q/2); u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u); D = sqrt(V.^2 + U.^2);
% Menentukan n kalau n tidak disebutkan if nargin == 2
n = 1;
end
ambang = d0 * p; Hlr = 1 ./ (1 + (D ./ ambang) .^(2 * n)); % Lolos-rendah Hlt = 1 - Hlr; % Lolos-tinggi Ff = fft2(Fs, p, q); G = Hlt .* Ff; F = real(ifft2(G)); F = uint8(F(1:a, 1:b));
10. Fungsi glpf.m
function F = glpf(Fs, d0) % Berdasarkan buku 'Teori dan Aplikasi Pengolahan Citra' % oleh: Abdul Kadir & Adhi Susanto % hal : 152-163
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid
idx = find(u > q/2); u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u);
% Hitung jarak D(v,u)
D = sqrt(V.^2 + U.^2);
% Hitung frekuensi ambang
ambang = d0 * p; Hf = exp(-(D.^2) ./ (2 * ambang ^ 2));
% Transformasi via FFT dengan zero padding
Ff = fft2(Fs, p, q);
% Pemfilteran
G = Hf .* Ff;
% Transformasi balik
F = real(ifft2(G)); F = uint8(F(1:a, 1:b));
11. Fungsi ghpf.m
function F = ghpf(Fs, d0) % Berdasarkan buku 'Teori dan Aplikasi Pengolahan Citra' % oleh: Abdul Kadir & Adhi Susanto
[a, b] = size(Fs); %Peroleh ukuran citra r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid
idx = find(u > q/2); u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u); D = sqrt(V.^2 + U.^2); ambang = d0 * p; Hlr = exp(-(D.^2) ./ (2 * ambang ^ 2)); % Lolos-rendah Hlt = 1 - Hlr; % Lolos-tinggi Ff = fft2(Fs, p, q); G = Hlt .* Ff; F = real(ifft2(G)); F = uint8(F(1:a, 1:b));
12. Fungsi mse_psnr.m
function [MSE, PSNR] = mse_psnr(citra_asli, Ihat)
[a b] = size(citra_asli); mseRImage = (double(citra_asli(:,:,1)) - double(Ihat(:,:,1))) .^ 2; mseGImage = (double(citra_asli(:,:,2)) - double(Ihat(:,:,2))) .^ 2; mseBImage = (double(citra_asli(:,:,3)) - double(Ihat(:,:,3))) .^ 2; mseR = sum(sum(mseRImage))/(a*b); mseG = sum(sum(mseGImage))/(a*b); mseB = sum(sum(mseBImage))/(a*b); MSE = (mseR + mseG + mseB)/3; PSNR = 10 * log10( 255^2 / MSE);
end
CURRICULUM VITAE
1. DATA PRIBADI
Nama Lengkap : NURUL ULFAH PRIMADINI Nama Panggilan : Dini Tempat/Tgl. Lahir : Yogyakarta / 31 Januari 1991 Jenis Kelamin : Perempuan Agama : Islam Warga Negara : Indonesia Alamat : Komplek Wisma Lapai Jaya Blok i/2 Padang 25142 No. Telp./HP : - / 081267448080 Email : nu.primadini@gmail.com Status : Belum Menikah
PENGALAMAN KERJA PELATIHAN/SEMINAR
Seminar “Career Day” 2014
2013
2011 2. Seminar Nasional Kongres Nasional ILP2MI “Pencaplokan Budaya”
Seminar Teknologi Informasi “The Development of Modern Operating System Technology: Android - The New Trend in Modern Operating System”.
No. Nama Kursus/Pelatihan/Seminar Tahun
1.Asisten Laboratorium (Sistem Manajemen Database) 2013
IKLC (Ilmu Komputer Laboratory Center )
Asisten Laboratorium (Sistem Database) 2013 2.
IKLC (Ilmu Komputer Laboratory Center )
5. S1 Ilmu Komputer Universitas Sumatera Utara 2010 - 2015
No. Instansi/Unit Jabatan/Posisi Tahun
1.
4. SMA Nurul Ikhlas Tanah Datar 2006 - 2009
3. SMP Nurul Ikhlas Tanah Datar 2003 - 2006
1. SD Pertiwi 2 Padang 1997 - 2003
No. Nama Sekolah Tahun
3. Pelatihan Jurnalistik
– METRO TV ON CAMPUS
2013 4.
No SKILL Keterangan
1. Bahasa Indonesia, English, Arab
2. Pemrograman Pascal, Matlab,
3. Database MySQL Demikian daftar riwayat hidup ini saya buat dengan sebenarnya.
Hormat saya, Nurul Ulfah Primadini