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;
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.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')
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);
%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
function btnSaveILP_Callback(~, ~, handles)
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({
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({
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({
Img = getimage(handles.citraIHP);
imwrite(Img, strcat(nama_path,nama_file));
end
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
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.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')
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);
%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.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);
'*.bmp','Windows Bitmap (*.bmp)'; ...
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({
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({
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({
Img = getimage(handles.citraGLP);
imwrite(Img, strcat(nama_path,nama_file));
end
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');
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});
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
% 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
% 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));
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
% 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
% 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);