1. Form Utama - Implementasi dan Perbandingan Metode Midpoint Filter dan Yp Mean Filter untuk Mereduksi Noise pada Citra Digital

  

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); function menuexit_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); 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'); else

  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; C=im2double(C); 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 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 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) NilaiPSNRMid = 20 *log10 (255 / sqrt(NilaiMSEMid)) NilaiPSNRYp = 20 *log10 (255 / sqrt(NilaiMSEYp)) set(handles.editmsemidR,'String',NilaiMSEMid(:,:,1));

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; 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 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) handles.citra=imread(fullfile(nama_path,nama_file));

  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 axes(handles.citraHasilMid); imshow(Citra_Midpoint); 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 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; 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.panjang,'string',''); set(handles.lebar,'string',''); set(handles.editmid,'string','');

  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);

  5. Form About

  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; delete(handles.figure1);

  Nama : Fanny Fairina N Alamat Sekarang : Jln. Kiwi 8 No.177 Perumnas Mandala Medan Alamat Orang Tua : Jln. Kiwi 8 No.177 Perumnas Mandala Medan Telp/Hp : 089623796686 Email

Riwayat Pendidikan

  SD Muhammadiyah 30 Medan dari Tahun 1998 s/d Tahun 2004 SMP Negeri 13 Medan dari Tahun 2004 s/d Tahun 2007 SMU Negeri 8 Medan dari Tahun 2007 s/d Tahun 2010 Universitas Sumatera Utara dari Tahun 2010 s/d Tahun 2014

Keahlian

  Bahasa : Bahasa Indonesia, Bahasa Ingrris Bahasa PEmrograman : MATLAB, C++, C# Kursus yang diikuti TOEFL