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