Perbandingan Algoritma Wiener Dan Lucy-Richardson Untuk Memperbaiki Kualitas Citra
LISTING PROGRAM
1. Form Awal
function FormAwal_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject; guidata(hObject, handles);
function varargout = FormAwal_OutputFcn(hObject, eventdata, handles) citra_asli=imread('logo_usu.jpg'); citra_hasil=double(citra_asli); citra_hasil=uint8(citra_hasil); axes(handles.axes1); imshow(citra_hasil);
varargout{1} = handles.output;
function Wiener_Callback(hObject, eventdata, handles) Tesku
close FormAwal;
function Blind_Deconvolotion_Callback(hObject, eventdata, handles)
BlindDeconvolution close FormAwal;
function Bantuan_Callback(hObject, eventdata, handles) Bantuan
close FormAwal;
function Keluar_Callback(hObject, eventdata, handles) selection=questdlg(['Anda Ingin Keluar'],...
['Button Keluar'],... 'Yes','No','Yes'); if strcmp(selection,'No') return; end delete(handles.figure1)
II. Form Wiener
function varargout = Tesku(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Tesku_OpeningFcn, ... 'gui_OutputFcn', @Tesku_OutputFcn, ... 'gui_LayoutFcn', [] , ...
(2)
'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 global gb; global B; global noise; global PSF; global g; global Len; global teta;
function pushbutton1_Callback(hObject, eventdata, handles) [nama_file, namaPath]=uigetfile({'*.jpg; *.bmp; *tif; '},'Buka File');
if ~isequal (nama_file,0)
handles.citra=imread(fullfile(namaPath,nama_file)); guidata(hObject,handles); axes(handles.axes1); set(imshow(handles.citra)); info=imfinfo(fullfile(namaPath,nama_file)); set(handles.edit7,'String',info.Filename); set(handles.edit8,'String',info.Format); set(handles.edit9,'String',info.FileSize); set(handles.edit10,'String',info.FileModDate); else return; end
function pushbutton2_Callback(hObject, eventdata, handles) global gb; global noise; global PSF; global runtimeblur; runtimeblur=cputime; Len=str2num(get(handles.Len,'string')); teta=str2num(get(handles.theta,'string')); noise=getimage(handles.axes1); PSF=fspecial('motion',Len,teta); gb=imfilter(noise,PSF,'circular','conv'); axes(handles.axes2); imshow(gb); runtimeblur=cputime-runtimeblur;
function pushbutton3_Callback(hObject, eventdata, handles) global gb;
global g;
(3)
global noise;
runtimenoise=cputime;
A=str2double(get(handles.nilai,'string')); A=A/100;
b=imnoise(noise,'salt & pepper',A); g=gb+b;
axes(handles.axes3); imshow(g);
runtimenoise=cputime-runtimenoise;
function pushbutton4_Callback(hObject, eventdata, handles) global B; global g; global noise; global PSF; global runtimewiener; global A; runtimewiener=cputime; noise1=getimage(handles.axes2); gb=imfilter(noise1,PSF,'circular','conv'); A=str2double(get(handles.nilai,'string')); A=A/100; pilih=handles.pilih switch handles.pilih case 1
M = getimage(handles.axes2); x = rand(size(M));
d = find(x < A/2);
M(d) = 255; % Minimum value
d = find(x >= A/2 & x < A);
M(d) = 0; % Maximum (saturated) value
N=uint8(M);
case 2
b1=getimage(handles.axes2); [r c d] = size (b1);
x=1:r; y=1:c; z=1:d;
E = double(b1(x,y,1)); F = double(b1(x,y,2)); G = double(b1(x,y,3));
M(x,y,1) = E +sqrt (12*A)*E.*(rand(size(E))-.5); M(x,y,2) = F +sqrt (12*A)*F.*(rand(size(F))-.5); M(x,y,3) = G +sqrt (12*A)*G.*(rand(size(G))-.5);
N=uint8(M);
(4)
case 3
b2 = getimage(handles.axes2); [r c d] = size (b2);
x=1:r; y=1:c; z=1:d;
E = double(b2(x,y,1)); F = double(b2(x,y,2)); G = double(b2(x,y,3));
M(x,y,1) = E +sqrt (A)*(rand(size(E))); M(x,y,2) = F +sqrt (A)*(rand(size(F))); M(x,y,3) = G +sqrt (A)*(rand(size(G))); N=uint8(M); end g=gb+N; Sn=(abs(fft2(N))).^2; nA=sum(Sn(:))/prod(size(N)); Sf=(abs(fft2(noise1))).^2; fA=sum(Sf(:))/prod(size(noise1)); NCORR=fftshift(real(ifft(Sn))); ICORR=fftshift(real(ifft(Sf))); fr3=deconvwnr(g,PSF,NCORR,ICORR); axes(handles.axes4); imshow(fr3); runtimewiener=cputime-runtimewiener;
function pushbutton5_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes3);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text1,'String',mseval);
function pushbutton6_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes3);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text2,'String',psnrval);
function pushbutton7_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes4);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text3,'String',mseval);
function pushbutton8_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes4);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text4,'String',psnrval);
(5)
function pushbutton9_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes5);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text5,'String',mseval);
function pushbutton10_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes5);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text6,'String',psnrval);
function pushbutton11_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes2);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text7,'String',mseval);
function pushbutton12_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes2);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text8,'String',psnrval);
function pushbutton13_Callback(hObject, eventdata, handles) global runtimeblur;
set(handles.text9,'String',runtimeblur);
function pushbutton14_Callback(hObject, eventdata, handles) global runtimewiener;
set(handles.text10,'String',runtimewiener);
function pushbutton15_Callback(hObject, eventdata, handles) global runtimenoise;
set(handles.text11,'String',runtimenoise);
function pushbutton18_Callback(hObject, eventdata, handles) [nama_file, namaPath]=uigetfile({'*.jpg',' File
Jpeg(.*jpg)'},'Buka File'); if ~isequal (nama_file,0)
handles.citra=imread(fullfile(namaPath,nama_file)); guidata(hObject,handles); axes(handles.axes7); imshow(handles.citra); else return; end
function pushbutton19_Callback(hObject, eventdata, handles) global gb;
global noise; global PSF;
global runtimeblur2; runtimeblur2=cputime;
(6)
Len1=str2num(get(handles.len2,'string')); teta2=str2num(get(handles.teta2,'string')); noise=getimage(handles.axes7); PSF=fspecial('motion',Len1,teta2); gb=imfilter(noise,PSF,'circular','conv'); axes(handles.axes8); imshow(gb); runtimeblur2=cputime-runtimeblur2;
function pushbutton23_Callback(hObject, eventdata, handles) global gb; global g; global runtimenoise1; global noise; runtimenoise1=cputime; A=str2double(get(handles.nilai2,'string')); A=A/100;
B=imnoise(noise,'salt & pepper',A); g=gb+B;
axes(handles.axes9); imshow(g);
runtimenoise1=cputime-runtimenoise1;
function pushbutton35_Callback(hObject, eventdata, handles) [nama_file_simpan, path_simpan]=uiputfile(...
{'*.jpeg','file citra (*.jpeg)'; '*.jpeg','citra bmp (*.jpeg)';... '*.*','Semua File (*.*)'},... 'Menyimpan Citra Hasil'); S=getimage(handles.axes4);
imwrite(S,fullfile(path_simpan,nama_file_simpan),'JPEG');
function pushbutton36_Callback(hObject, eventdata, handles) FormAwal
close Tesku;
function pushbutton37_Callback(hObject, eventdata, handles) axes(handles.axes1); plot(0); set(handles.edit7,'string',''); set(handles.edit8,'string',''); set(handles.edit9,'string',''); set(handles.edit10,'string',''); axes(handles.axes2); plot(0); set(handles.Len,'string',''); set(handles.theta,'string',''); set(handles.text7,'String',''); set(handles.text8,'String',''); set(handles.text9,'String',''); set(handles.radiobutton1,'value',0); set(handles.radiobutton2,'value',0); set(handles.gauss,'value',0); axes(handles.axes3); plot(0);
(7)
set(handles.nilai,'string',''); set(handles.text1,'String',''); set(handles.text2,'String',''); set(handles.text11,'String',''); axes(handles.axes5); plot(0); set(handles.text5,'String',''); set(handles.text6,'String',''); set(handles.text40,'String',''); axes(handles.axes4); plot(0); set(handles.text3,'String',''); set(handles.text4,'String',''); set(handles.text10,'string','');
function pushbutton38_Callback(hObject, eventdata, handles) [nama_file_simpan, path_simpan]=uiputfile(...
{'*.jpeg','file citra (*.jpeg)'; '*.jpeg','citra bmp (*.jpeg)';... '*.*','Semua File (*.*)'},... 'Menyimpan Citra Hasil'); G=getimage(handles.axes3);
imwrite(G,fullfile(path_simpan,nama_file_simpan),'JPEG');
function pushbutton39_Callback(hObject, eventdata, handles) global B; global g; global noise; global PSF; global runtimewiener1; global A runtimewiener1=cputime; noise1=getimage(handles.axes2); gb=imfilter(noise1,PSF,'circular','conv'); A=str2double(get(handles.nilai,'string')); A=A/100; pilih=handles.pilih switch handles.pilih case 1
M = getimage(handles.axes2); x = rand(size(M));
d = find(x < A/2);
M(d) = 255; % Minimum value
d = find(x >= A/2 & x < A);
M(d) = 0; % Maximum (saturated) value
N=uint8(M);
case 2
b1=getimage(handles.axes2); [r c d] = size (b1);
x=1:r; y=1:c;
(8)
z=1:d;
E = double(b1(x,y,1)); F = double(b1(x,y,2)); G = double(b1(x,y,3));
M(x,y,1) = E +sqrt (12*A)*E.*(rand(size(E))-.5); M(x,y,2) = F +sqrt (12*A)*F.*(rand(size(F))-.5); M(x,y,3) = G +sqrt (12*A)*G.*(rand(size(G))-.5);
N=uint8(M);
case 3
b2 = getimage(handles.axes2); [r c d] = size (b2);
x=1:r; y=1:c; z=1:d;
E = double(b2(x,y,1)); F = double(b2(x,y,2)); G = double(b2(x,y,3));
M(x,y,1) = E +sqrt (A).*(rand(size(E))); M(x,y,2) = F +sqrt (A).*(rand(size(F))); M(x,y,3) = G +sqrt (A).*(rand(size(G))); N=uint8(M); end D=gb+N; Sn=(abs(fft2(N))).^2; nA=sum(Sn(:))/prod(size(N)); Sf=(abs(fft2(noise1))).^2; fA=sum(Sf(:))/prod(size(noise1)); R=nA/fA; fr2=deconvwnr(D,PSF,R); axes(handles.axes5); imshow(fr2); runtimewiener1=cputime-runtimewiener1;
function radiobutton1_Callback(hObject, eventdata, handles) global gb;
global g;
global runtimenoise; global noise;
global A;
set(handles.text37,'String','salt & pepper'); set(handles.radiobutton1,'Value',1);
set(handles.radiobutton2,'Value',0); set(handles.gauss,'Value',0);
runtimenoise=cputime;
(9)
A=A/100; pilih = 1;
handles.pilih=pilih; guidata(hObject,handles) b = getimage(handles.axes2);; x = rand(size(b));
d = find(x < A/2);
b(d) = 255; % Minimum value
d = find(x >= A/2 & x < A);
b(d) = 0; % Maximum (saturated) value
g=gb+b;
axes(handles.axes3); imshow(g);
runtimenoise=cputime-runtimenoise;
function radiobutton2_Callback(hObject, eventdata, handles) global gb; global g; global runtimenoise; global noise; set(handles.text39,'String','speckle'); set(handles.radiobutton1,'Value',0); set(handles.radiobutton2,'Value',1); set(handles.gauss,'Value',0); runtimenoise=cputime; A=str2double(get(handles.nilai,'string')); A=A/100;
pilih = 2;
handles.pilih=pilih; guidata(hObject,handles) b1=getimage(handles.axes2); [r c d] = size (b1);
x=1:r; y=1:c; z=1:d;
E = double(b1(x,y,1)); F = double(b1(x,y,2)); G = double(b1(x,y,3));
M(x,y,1) = E +sqrt (12*A)*E.*(rand(size(E))-.5); M(x,y,2) = F +sqrt (12*A)*F.*(rand(size(F))-.5); M(x,y,3) = G +sqrt (12*A)*G.*(rand(size(G))-.5); n=uint8(M);
op=gb+n;
axes(handles.axes3); imshow(op);
runtimenoise=cputime-runtimenoise;
(10)
global runtimewiener1; set(handles.text40,'String',runtimewiener1); global gb; global g; global runtimenoise; global noise; set(handles.text39,'String','speckle'); set(handles.radiobutton1,'Value',0); set(handles.radiobutton2,'Value',0); set(handles.gauss,'Value',1); runtimenoise=cputime; A=str2double(get(handles.nilai,'string')); A=A/100;
pilih = 3;
handles.pilih=pilih; guidata(hObject,handles) b2 = getimage(handles.axes2); [r c d] = size (b2);
x=1:r; y=1:c; z=1:d;
E = double(b2(x,y,1)); F = double(b2(x,y,2)); G = double(b2(x,y,3));
M(x,y,1) = E +sqrt (A)*(rand(size(E))); M(x,y,2) = F +sqrt (A)*(rand(size(F))); M(x,y,3) = G +sqrt (A)*(rand(size(G))); n=uint8(M); op1=gb+n; axes(handles.axes3); imshow(op1); runtimenoise=cputime-runtimenoise; III. Lucy-Richardson
function varargout = BlindDeconvolution(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn',
@BlindDeconvolution_OpeningFcn, ... 'gui_OutputFcn', @BlindDeconvolution_OutputFcn, ...
'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1})
(11)
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end global gb; global B; global noise; global PSF; global g; global Len; global teta; global D; global v; global UNDERPSF;
function pushbutton1_Callback(hObject, eventdata, handles) [nama_file, namaPath]=uigetfile({'*.jpg; *.bmp; *.tif'},'Buka File');
if ~isequal (nama_file,0)
handles.citra=imread(fullfile(namaPath,nama_file)); guidata(hObject,handles); axes(handles.axes1); imshow(handles.citra); info=imfinfo(fullfile(namaPath,nama_file)); set(handles.edit5,'String',info.Filename); set(handles.edit6,'String',info.Format); set(handles.edit7,'String',info.FileSize); set(handles.edit8,'String',info.FileModDate); else return; end
function pushbutton2_Callback(hObject, eventdata, handles) global gb; global noise; global PSF; global runtimeblur; runtimeblur=cputime; Len=str2num(get(handles.alfa,'string')); teta=str2num(get(handles.beta,'string')); noise=getimage(handles.axes1); PSF=fspecial('motion',Len,teta); gb=imfilter(noise,PSF,'circular','conv'); axes(handles.axes2); imshow(gb); runtimeblur=cputime-runtimeblur;
function pushbutton3_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes2);
(12)
set(handles.text1,'String',mseval);
function pushbutton4_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes2);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text2,'String',psnrval);
function pushbutton5_Callback(hObject, eventdata, handles) global runtimeblur;
set(handles.text3,'String',runtimeblur);
function pushbutton6_Callback(hObject, eventdata, handles) global gb; global g; global runtimenoise; global noise; runtimenoise=cputime; A=str2double(get(handles.Nilai1,'string')); A=A/100;
B = noise;
x = rand(size(B)); d = find(x < A/2);
B(d) = 0; % Minimum value
d = find(x >= A/2 & x < A);
B(d) = 1; % Maximum (saturated) value
g=gb+B;
axes(handles.axes3); imshow(g);
runtimenoise=cputime-runtimenoise;
function pushbutton7_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes3);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text4,'String',mseval);
function pushbutton8_Callback(hObject, eventdata, handles) global runtimenoise;
set(handles.text6,'String',runtimenoise);
function pushbutton9_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes3);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text5,'String',psnrval);
function pushbutton10_Callback(hObject, eventdata, handles) global B;
global g; global D; global noise; global PSF;
(13)
global UNDERPSF; global runtimeblind1; global gb; global v; runtimeblind1=cputime; H=getimage(handles.axes3); luc1 = deconvlucy(H, PSF, 5); axes(handles.axes4);
imshow(luc1);
runtimeblind1=cputime-runtimeblind1;
function pushbutton11_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes4);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text7,'String',mseval);
function pushbutton12_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes4);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text8,'String',psnrval);
function pushbutton13_Callback(hObject, eventdata, handles) global runtimeblind1;
set(handles.text9,'String',runtimeblind1);
function pushbutton15_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes5);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text10,'String',mseval);
function pushbutton16_Callback(hObject, eventdata, handles) citraAsli=getimage(handles.axes1);
CitraHasil = getimage(handles.axes5);
[psnrval mseval] = MSE_PSNR(citraAsli,CitraHasil); set(handles.text11,'String',psnrval);
function pushbutton17_Callback(hObject, eventdata, handles) global runtimeblind2;
set(handles.text12,'String',runtimeblind2);
function pushbutton18_Callback(hObject, eventdata, handles) [nama_file_simpan, path_simpan]=uiputfile(...
{'*.bmp','file citra (*.bmp)'; '*.bmp','citra bmp (*.bmp)';... '*.*','Semua File (*.*)'},... 'Menyimpan Citra Hasil');
imwrite(handles.hasil,fullfile(path_simpan,nama_file_simpan),'BMP ');
function pushbutton19_Callback(hObject, eventdata, handles) FormAwal
(14)
close BlindDeconvolution;
function pushbutton20_Callback(hObject, eventdata, handles) axes(handles.axes1); plot(0); set(handles.edit5,'string',''); set(handles.edit6,'string',''); set(handles.edit7,'string',''); set(handles.edit8,'string',''); axes(handles.axes2); plot(0); set(handles.alfa,'string',''); set(handles.beta,'string',''); set(handles.text1,'String',''); set(handles.text2,'String',''); set(handles.text3,'String',''); set(handles.salt,'value',0); set(handles.speckle,'value',0); set(handles.gauss,'value',0); axes(handles.axes3); plot(0); set(handles.Nilai1,'string',''); set(handles.text4,'String',''); set(handles.text5,'String',''); set(handles.text6,'String',''); axes(handles.axes4); plot(0); set(handles.text7,'String',''); set(handles.text8,'String',''); set(handles.text9,'String','');
function salt_Callback(hObject, eventdata, handles) global g; global runtimenoise; global noise; global A; set(handles.salt,'Value',1); set(handles.speckle,'Value',0); set(handles.gauss,'Value',0); runtimenoise=cputime; A=str2double(get(handles.Nilai1,'string')); A=A/100;
pilih = 1;
handles.pilih=pilih; guidata(hObject,handles) b = getimage(handles.axes2);; x = rand(size(b));
d = find(x < A/2);
b(d) = 255; % Minimum value
d = find(x >= A/2 & x < A);
b(d) = 0; % Maximum (saturated) value
g=gb+b;
(15)
imshow(g);
runtimenoise=cputime-runtimenoise;
function speckle_Callback(hObject, eventdata, handles) global gb; global g; global runtimenoise; global noise; set(handles.salt,'Value',0); set(handles.speckle,'Value',1); set(handles.gauss,'Value',0); runtimenoise=cputime; A=str2double(get(handles.Nilai1,'string')); A=A/100;
pilih = 2;
handles.pilih=pilih; guidata(hObject,handles) b1=getimage(handles.axes2); [r c d] = size (b1);
x=1:r; y=1:c; z=1:d;
E = double(b1(x,y,1)); F = double(b1(x,y,2)); G = double(b1(x,y,3));
M(x,y,1) = E +sqrt (12*A)*E.*(rand(size(E))-.5); M(x,y,2) = F +sqrt (12*A)*F.*(rand(size(F))-.5); M(x,y,3) = G +sqrt (12*A)*G.*(rand(size(G))-.5); n=uint8(M);
op=gb+n;
axes(handles.axes3); imshow(op);
runtimenoise=cputime-runtimenoise;
function pushbutton21_Callback(hObject, eventdata, handles) [nama_file_simpan, path_simpan]=uiputfile(...
{'*.jpeg','file citra (*.jpeg)'; '*.jpeg','citra bmp (*.jpeg)';... '*.*','Semua File (*.*)'},... 'Menyimpan Citra Hasil'); G=getimage(handles.axes3);
imwrite(G,fullfile(path_simpan,nama_file_simpan),'JPEG'); function gauss_Callback(hObject, eventdata, handles) global gb;
global g;
global runtimenoise; global noise;
(16)
set(handles.salt,'Value',0); set(handles.speckle,'Value',0); set(handles.gauss,'Value',1); runtimenoise=cputime; A=str2double(get(handles.Nilai1,'string')); A=A/100;
pilih = 3;
handles.pilih=pilih; guidata(hObject,handles) b2 = getimage(handles.axes2); [r c d] = size (b2);
x=1:r; y=1:c; z=1:d;
E = double(b2(x,y,1)); F = double(b2(x,y,2)); G = double(b2(x,y,3));
M(x,y,1) = E +sqrt (A)*(rand(size(E))); M(x,y,2) = F +sqrt (A)*(rand(size(F))); M(x,y,3) = G +sqrt (A)*(rand(size(G))); n=uint8(M);
op1=gb+n;
axes(handles.axes3); imshow(op1);
runtimenoise=cputime-runtimenoise;
function pushbutton23_Callback(hObject, eventdata, handles) [nama_file_simpan, path_simpan]=uiputfile(...
{'*.jpeg','file citra (*.jpeg)'; '*.jpeg','citra bmp (*.jpeg)';... '*.*','Semua File (*.*)'},... 'Menyimpan Citra Hasil'); G=getimage(handles.axes4);
imwrite(G,fullfile(path_simpan,nama_file_simpan),'JPEG'); IV. Bantuan
function varargout = Bantuan(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Bantuan_OpeningFcn, ... 'gui_OutputFcn', @Bantuan_OutputFcn, ... 'gui_LayoutFcn', [] , ...
'gui_Callback', []); if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); end
(17)
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else
gui_mainfcn(gui_State, varargin{:}); end
function pushbutton1_Callback(hObject, eventdata, handles) FormAwal
(18)
CURRICULUM VITAE
Nama : Muhammad Huzaifa
Alamat Sekarang : Jl.P.Kemerdekaan, cengkeh turi binjai Alamat Orang tua : Jl.P.Kemerdekaan, cengkeh turi binjai
Telp/Hp : 081265713734
Email : mhuzaifa14@gmail.com
Riwayat Pendidikan
2009-2014 : S1 Ilmu Komputer Universitas Sumatera Utara, Medan 2006-2009 : Yaspend Teladan Binjai
2003-2006 : SMP Negeri 6 Binjai
(19)
(20)
DAFTAR PUSTAKA
[1] Ahmad, Usman. 2005. Pengolahan Citra Digital & Teknik Pemrogramannya. Yogyakarta: Graha Ilmu.
[2] C, Rafael & E, Richard. 2008. Digital Image Processing.3th Edition. Pearson
Education International : Pearson Prentice Hall.
[3] Effensi, Hansi. 2009. Restorasi Citra Kabur (Blur) Menggunakan Algoritma
Wiener. Jurnal. Vol.1, 2009.
[4] Hermawati, F.A. 2013. Pengolahan Citra Digital. Yogyakarta: Penerbit Andi. [5] Munir, Rinaldi. 2004. Pengolahan Citra Digital. Bandung: Penerbit Informatika. [6] Munir, Rinaldi. 2006. Restorasi Citra Kabur dengan Algoritma Lucy- Richardson
dan Perbandingannya Dengan Wiener. Seminar Nasional Aplikasi
Teknologi Informasi 2006 (SNATI 2006) ISSN: 1907-5022 Yogyakarta, 17 Juni 2006.
[7] Prasetyo, Eko . 2011. Pengolahan Citra Digital dan Aplikasinya menggunakan
Matlab. Yogyakarta: Penerbit Andi.
[8] Putra, Darma. 2009. Pengolahan Citra Digital. Yogyakarta: Penerbit Andi.
[9] Richard L. White, Image Restoration Using Damped Richardson-Lucy Method,
ASP Conference Series, Vol. 61, 1994.
[10] Sutoyo, T., Mulyanto, Edi., Suhartono, Vincent., Nurhayati, O.D & Wijanarto 2009. Teori Pengolahan Citra Digital, Yogyakarta: Penerbit Andi.
(21)
BAB III
ANALISIS DAN PERANCANGAN SISTEM
3.1. Analisis Sistem
Analisis sistem merupakan suatu tahapan yang mana dilakukan untuk membantu memahami sesuatu yang dibutuhkan sistem. Hal ini dimaksud untuk membuat sistem tersebut mengetahui permasalahan-permasalahan yang ada sehingga nantinya dapat membantu didalam proses perancangan model suatu sistem yang nantinya akan diimplementasikan.
3.1.1. Analisis Masalah
Blurring yaitu proses pengaburan pada citra. Permasalahan yang dihadapi dalam
perancangan sistem ini yaitu melakukan proses pengembalian citra yang telah terdegradasi (proses restorasi), yaitu citra yang telah mengalami kerusakan akibat proses blurring yang telah diberikan. Hal tersebut dilakukan agar dapat membuktikan apakah kedua metode yang digunakan pada percobaan ini dapat mengurangi degradasi terhadap citra. Masalahnya seberapa besar blur yang diberikan akan berpengaruh terhadap proses restorasi citra. Dengan adanya system ini diharapkan dapat membuktikan pengaruh tersebut.
Permasalah lainnya yaitu dilakukannya proses penambahan beberapa noise. Penambahan noise ini dilakukan setelah proses blurring pada citra. Melakukan percobaan ini untuk mengetahui apakah kedua metode tersebut dapat juga mengurangi
noise. Diagramnya dapat dilihat pada gambar 3.1.
Perbandingan algoritma untuk memperbaiki kualitas citra
Material
User
Metode
Sistem Memberikan kadar
blur dan noise pada citra
Blurring dan Noising Salt and pepper
Citra dengan format *.jpeg dan
*.bmp Wiener filter Lucy-Richardson speckle gaussian Proses Restorasi
(22)
3.1.2. Analisis Kebutuhan Sistem
Analisis kebutuhan sistem ini meliputi analisis kebutuhan fungsional sistem dan analisis non-fungsional sistem.
3.1.2.1. Kebutuhan Fungsional Sistem
Sistem analisis pengaruh blur dan noise pada citra memiliki kebutuhan fungsional yaitu:
1. Masukan yang berupa citra yang memiliki format *.jpeg atau *.bmp yang merupakan citra RGB.
2. Sistem dapat memberikan blur dengan nilai masing-masing yang ditentukan oleh sudut len dan teta.
3. Sistem memberikan noise dengan kadar noise tertentu.
4. Sistem melakukan proses restorasi dengan Wiener filter dan Lucy-Richardson.
3.1.2.2. Kebutuhan Non-Fungsional Sistem
Untuk membantu kinerja sistem secara lebih baik, terdapat kebutuhan non-fungsional sistem yaitu:
1. Tampilan antarmuka sistem dapat dimengerti oleh user atau pengguna sistem. 2. Efektifitas system yang dibangun dapat menyimpan citra hasil dan efisiensi
dapat terlihat dari system yang digunakan tidak memerlukan perangkat tambahan atau perangkat pendukung lainnya yang dapat mengeluarkan biaya tambahan
3. Sistem yang nantinya telah dibuat dapat dikembangkan dengan mudah sehingga sistem dapat tetap digunakan di masa yang akan datang.
3.1.3. Analisis Proses
Dalam proses ini terdapat dua proses yaitu blurring dan nosing. Blurring yaitu proses pemberian blur pada citra inputan. Noising yaitu proses pemberian noise pada citra inputan dimana nilai noise dapat ditentukan. Sedangkan pada proses restorasi
(23)
dilakukan dengan dua cara yaitu Wiener filtering dan Lucy-Richardson. Selanjutnya dilakukan perhitungan MSE, PSNR dan running time pada masing-masing langkah.
3.2. Pemodelan
Pada penelitian mengenai perbandingan algoritma Wiener dan Lucy-Richardson ini digunakan UML sebagai bahasa pemodelan yang berfungsi untuk membantu merancang sistem. Model UML yang digunakan dalam penelitian ini yaitu use case
diagram, sequence diagram, dan activity digaram.
3.2.1. Use Case Diagram
Use case diagram adalah gambaran graphical dari beberapa atau semua actor, use case, dan interaksi diantara komponen-komponen tersebut yang memperkenalkan
suatu system yang akan dibangun. Use case diagram menjelaskan manfaat suatu
system jika dilihat menurut pandangan orang yang berada di luar sistem. Diagram ini
menunjukkan fungsionalitas suatu system atau kelas dan bagaimana system tersebut berinteraksi dengan dunia luar.
Actor1
Wiener Filter
Restorasi citra
«extends»
«extends»
Lucy-Richardson
Bantuan
Gambar 3.2 Use Case Diagram Sistem Perbandingan Algoritma Wiener dan Lucy-Richardson untuk Memperbaiki Kualitas Citra
Pada sistem perbandingan algoritma sistem perbandingan Wiener dan Lucy-Richardson ini terdapat actor yang memiliki pilihan untuk :
a. Memilih Restorasi citra yang dilanjutkan dengan proses Wiener Filter atau Lucy-Richardson.
(24)
b. Bantuan dari penulis.
Berikut ini merupakan tabel dokumen naratif dari use case filter Wiener yang dapat dilihat pada tabel 3.1
Tabel 3.1 Dokumentasi Naratif Proses Wiener Filtering
Nama Use case Wiener Filtering
Actor Pengguna
Description
Use case mendeskripsikan jalannya proses restorasi pada
citra dimulai dari penambahan blur dan penambahan
noise
Pre-Condition Aplikasi siap untuk menerima inputan.
Typical course of
event
Kegiatan pengguna Respon sistem 1. Pengguna memilih
citra yang akan digunakan pada percobaan (*.jpeg atau *.bmp) dengan menekan button
Browse .
2. Sistem akan merespon dengan masuk ke direktori penyimpanan citra
3. Menampilkan citra yang telah dipilih oleh
pengguna 4. Pengguna menginput
sudut blur (len dan teta).
6. Dengan menekan
button MSE,PSNR
dan running time, pengguna dapat mengetahui error dan waktu yang
dibutuhkan untuk citra tersebut.
5. Sistem akan melakukan proses blurring dan menampilkan hasilnya. 7. Menampilkan nilai MSE,
PSNR dan running time.
8. Selanjutnya
menambahkan noise pada citra blur dengan menginput ukuran
noise (dalam %)
kemudian memilih
noise dengan menekan
jenis noise yang diinginkan.
10.Menekan button MSE,
9. Sistem akan menampilkan hasil noising dan blurring pada citra.
(25)
PSNR dan running time untuk
mengetahui error.
PSNR, dan running time.
12. Menekan tombol hasil untuk melihat hasil restorasi yang pertama.
14. Menekan button MSE, PSNR dan running time untuk mengetahui error.
13. Menampilkan hasil restorasi.
15. Menampilkan nilai MSE, PSNR dan Running time. 16. Menekan tombol
hasil 2 untuk melihat hasil restorasi yang kedua.
18. Menekan button MSE, PSNR dan running time.
17. Menampilkan hasil restorasi citra.
19. Menampilkan nilai MSE, PSNR dan running time.
Alternatecourse Tekan tombol Reset
Sistem mengosongkan gambar dan nilai MSE, PSNR dan running time. Post condition Sistem telah melakukan proses filter Wiener yang
menghasilkan citra.
Tabel 3.2 Dokumentasi Naratif Use Case Lucy-Richardson
Nama Use case Proses Lucy-Richardson
Actor Pengguna
Description
Use case mendeskripsikan jalannya proses restorasi pada
citra dimulai dari penambahan blur dan penambahan
noise.
Pre-Condition Aplikasi siap untuk menerima inputan.
Typical course of
event
(26)
1. Pengguna memilih citra yang akan digunakan pada percobaan (*.jpeg atau *.bmp) dengan menekan button
Browse .
2. Sistem akan merespon dengan masuk ke direktori penyimpanan citra.
3. Menampilkan citra yang telah dipilih oleh
pengguna. 4. Pengguna menginput
sudut blur (len dan teta).
6. Dengan menekan
button MSE,PSNR
dan running time, pengguna dapat mengetahui error dan waktu yang
dibutuhkan untuk citra tersebut.
5. Sistem akan melakukan proses blurring dan menampilkan hasilnya. 7. Menampilkan nilai MSE,
PSNR dan running time.
8. Selanjutnya
menambahkan noise pada citra blur dengan menginput ukuran
noise (dalam %)
kemudian memilih
noise dengan menekan
jenis noise yang diinginkan.
10.Menekan button MSE, PSNR dan running time untuk
mengetahui error.
9. Sistem akan
menampilkan hasil noising dan blurring pada citra.
11. Menampilkan nilai MSE, PSNR, dan running time. 12.Menekan tombol hasil
untuk melihat hasil restorasi Lucy.
14.Menekan button MSE, PSNR dan running time untuk
mengetahui error.
13. Menampilkan hasil restorasi.
15. Menampilkan nilai MSE, PSNR dan Running time.
Alternatecourse Tekan tombol Reset
Sistem mengosongkan gambar dan nilai MSE, PSNR dan running time.
(27)
Post condition Sistem telah melakukan proses Lucy-Richardson yang menghasilkan citra
Tabel 3.3 Dokumentasi Naratif Use Case Bantuan
Nama Use case Bantuan
Actor Pengguna
Description Use case ini menjelaskan cara penggunaan dari system
ini.
Pre-Condition Aplikasi siap untuk menerima inputan.
Typical course of
event
Kegiatan pengguna Respon sistem 1. Menekan button
bantuan.
2. Menampilkan isi dari bantuan tersebut.
Alternatecourse Aksi Aktor Respon sistem
Post condition Sistem membuka menu bantuan
3.2.2. Sequence Diagram
Sequence diagram adalah suatu diagram yang memperlihatkan atau menampilkan
interaksi-interaksi antar objek di dalam sistem yang disusun pada sebuah urutan atau rangkain waktu. Sequence diagram digunakan untuk menggambarkan scenario atau rangkaian langkah-langkah yang dilakukan sebagai sebuah respon dari suatu kejadian/even untuk menghasilkan output apa yang dhasilkan.
(28)
Input Citra Blurring Noising Restorasi Citra Hitung nilai MSE,PSNR
dan Running Time Simpan Citra
Penginputan Citra
Proses pemberian blur dengan inputan len dan
teta
Proses pemberian
noise inputan variance (%noise)
Proses restorasi citra dengan wiener filter
dan Lucy-Richardson
Perhitungan nilai MSE, PSNR dan running time
Tampilkan citra hasil restorasi dengan nilai MSE, PSNR dan running time
Gambar 3.3 Sequence Diagram Proses Restorasi Citra
3.2.3. Activity Diagram
Activity Diagram menggambarkan berbagai alir aktivitas dalam sistem yang sedang
dirancang, bagaimana masing-masing alir berawal, decision yang mungkin tejadi, dan bagaimana mereka berakhir. Activity diagram juga dapat menggambarkan proses paralel yang mungkin terjadi pada beberapa eksekusi. Berikut ini merupakan activity
(29)
Browse citra Baca citra *jpeg atau *.bmp
Menampilkan citra Blurring (isi len dan teta yang merupakan sudut blurnya)
Aktor Sistem
Blurring
Menampilkan citra blurring
Noising (mengisi varians noising)
Noising
Menampilkan citra hasil noising
Menekan tombol simpan
Menyimpan hasil ke direktori penyimpanan
Menekan tombol hasil
Menampilkan nilai MSE, PSNR dan Running time
Menekan tombol hasil
Menampilkan citra hasil restorasi yang kedua Menekan tombol MSE,PSNR dan running time
Menampilkan nila MSE,PSNR dan running time
Menekan tombol MSE, PSNR dan running time
Menampilkan nilai MSE, PSNR dan running time
Menampilkan citra hasil restorasi wiener
Menekan tombol MSE, PSNR dan running time Salt and pepper
speckle
gaussian
Menekan tombol MSE,PSNR dan Running time Menampilkan hasil MSE,PSNR dan Running time
Menekan tombol simpan Menyimpan citra hasil ke direktori penyimpanan
(30)
Browse citra *jpeg atau *.bmp Baca citra Menampilkan citra Blurring (mengisi len dan teta sebagai sudut blurnya)
Aktor Sistem
Blurring Menampilkan citra blurring
Noising
Noising
Menampilkan citra hasil noising
Menekan tombol simpan
Menyimpan hasil ke direktori penyimpanan Menekan tombol hasil
Menampilkan hasil MSE,PSNR dan running time Menekan tombol simpan
Menyimpan hasil ke direktori penyimpanan Menekan tombol MSE,PSNR dan running time
Menampilkan nila MSE,PSNR dan running time
Menekan tombol MSE, PSNR dan running time
Menampilkan nilai MSE, PSNR dan running time
Menampilkan citra hasil restorasi lucy Menekan tombol MSE, PSNR dan running time
Salt and pepper speckle gaussian
Gambar 3.5 Activity Diagram Filter Lucy-Richardson 3.3. Pseudocode Program
Pseudocode adalah deskripsi dari algoritma pemrograman komputer yang
menggunakan struktur sederhana dari beberapa bahasa pemograman tetapi bahasa tersebut hanya ditujukan agar dapat dibaca manusia.Tujuan penggunaan utama dari
pseudocode adalah untuk memudahkan manusia dalam memahami prinsip-prinsip dari
suatu algoritma.
(31)
Sn = abs (fft2(noise)).^2; noise power spectrum nA= sum(Sn(: ))/prod(size(noise)); noise average power
Sf= abs(fft2(i)).^2; image power spectrum fA=sum(Sf(: ))/prod(size(i));
R= nA/fA;
Fr2 = deconvwnr(g,wmotion, R);
Gambar 3.6 Pseudocode Filter wiener
Adapun tahapan-tahapan dari metode ini antara lain:
1. kekuatan spectrum noise yaitu diabsolutkan citra bernoise setelah melalui proses fft.
2. Kekuatan noise rata-rata yaitu penjumlahan matriks dari Sn kemudian dibagi perkalian ukuran citra bernoise.
3. Sf merupakan kekuatan spectrum gambar asli yaitu citra asli setelah melalui proses fft.
4. fA merupakan rata-rata kekuatan citra asli. 5. R merupakan ratio konstanta scalar nA/fA 6. Proses penampungan hasilnya.
3.3.2 Pseudocode Filter Wiener dengan autocorrelation
NCORR = fftshift(real(ifft2(Sn))); FCORR=fftshift(real(ifft2(Sf)));
Fr3=deconvwnr(g,wmotion, NCORR, FCORR);
Gambar 3.7 Pseudocode Filter Wiener dengan autocorrelation
Penjelasan :
Ketika nilai spectrum pada citra tidak diketahui maka dilakukan fungsi aucorrelation seperti diatas.
(32)
3.3.3. Pseudocode Salt and Pepper
b = a; <-- Assign b to the input image
x = rand(size(a)); <-- Generate random pixels from the image pixels
d = find(x < p3/2); <-- Find the pixels whose values are less than half of the mean value
b(d) = 0 <-- Implement minimum noise to them
d = find(x >= p3/2 & x < p3) <--- Find the pixels whose values are
greater than half of the mean value & less than mean value b(d) = 1; <-- Implement maximum noise to them
Gambar 3.8 Pseudocode Salt and pepper
Keterangan :
1. Deklarasikan b untuk menampung citra yang akan di eksekusi 2. Randomkan matriks a
3. Temukan nilai yang mana nilainya x<p3
4. Jika sudah ditemukan maka ganti semua nilainya dengan 0
3.4. Perancangan Sistem
3.4.1. Perancangan Flowchart Sistem
Flowchart merupakan bagan yang menampilkan urutan proses dari suatu sistem. Flowchart memiliki fungsi untuk memudahkan proses pengecekan terhadap sistem
yang ingin dibuat apabila ada yang terlupakan dalam analisis masalah. Berikut merupakan flowchart awal dari sistem secara umum yang nantinya akan dibangun yang dapat dilihat pada gambar 3.9.
(33)
Start
Input citra *.jpeg atau *.bmp
Blurring
Noising
Filter Wiener
Citra Hasil I + data MSE, PSNR dan
Running Time
Citra Hasil II + data MSE, PSNR dan
Running time
End
Lucy-Richardson
Citra Hasil + data MSE, PSNR dan
Running time YA
TIDAK
Hitung MSE, PSNR dan Running Time
Hitung MSE, PSNR dan Running Time
(34)
Sub Flowchart Filter Wiener :
Gambar 3.10 Proses Filter Wiener Start
Input citra asli format *bmp dan
*jpeg
Lakukan proses blurring
Lakukan proses FFT
Tambahkan noise (speckle) pada
citra
Hitung MSE dan PSNR
Citra yang sudah diperbaiki + data MSE dan
PSNR
End Lakukan proses adaptive wiener
(35)
Sub flowchart Lucy-Richardson :
Start
Input citra asli format *bmp dan
*jpeg
Lakukan proses Lucy-Richardson
Citra yang sudah diperbaiki + data MSE dan PSNR
End Hitung MSE dan
PSNR
Gambar 3.11 Proses Lucy-Richardson
3.4.2. Perancangan Antarmuka (Interface)
Sistem perbandingan algoritma restorasi citra ini dirancang dengan menggunakan bahasa pemrograman MATLAB 2012a. Perancangan antarmuka atau interface ini bertujuan untuk memudahkan interaksi antara manusia dengan komputer sehingga manusia dapat menggunakan sistem dengan baik dan mudah untuk digunakan.
3.4.2.1. Form Home
Form home sistem merupakan tampilan utama dalam sistem perbandingan algoritma
(36)
Gambar 3.12 Rancangan Form Home
Keterangan:
1. Judul Aplikasi.
2. Tampil logo Fasilkom-TI USU.
3. Tampil pembuat program dengan identitas nama dan nim. 4. Filter wiener
Berfungsi untuk menjalankan proses restorasi citra menggunakan filter Wiener. 5. Lucy-Richardson
Berfungsi untuk menjalan proses restorasi citra menggunakan filter lucy-richardson.
6. Bantuan
Berfungsi untuk memberikan petunjuk cara menggunakan software ini. 7. Keluar.
Berikut merupakan rancangan dari form filter Wiener yang dapat dilihat pada gambar 3.11.
(37)
Gambar 3.13 Rancangan Form Filter Wiener
Keterangan:
1. Browse
Berfungsi untuk mencari citra yang akan diinput. 2. Axes1
Merupakan tempat untuk menampilkan citra yang akan direstorasi. 3. Nama, Format, Ukuran, Tgl Akses
Merupakan data informasi citra inputan tersebut 4. Len dan teta
Untuk menentukan blurnya (sudut) 5. Blurring
Untuk menjalankan proses blurring-nya. 6. Axes2
Untuk menampilkan hasil citra yang telah diblur. 7. MSE,PSNR dan Running time
Untuk mengetahui nilai dari MSE, PSNR dan Running time pada citra blur tersebut.
8. % noise
Untuk menentukan seberapa %noise yang akan ditambahkan pada gambar blur sehingga gambarnya bernoise.
(38)
9. Salt and pepper, speckle, dan gaussian
Menentukan jenis noise yang akan diberikan. 10.Axes3
Untuk menampilkan citra yang telah diblur + noise dan juga menampilkan nilai dari MSE, PSNR dan Running time
11.Simpan
Tombol yang berfungsi untuk melakukan penyimpanan gambar. 12.Hasil
Merupakan tombol untuk melakukannya restorasi. 13.Axes5
Berfungsi untuk menampilkan hasil restorasi citra. 14.MSE, PSNR dan Running time
Berfungsi menampilkan nilai dari MSE, PSNR dan running time dari citra yang telah direstorasi.
15.Hasil
Berfungsi melakukan restorasi tanpa diketahui spectrum pada citra tersebut. 16.Axes4
Berfungsi menampilkan citra hasil yang kedua 17.MSE, PSNR dan running time
Berfungsi menampilkan nilai dari MSE,PSNR dan running time dari citra hasil yang kedua.
18.Simpan
Tombol yang berfungsi untuk menyimpan citra hasil. 19.Reset
Tombol yang berfungsi untuk mereset (mengosongkan) field kekeadaan semula.
20.Kembali
Tombol yang berfungsi untuk menuju ke menu sebelumnya.
Berikut merupakan rancangan dari form lucy-richardson yang dapat dilihat pada gambar 3.12.
(39)
3.4.2.3. Form Lucy-Richardson
Gambar 3.14 Rancangan Form Lucy-Richardson
Keterangan:
1. Browse
Berfungsi untuk mencari citra yang akan diinput. 2. Axes1
Merupakan tempat untuk menampilkan citra yang akan direstorasi. 3. Nama, Format, Ukuran, Tgl Akses
Merupakan data informasi citra inputan tersebut 4. Len dan teta
Untuk menentukan blurnya (sudut) 5. Blurring
Untuk menjalankan proses blurring-nya. 6. Axes2
Untuk menampilkan hasil citra yang telah diblur. 7. MSE,PSNR dan Running time
Untuk mengetahui nilai dari MSE, PSNR dan Running time pada citra blur tersebut.
(40)
Untuk menentukan seberapa %noise yang akan ditambahkan pada gambar blur sehingga gambarnya bernoise.
9. Salt and pepper, speckle, dan gaussian
Menentukan jenis noise yang akan diberikan. 10.Axes3
Untuk menampilkan citra yang telah diblur + noise 11.MSE, PSNR dan running time
Untuk menampilkan nilai dari MSE, PSNR dan Running time 12.Simpan
Tombol yang berfungsi untuk menyimpan hasil. 13.Hasil
Merupakan tombol untuk melakukannya restorasi. 14.Axes4
Berfungsi untuk menampilkan hasil restorasi citra. 15.MSE, PSNR dan Running time
Berfungsi menampilkan nilai dari MSE, PSNR dan running time dari citra yang telah direstorasi.
16.Simpan
Tombol yang berfungsi untuk menyimpan hasil. 17.Reset
Tombol yang berfungsi untuk mereset (mengosongkan) field kekeadaan semula.
18.Kembali
Tombol yang berfungsi untuk menuju ke menu sebelumnya.
Form Bantuan dapat dilihat pada gambar 3.13 dibawah ini 3.4.2.4. Form Bantuan
(41)
Gambar 3.15 Rancangan Form Bantuan
Keterangan: 1. Bantuan
Berisi tulisan yang dapat membantu pengguna dalam mengoperasikan
software ini.
2. Kembali
(42)
BAB IV
IMPLEMENTASI DAN PENGUJIAN SISTEM
4.1 Implementasi Sistem
Setelah melakukan proses analisis dan perancangan sistem, proses selanjutnya dalam penerapan pembuatan aplikasi adalah proses implementasi dan pengujian sistem. Implementasi merupakan tahap di mana sistem melakukan fungsionalitas utamanya setelah suatu program atau perangkat lunak selesai dirancang. Sedangkan tahap pengujian merupakan tahap yang dilakukan setelah proses pengimplementasikan selesai dilakukan dan sampai proses uji coba sesuai dengan kriteria-kriteria yang diinginkan pengguna pada tahap perancangan sistem. Pada system ini terdapat 4 form yaitu form awal, form filter Wiener, form Lucy-Richardson, dan form bantuan.
4.1.1Form Awal
Form Awal merupakan tampilan utama dalam system perbandingan algortima
Wiener dan Lucy-Richardson untuk restorasi citra ini. Pada form ini terdapat keterangan judul skripsi, nama dan nim penulis skripsi, menu restorasi yang akan digunakan, serta menu bantuan yang dapat membantu pengguna dalam menjalankan sistem ini. Menu restorasi yaitu filter Wiener dan Lucy-Richardson. Adapun tampilan dari form awal pada sistem yang ditunjukkan pada gambar 4.1.
(43)
Gambar 4.1 Form Awal
4.1.2Form Filter Wiener
Form filter Wiener ini merupakan tampilan untuk melakukannya proses restorasi
menggunakan filter Wiener. Dimana citra yang dimasukkan akan dilakukan blurring dengan memberikan blur sesuai yang diinginkan pada len dan teta. Kemudian ditambahkan lagi noise sesuai yang diinginkan. Dengan ditambahkan- nya noise membuat citra tersebut menjadi blur + noise. Kemudian dilakukanlah proses restorasi menggunakan filter wiener tersebut. Berikut merupakan tampilan
form Filter Wiener dapat dilihat pada gambar 4.2 dan simulasinya pada gambar
(44)
Gambar 4.2 Form Filter Wiener
Gambar 4.3 Form Simulasi Filter Wiener 4.1.3Form Lucy-Richardson
Pada Form Lucy-Richardson tidak jauh berbeda dengan form filter Wiener, yang mana pada tahap restorasi ini setelah terjadi pemilihan citra yang akan direstorasi tahap selanjutnya yaitu dengan memberikan blur dan noise sesuai dengan keinginan si pengguna. Setelah itu dapat dilihat nilai MSE, PSNR dan running
(45)
time pada masing-masing langkah dengan menekan tombolnya. Berikut merupakan tampilan dari form Lucy-Richardson yang ditampilkan pada gambar 4.4.
Gambar 4.4 Form Lucy-Richardson
Gambar 4.5 Form Simulasi Lucy-Richardson 4.1.4Form Bantuan
(46)
Form Bantuan merupakan form yang berisi tentang penjelasan dari system ini. Ini
juga dapat membantu pengguna dalam menjalankan system ini. Form bantuan dapat dilihat pada gambar 4.6.
Gambar 4.6 Form Bantuan 4.2 Pengujian
Pengujian sistem akan dilakukan untuk mengetahui sampai sejauh mana kedua metode tersebut dapat melakukan restorasi citra pada citra blur dengan besarnya
blur yang diberikan pada citra tersebut. Disini juga dilakukan apakah metode
tersebut dapat menghilangkan noise yang diberikan pada citra tersebut. Pengujian dilakukan pada citra berformat *.jpeg dan *.bmp (bitmap). Pengujian dibedakan pada tiap-tiap jenis metode.
4.2.1 Pengujian Filter Wiener
Pada pengujian filter Wiener, hal pertama yang dilakukan setelah memilih citra yaitu membuat citra tersebut menjadi blur dengan mengisi kolom len dan teta yang merupakan derajat kebluran. Kemudian memberikan noise kepada citra dengan memilihnya yaitu salt and pepper, speckle, dan gaussian.
(47)
Gambar 4.7 Proses uji coba sistem perbandingan restorasi citra
Untuk melihat sejauh mana filter wiener tersebut dapat merestorasi citra
yang rusak akibat blur dan noise, maka dilakukan pengujian pada jenis citra *.jpeg dan *.bmp yang pada kasus ini dilihat dari jenis noisenya :
1. Salt and pepper 2. Speckle
3. Gaussian
Adapun data proses uji coba penerapan filter Wiener dengan noise salt and pepper dapat dilihat pada tabel 4.1 dan 4.2.
(48)
Berikut dilakukan pengujian pada citra berformat *.jpeg
Tabel 4.1 Pengujian Salt and Pepper dengan tingkat blurring berbeda dan kadar noise yang sama 20%
Len (pixel) Teta(derajat) MSE PSNR Noise : Salt and Pepper (%) MSE PSNR MSE PSNR MSE PSNR Wiener 5 5 116,509 27,467 20 8208,27 8,988 3484,86 12,708 3463,32 12,735 koala.jpeg 15 15 328,918 22,959 20 8376,27 8,900 3553,11 12,649 3532,44 12,650 25 25 434,556 21,750 20 8453,34 8,860 3564,56 12,610 3564,94 12,610 55 55 700,449 19,677 20 8687,59 8,741 3632,13 12,529 3674,77 12,478 75 75 872,689 18,722 20 8846,18 8,663 3675,36 12,477 3706,96 12,440 85 85 963,503 18,292 20 8908,97 8,632 3701,98 12,446 3740,56 12,401 100 100 1105,04 17,697 20 9008,66 8,584 3752,79 12,387 3798,17 12,335
Metode Blurring Noise + Blur Hasil I Hasil II
Tabel 4.2 Pengujian Salt and Pepper dengan tingkat blurring sama tetapi kadar noise yang berbeda
Len (pixel) Teta(derajat)
MSE
PSNR
Noise : Salt and Pepper (%)
MSE
PSNR
MSE
PSNR
MSE
PSNR
Wiener
31
11
231,393 24,487
10
3247,78
13,014
1047,17 17,930
987,88
18,183
jellyfish.jpeg
31
11
231,393 24,487
20
7455,4
9,406
1580,74 16,142
738,874 19,445
31
11
231,393 24,487
30
9253,17
8,467
2055,62 15,001
810,305 19,044
31
11
231,393 24,487
40
11055,7
7,694
2486,12 14,175
878,544 18,693
31
11
231,393 24,487
50
12869,6
7,035
2867,01 13,556
1020,97
18
Metode
Blurring
Noise + Blur
Hasil I
Hasil II
(49)
Keterangan :
Pada tabel 4.1 diperoleh kesimpulan sebagai berikut :
Semakin besar blur yang diberikan dengan kadar noise yang sama disetiap citra yaitu koala.jpeg yang diteliti, nilai MSE pada citra hasil tersebut juga akan semakin besar dan PSNRnya semakin kecil. Tetapi tidak ditemukan perbedaan MSE dan PSNR yang mencolok pada hasil I dan II, terkadang hasil II>I ataupun sebaliknya bahkan ada yang bernilai sama.
Pada tabel 4.2 diperoleh kesimpulan sebagai berikut :
Dengan diberikannya kadar blur yang sama dipercobaan jellyfish.jpeg dan perbedaan kadar noise. Diperoleh hasil MSE yang menaik sesuai dengan kadar noise yang diberikan.
Adapun grafik antara perubahan blur dan noise dengan MSE yang dihasilkan dari masing-masing citra (*.jpeg) ditunjukkan pada gambar 4.8 dan 4.9.
Gambar 4.8 Perubahan blur pada noise salt and pepper terhadap nilai MSE
Gambar grafik diatas merupakan hasil dari tabel 4.1. Pada gambar tersebut terdapat 3 garis yaitu :
1. Garis merah merupakan garis MSE dari gambar blur
2. Garis hijau merupakan garis MSE dari gambar blur dan noise 3. Garis kuning merupakan garis MSE dari hasil restorasi citra tersebut
(50)
Gambar 4.9 Perubahan noise terhadap nilai MSE
Terdapat 3 garis didalam grafik tersebut yaitu :
1. Garis merah merupakan garis MSE dari gambar blur
2. Garis hijau merupakan garis MSE dari gambar blur dan noise 3. Garis kuning merupakan garis MSE dari hasil restorasi citra tersebut
Kesimpulan dari kedua gambar grafik diatas yaitu jika garis kuning yaitu garis yang merupakan citra hasil restorasi lebih dekat dengan garis merah maka hasil restorasinya baik, sebaliknya jika mendekat garis hijau maka hasil restorasinya tidak begitu baik.
(51)
Berikut dilakukan pengujian pada citra berformat *.bmp
Tabel 4.3 Pengujian Salt and pepper dengan blurring yang berbeda tetapi dengan noise yang sama
Len(pixel) Teta(derajat) MSE PSNR Noise : Salt and pepper(%) MSE PSNR MSE PSNR MSE PSNR
Wiener 5 5 116,519 27,467 20 8320,54 8,929 2262,66 14,584 1581,49 16,140
Koala.bmp 15 15 328,939 22,959 20 8648,63 8,761 2295,89 14,521 1652,52 15,949 25 25 434,594 21,75 20 8826,48 8,672 2348,62 14,422 1689,33 15,857 55 55 700,462 19,677 20 9315,85 8,438 2480,44 14,185 1811,37 15,558 75 75 872,69 18,722 20 9589,72 8,312 2566,75 14,037 1879,17 15,391 85 85 963,505 18,292 20 9730,15 8,249 2620,5 13,947 1924,1 15,288 100 100 1105,05 17,697 20 9983,89 8,137 2707,18 13,805 2010,05 15,098
Metode Blurring Noise + Blur Hasil I Hasil II
Tabel 4.4 Pengujian salt and pepper dengan blurring yang sama namun dengan kadar noise yang berbeda
Len(Pixel) Teta(derajat)
MSE
PSNR
Noise : Salt and pepper (%)
MSE
PSNR
MSE
PSNR
MSE
PSNR
Wiener
31
11
231,397 24,487
10
5667,29
10,597
1087,71 17,765
675,284 19,835
Jellyfish.bmp
31
11
231,397 24,487
20
7437,23
9,416
1579,28 16,146
759,74
19,324
31
11
231,397 24,487
30
9254,26
8,467
2054,06 15,004
796,388 19,119
31
11
231,397 24,487
40
11063,6
7,691
2485,8
14,176
887,371 18,649
31
11
231,397 24,487
50
12875,7
7,033
2866,98 13,556
983,968 18,201
(52)
Keterangan :
1. Pada tabel 4.3 diperoleh hasil kesimpulan sebagai berikut:
Pengujian pada citra koala.bmp dengan memberikan blur yang berbeda tetapi dengan noise yang sama diperoleh hasil MSE yang semakin meningkat namun hasil yang lebih rendah pada hasil II dibandingkan dengan hasil I. 2. Pada tabel 4.4 diperoleh hasil kesimpulan sebagai berikut:
Pengujian speckle dengan kadar blur yang sama tetapi dengan kadar noise yang berbeda, diperoleh hasil MSE yang semakin besar begitu juga pada hasil I dan II tetapi pada pengujian ini hasil II<I.
Adapun grafik antara perubahan blur dan noise dengan MSE yang dihasilkan dari masing-masing citra (*.bmp) ditunjukkan pada gambar 4.10 dan 4.11.
Gambar 4.10 Perubahan blur pada noise salt and pepper terhadap nilai MSE
Terdapat 3 garis didalam grafik tersebut yaitu :
1. Garis merah merupakan garis MSE dari gambar blur
2. Garis hijau merupakan garis MSE dari gambar blur dan noise 3. Garis kuning merupakan garis MSE dari hasil restorasi citra tersebut
(53)
Gambar 4.11 Perubahan noise terhadap nilai MSE
Terdapat 3 garis didalam grafik tersebut yaitu :
1. Garis merah merupakan garis MSE dari gambar blur
2. Garis hijau merupakan garis MSE dari gambar blur dan noise 3. Garis kuning merupakan garis MSE dari hasil restorasi citra tersebut
Kesimpulan dari kedua gambar grafik diatas yaitu jika garis kuning yaitu garis yang merupakan citra hasil restorasi lebih dekat dengan garis merah maka hasil restorasinya baik, sebaliknya jika mendekat garis hijau maka hasil restorasinya tidak begitu baik.
4.2.2 Pengujian Lucy-Richardson
Sama halnya dengan pengujian filter Wiener, hal pertama yang dilakukan setelah memilih citra yaitu memberikan blur pada citra tersebut kemudian diberikan
noise.
Adapun gambaran sistem Perbandingan algoritma restorasi ini dapat dilihat pada gambar 4.12 berikut ini:
(54)
Gambar 4.12 Proses uji coba system perbandingan restorasi citra
Dilakukan percobaan pada Lucy-Richardson pada jenis citra *.bmp dan *.jpeg serta dilakukan pada masing-masing noise yaitu :
1. Salt and pepper 2. Speckle
3. Gaussian
Adapun data proses uji coba penerapan Lucy-Richardson dengan noise speckle dapat dilihat pada tabel 4.3 dan 4.4
(55)
Berikut dilakukan pengujian pada citra berformat *.jpeg
Tabel 4.5 Pengujian Speckle dengan tingkat blurring berbeda dan kadar noise yang sama 20%
Len(pixel) Teta(derajat) MSE PSNR Noise : Speckle (%) MSE PSNR MSE PSNR
Lucy-Richardson 10 10 222,158 24,664 20 4655,02 11,451 4306,34 11,789
penguins.jpeg 30 30 586,485 20,448 20 5337,64 10,857 4797,97 11,320
45 45 795,182 19,126 20 5731,73 10,547 5091,41 11,062
60 60 918,108 18,501 20 6018,61 10,335 5288,68 10,897
75 75 963,724 18,291 20 6174,16 10,225 5420,38 10.79
85 85 1013,86 18,071 20 6297,82 10,138 5550,94 10,687
100 100 1195,1 17,356 20 6645,24 9,905 5922,73 10,405
Metode Blurring Noise + Blur Hasil I
Tabel 4.6 Pengujian Speckle dengan tingkat blurring sama tetapi kadar noise yang berbeda
Len(pixel) Teta(derajat) MSE PSNR Noise : Speckle (%) MSE PSNR MSE PSNR Lucy-Richardson 31 11 256,015 24,048 5 3505,12 12,683 3363,33 12,863
Hydrangeas.jpg 31 11 256,015 24,048 15 3529,61 12,653 3376,89 12,845
31 11 256,015 24,048 35 3609,93 12,555 3408,89 12,804
31 11 256,015 24,048 55 3741,16 12,400 3408,89 12,804
31 11 256,015 24,048 75 3873,29 12,25 3606,22 12,560
31 11 256,015 24,048 85 3930,35 12,186 3649,79 12,508
31 11 256,015 24,048 100 4025,49 12,082 3723,59 12,421
(56)
Pada masing-masing tabel pengujian Lucy-Richardson diperoleh kesimpulan yaitu:
1. Pada tabel 4.5 dengan berbedanya kadar blur yang diberikan tetapi dengan memberikan noise yang sama pada citra berformat *.jpeg diperoleh hasil MSE yang semakin besar jika kadar blur yang diberikan juga semakin bertambah. Hasil ini berlaku pada noise salt and pepper, speckle, dan Gaussian.
2. Pada tabel 4.6 dengan kadar blur yang sama diberikan pada citra berformat *.jpeg dan *.bmp tetapi perubahan terjadi pada kadar noisenya diperoleh hasil yang sama yaitu MSE semakin besar ketika terjadi perubahan noise tersebut.
Adapun grafik antara perubahan blur dan noise dengan MSE yang dihasilkan dari masing-masing citra (*.jpeg) ditunjukkan pada gambar 4.13 dan 4.14.
Gambar 4.13 Perubahan blur pada noise speckle terhadap nilai MSE
Terdapat 3 garis didalam grafik tersebut yaitu :
1. Garis merah merupakan garis MSE dari gambar blur
2. Garis hijau merupakan garis MSE dari gambar blur dan noise 3. Garis kuning merupakan garis MSE dari hasil restorasi citra tersebut
(57)
Gambar 4.14 Perubahan noise terhadap nilai MSE
Terdapat 3 garis didalam grafik tersebut yaitu :
1. Garis merah merupakan garis MSE dari gambar blur
2. Garis hijau merupakan garis MSE dari gambar blur dan noise 3. Garis kuning merupakan garis MSE dari hasil restorasi citra tersebut
Kesimpulan dari kedua gambar grafik diatas yaitu jika garis kuning yaitu garis yang merupakan citra hasil restorasi lebih dekat dengan garis merah maka hasil restorasinya baik, sebaliknya jika mendekat garis hijau maka hasil restorasinya tidak begitu baik.
(58)
Berikut dilakukan pengujian pada citra berformat *.bmp
Tabel 4.7 Pengujian Speckle dengan blurring yang berbeda tetapi dengan noise yang sama
Len(pixel) Teta(derajat) MSE PSNR Noise : Speckle(%) MSE PSNR MSE PSNR
Lucy-Richardson 10 10 222,162 24,664 20 4652,37 11,454 4305,66 11,790
Penguins.bmp 30 30 586,483 20,448 20 5334,53 10,859 4798,12 11,320
45 45 795,17 19,126 20 5731,78 10,547 5089,5 11,061
60 60 918,1 18,501 20 6017,92 10,336 5286,76 10,898
75 75 963,714 18,291 20 6178,9 10,221 5423,29 10,788
85 85 1013,85 18,071 20 6300,22 10,137 5555,31 10,683
100 100 1195,1 17,356 20 6646,36 9,904 5929,81 10,400
Metode Blurring Noise + Blur Hasil I
Tabel 4.8 Pengujian Speckle dengan blurring yang sama namun dengan kadar noise yang berbeda
Len(pixel) Teta(derajat) MSE PSNR Noise : Speckle(%) MSE PSNR MSE PSNR
Lucy-Richardson 31 11 256,014 24,048 5 3504,1 12,685 3362,7 12,863
Hydrangeas.bmp 31 11 256,014 24,048 15 3529,95 12,653 3376,17 12,846
31 11 256,014 24,048 35 3615,69 12,548 3413,91 12,798
31 11 256,014 24,048 55 3740,34 12,401 3505,38 12,683
31 11 256,014 24,048 75 3687,29 12,256 3607,79 12,563
31 11 256,014 24,048 85 3932,72 12,183 3654,68 12,502
31 11 256,014 24,048 100 4030,18 12,077 3728,45 12,415
(59)
Keterangan:
1. Pada Tabel 4.7 pengujian speckle dengan blurring yang berbeda tetapi dengan noise yang sama didapatkan hasil, perubahan blur yang diberikan mempengaruhi nilai MSE yang dihasilkan.
2. Pada tabel 4.8 didapatkan hasil MSE yang meningkat sesuai dengan terjadinya peruabahan noise yang diberikan.
Adapun grafik antara perubahan blur dan noise dengan MSE yang dihasilkan dari masing-masing citra (*.jpeg) ditunjukkan pada gambar 4.15 dan 4.16.
Gambar 4.15 Perubahan blur pada noise speckle terhadap nilai MSE
Terdapat 3 garis didalam grafik tersebut yaitu :
1. Garis merah merupakan garis MSE dari gambar blur
2. Garis hijau merupakan garis MSE dari gambar blur dan noise
(60)
Gambar 4.16 Perubahan noise terhadap nilai MSE
Terdapat 3 garis didalam grafik tersebut yaitu :
1. Garis merah merupakan garis MSE dari gambar blur
2. Garis hijau merupakan garis MSE dari gambar blur dan noise 3. Garis kuning merupakan garis MSE dari hasil restorasi citra tersebut
Kesimpulan dari kedua gambar grafik diatas yaitu jika garis kuning yaitu garis yang merupakan citra hasil restorasi lebih dekat dengan garis merah maka hasil restorasinya baik, sebaliknya jika mendekat garis hijau maka hasil restorasinya tidak begitu baik.
(61)
BAB V
KESIMPULAN DAN SARAN 5.1 Kesimpulan
Setelah melakukan beberapa tahap, yang dimulai dari tahap penelitian, perancangan hingga tahap implementasi Perbandingan Algoritma Wiener dan Lucy-Richardson untuk memperbaiki kualitas citra dapat disimpulkan bahwa:
1. Berdasarkan hasil MSE yang didapatkan perubahan blur yang diberikan pada citra *.jpeg maupun *.bmp lebih mempengaruhi citra hasil dari Lucy-Richardson dibandingkan dengan perubahan noisenya, sedangkan pada filter Wiener perubahan blur dan noisenya seimbang.
2. Algoritma Wiener lebih baik dibandingkan Lucy-Richardson dalam merestorasi gambar blur dan noise untuk jenis noise salt and pepper, speckle ataupun Gaussian dimana dengan citra yang sama (*.jpeg dan *.bmp) yang diuji pada kedua algoritma tersebut diperoleh hasil MSE yang lebih besar pada percobaan Lucy-Richardson.
3. Pada filter Wiener hasil dengan autocorrelation yaitu hasil II lebih baik dibandingkan dengan hasil I.
4. Hasil perbandingan untuk filter Wiener dan Lucy-Richardson citra *.jpeg pada
noise speckle nilai MSE-nya lebih rendah dibandingkan dengan citra *.bmp
pada perubahan blur sedangkan pada perubahan noise citra *.bmp lebih rendah dibandingkan dengan citra *.jpeg.
4.2 Saran
Berikut ini adalah saran yang dapat digunakan untuk tahap pengembangan sistem ini antara lain:
1. Menambah pengujian lain dengan jenis citra yang dicoba seperti *.png dan *.gif.
2. Sebaiknya tidak terlalu besar blur dan noise yang diberikan kepada citra sehingga hasil yang didapatkan lebih akurat.
3. Ketika proses pengujian berjalan, penulis mendapatkan hasil bahwa filter Wiener baik digunakan untuk citra dengan gangguan blur dan noise
(62)
4. sendangkan Lucy-Richardson hanya bisa digunakan untuk merestorasi citra
(63)
BAB II
LANDASAN TEORI
2.1. Citra
Citra adalah suatu representasi (gambaran), kemiripan, atau imitasi dari suatu objek. Citra sebagai keluaran suatu sistem perekaman data dapat bersifat optic berupa foto, bersifat analog berupa sinyal-sinyal video seperti gambar pada monitor televisi, atau bersifat digital yang dapat langsung disimpan pada suatu media peyimpanan. [10]
2.1.1 Definisi Citra Analog
Citra analog adalah citra yang bersifat kontinu, seperti gambar pada monitor televisi, foto sinar-X, foto yang tercetak di kertas foto, lukisan, pemandangan alam, hasil CT
scan, gambar-gambar yang terekam pada pita kaset, dan lain sebagainya. Citra analog
tidak dapat direpresentasikan dalam komputer sehingga tidak bisa diproses di computer secara langsung. Oleh sebab itu, agar citra ini dapat diproses di komputer, proses konversi analog ke digital harus dilakukan terlebih dahulu. Citra analog dihasilkan dari alat-alat analog, seperti video kamera analog, kamera foto analog,
WebCam, CT scan, sensor rontgen untuk foto thorax, sensor gelombang pendek pada system radar, sensor ultrasound pada system USG, dan lain-lain. [10]
2.1.2 Definisi Citra Digital
Citra digital adalah citra yang dapat diolah oleh komputer[10]. Citra digital merupakan sebuah larik (array) yang berisi nilai-nilai real maupun komplek yang direpresentasikan dengan deretan bit tertentu.
Suatu citra dapat didefinisikan sebagai fungsi f(x,y) berukuran M baris dan N kolom, dengan x dan y adalah koordinat spasial, dan amplitudo f di titik koordinat f(x,y) dinamakan intensitas atau tingkat keabuan dari citra pada titik tersebut. Apabila nilai x, y, dan nilai amplitudo f secara keseluruhan berhingga (finite) dan bernilai diskrit maka dapat dikatakan bahwa citra tersebut adalah citra digital.[8]
(64)
2.2. Pengolahan Citra
Meskipun sebuah citra kaya informasi, namun seringkali citra yang kita miliki mengalami penurunan mutu (degradasi), misalnya mengandung cacat atau derau (noise), warnanya terlalu kontras, kurang tajam, kabur (blurring), dan sebagainya. Tentu saja citra semacam ini menjadi lebih sulit diinterpretasi karena informasi yang disampaikan oleh citra tersebut menjadi berkurang.
Agar citra yang mengalami gangguan mudah diinterpretasi (baik oleh manusia maupun mesin), maka citra tersebut perlu dimanipulasi menjadi citra lain yang kualitasnya lebih baik. Bidang studi yang menyangkut hal ini adalah pengolahan citra (image processing)[2].
Pengolahan citra yaitu bidang tersendiri yang sudah cukup berkembang sejak orang mengerti bahwa komputer tidak hanya dapat menangani teks, tetapi juga data citra. Pengolahan citra adalah pemrosesan citra, khususnya dengan menggunakan komputer, menjadi citra yang kualitasnya lebih baik. Sebagai contoh, citra burung nuri pada Gambar 2.1 : a. tampak agak gelap, lalu pada b. dengan operasi pengolahan citra kontrasnya diperbaiki sehingga menjadi lebih terang dan tajam[4].
Umumnya, operasi-operasi pada pengolahan citra diterapkan pada citra bila : 1. Perbaikan atau memodifikasi citra perlu dilakukan untuk meningkatkan kualitas
penampakan atau untuk menonjolkan beberapa aspek informasi yang terkandung di dalam citra,
2. Elemen di dalam citra perlu dikelompokkan, dicocokkan, atau diukur, 3. Sebagian citra perlu digabung dengan bagian citra yang lain.
(65)
(a) (b)
Gambar 2.1: a. Citra burung nuri yang agak gelap, b. Citra burung yang telah diperbaiki kontrasnya sehingga terlihat jelas dan tajam[3]
Di dalam bidang komputer, sebenarnya ada tiga bidang studi yang berkaitan dengan data citra, namun tujuan ketiganya berbeda, yaitu:
1. Grafika Komputer (computer graphics). 2. Pengolahan Citra (image processing).
3. Pengenalan Pola (pattern recognition/image interpretation).
Hubungan antara ketiga bidang (grafika komputer, pengolahan citra, pengenalan pola) ditunjukkan pada Gambar 2.2
Gambar 2.2 : Tiga bidang studi yang berkaitan dengan citra[3]
Grafika Komputer bertujuan menghasilkan citra (lebih tepat disebut grafik atau
picture) dengan primitif-primitif geometri seperti garis, lingkaran, dan sebagainya.
(66)
elemen-elemen gambar. Contoh data deskriptif adalah koordinat titik, panjang garis, jari-jari lingkaran, tebal garis, warna, dan sebagainya. Grafika komputer memainkan peranan penting dalam visualisasi dan virtual reality.
Pengolahan Citra bertujuan memperbaiki kualitas citra agar mudah diinterpretasi oleh manusia atau mesin (dalam hal ini komputer). Teknik-teknik pengolahan citra mentransformasikan citra menjadi citra lain. Jadi, masukannya adalah citra dan keluarannya juga citra, namun citra keluaran mempunyai kualitas lebih baik daripada citra masukan. Termasuk ke dalam bidang ini juga adalah pemampatan citra (image compression)[3].
2.3. Restorasi Citra
Restorasi citra bertujuan merekonstruksi atau memperbaiki citra yang terdegradasi dengan menggunakan suatu priori knowledge dari fenomena degradasi tersebut. Teknik restorasi berorientasi pada pemodelan degradasi dan mengaplikasikan proses kebalikannya untuk memperbaiki citra aslinya. Degradasi citra biasanya terjadi pada saat akuisisi citra digital, baik dari sensor atau digitizer. Bentuk dari degradasi ini bisa berupa :
1. Citra ber-noise 2. Citra kabur (blur)
Teknik restorasi dapat diformulasikan pada domain spasial maupun domain frekuensi. Proses pada domain spasial diterakan pada citra yang terdegradasi oleh
noise. Proses pada domain frekuensi cocok untuk citra yang kabur (blur) [4].
2.3.1. Model Degradasi Citra
Degradasi sebuah citra dapat dimodelkan sebagai :
1. g(x,y) = f(x,y)*h(x,y) ; misalnya proses blurring menggunakan filter average dengan f(x,y) adalah citra asli, *menyatakan operasi spatial, h(x,y) menyatakan filter yang digunakan, dan g(x,y) adalah derau yang dimodelkan sebagai fungsi aditif(random errors).
(67)
2. g(x,y) = f(x,y)*h(x,y)+n(x,y) ; dengan n(x,y) adalah derau yang dimodelkan sebagai fungsi aditif(random errors)[4].
2.3.2. Noise
Noise pada citra dapat terjadi karena beberapa sebab. Efek masing-masing noise
tentunya berbeda-beda. Ada yang efeknya sangat mempengaruhi tampilan citra, tetapi ada juga yang tidak begitu berpengaruh terhadap citra[10].
Sebagai contoh, dalam pengambilan citra dengan kamera CCD, level pencahayaan dan suhu sensor adalah factor utama yang mempengaruhi tingkat noise pada citra yang dihasilkan. Citra yang terkorupsi selama transmisi secara perinsip disebabkan interferensi channel yang digunakan untuk transmisi. Misalnya, citra yang ditransmisikan menggunakan jaringan wireless dapat terkorupsi sebagai hasil dari pencahayaan atau pengaruh atmosfer yang lain[7].
2.3.2.1. Jenis-jenis Noise
Berdasarkan bentuk dan karakteristiknya, noise pada citra dibedakan menjadi beberapa macam, yakni sebagai berikut :
1. Noise Salt and Papper
Merupakan model noise seperti taburan garam, akan memberikan warna putih pada titik yang terkena noise.
Contoh :
Gambar 2.3 : (a) adalah citra einstein.jpg (original) dan (b) adalah citra einstein.jpg yang telah disimulasikan dengan derau salt and pepper dengan densitas 0,01.
(68)
Gambar 2.3 : (a) Gambar asli, (b) Gambar setelah pemberian noise salt dan peper[7]
2. Noise gaussian
Noise gaussian adalah bentuk ideal dari derau putih, disebabkan oleh fluktuasi acak
dalam sinyal. Dapat dikatakan juga bahwa noise gaussian adalah derau putih yang mempunyai distribusi normal. Jika citra dinyatakan dengan I dan noise gaussian dinyatakan dengan N, maka citra yang terkorupsi oleh noise gaussian dinyatakan dengan cara menambahkan keduanya yaitu I + N.
Contoh :
Gambar 2.4 : (a) adalah citra einstein.jpg (original), (b) adalah citra einstein.jpg yang telah disimulasikan dengan noise gaussian dengan mean = 0 dan varians = 0,01.
(a) (b)
Gambar 2.4 : (a) Gambar asli, (b) Gambar setelah pemberian noise Gaussian[7]
3. Noise Speckle
Noise speckle dimodelkan dengan I ( 1 + N ). Dengan I adalah matriks citra dan N
adalah nilai-nilai yang terdistribusi normal dengan rerata (mean) sama dengan nol.
Noise speckle disebut juga derau multiplikatif (multiplicative noise). Noise speckle
sering dijumpai pada aplikasi radar. Contoh :
Gambar 2.5 : (a) adalah citra einstein.jpg (original), (b) citra einstein.jpg yang telah disimulasikan dengan noise speckle dengan mean = 0 dan varians = 0,04.
(69)
(a) (b)
Gambar 2.5 : (a) Gambar asli, (b) Gambar setelah pemberian noise speckle[7]
4. Noise Periodik
Noise yang sifatnya periodik (bukan acak atau random) akan menghasilkan derau
periodik. Citra yang terkorupsi oleh noise periodik secara visual akan tampak terdapat garis-garis (baris) pada citra. Gambar 2.6 : (a) adalah Gambar asli, (b) citra einstein.jpg yang telah disimulasikan dengan noise periodic[7].
(a) (b)
Gambar 2.6 : (a) Gambar asli, (b) Gambar setelah pemberian noise periodic[7]
2.4 Filter Wiener
Filter Wiener diusulkan pertama kali oleh N. Wiener pada tahun 1942 sebagai satu
(70)
Filter Wiener adalah metode restorasi yang berdasarkan pada least square. Penapis ini
meminimumkan galat restorasi, yaitu selisih antar citra restorasi dengan citra asli. Penapis ini efektif bila karakteristik frekuensi citra dan derau aditif diketahui[2]. Jika tidak ada derau aditif, penapis Wiener menjadi penapis yang ideal.
Dalam domain transform, penapis Wiener berbentuk
� u, v =|� , |2+ ��∗ ,
n , /�f , ……… (1)
Di mana : H(u,v) = fungsi degradasi |H(u,v)|2 = H*(u,v)H(u,v)
H*(u,v) = perubahan lengkap pada H(u,v) Sn(u,v) = kekuatan spectrum noise
Sf (u,v) = kekuatan spectrum citra yang belum didegradasi Jika Sn(u,v) dan Sf (u,v) tidak diketahui atau tidak dapat diestimasi, maka penapis Wiener dihampiri dengan persamaan berikut:
� u, v =|� , | + K … … … .� ∗ ,
yang dalam hal ini K menyatatakan konstanta yang dispesifikasikan oleh pengguna.
2.5Fast Fourier Transform
Transformasi citra merupakan proses perubahan bentuk citra, baik intensitas maupun posisi pikselnya, yang bertujuan untuk mendapatkan suatu informasi tertentu. Secara umum transformasi bisa dibagi menjadi dua, yaitu transformasi spatial dan transformasi domain.
(1)
DAFTAR ISI
Halaman
Persetujuan ii
Pernyataan iii Penghargaan iv Abstrak vi Abstract vii Daftar Isi viii Daftar Tabel x Daftar Gambar xi Daftar Lampiran xiii Bab I Pendahuluan 1.1 Latar Belakang 1
1.2 Perumusan Masalah 2
1.3 Batasan Masalah 2
1.4 Tujuan Penelitian 3
1.5 Manfaat Penelitian 3
1.6 Sistematika Penulisan 3
BabII Landasan Teori 2.1 Citra 5
2.1.1 Definisi Citra Analog 5
2.1.2 Definisi Citra Digital 5
2.2 Pengolahan Citra 6
2.3 Restorasi Citra 8
2.3.1 Model Degradasi Citra 9
2.3.2 Noise 9
2.3.2.1 Jenis-jenis Noise 10
2.4 Filter Wiener 12
2.5 Fast Fourier Transform 13
2.6 Lucy-Richardson 14
2.7 Bitmap 15
2.8 Joint Photographic Expert Group(JPEG/JPG) 15
2.9 Mean Square Error 15
2.10 Peak Signal to Noise Ratio 16
Bab III Analisis dan Perancangan Sistem 3.1 Analisis Sistem 17
3.1.1 Analisis Masalah 17
(2)
3.1.2.1 Kebutuhan Fungsional Sistem 18
3.1.2.2 Kebutuhan Non fungsional Sistem 19
3.1.3 Analisis Proses 19
3.2 Pemodelan 19
3.2.1 Use Case Diagram 20
3.2.2 Sequence Diagram 24
3.2.3 Activity Diagram 25
3.3 Pseudo Code Program 27
3.3.1 Pseudo Code Filter Wiener 27
3.3.2 Pseudo Code Filter Wiener dengan autocorrelation 28
3.3.3 Pseudo Code Salt and Pepper 28
3.4 Perancangan Sistem 29
3.4.1 Perancangan Flowchart Sistem 29
3.4.2 Perancangan Antarmuka (Interface) 31
3.4.2.1 Form Home 32
3.4.2.2 Form Filter Wiener 33
3.4.2.3 Form Lucy-Richardson 35
3.4.2.4 Form Bantuan 37
Bab IV Implementasi dan Pengujian 4.1 Implementasi Sistem 38
4.1.1 Form Awal 38
4.1.2 Form Filter Wiener 39
4.1.3 Form Lucy-Richardson 40
4.1.4 Form Bantuan 42
4.2 Pengujian 42
4.2.1 Pengujian Filter Wiener 42
4.2.2 Pengujian Lucy-Richardson 50
Bab V Kesimpulan dan Saran 5.1 Kesimpulan 57
5.2. Saran 57
Daftar Pustaka 59
Lampiran Listing Program A-1
(3)
DAFTAR TABEL
Nomor
Tabel Nama Tabel Halaman
3.1 3.2 3.3 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8
Dokumentasi Naratif Use case Wiener Filtering Dokumentasi Naratif Use case Lucy-Richardson Dokumentasi Naratif Use case Bantuan
Pengujian Salt and Pepper dengan tingkat blurring berbeda dan kadar noise yang sama 20%
Pengujian Salt and Pepper dengan tingkat blurring sama tetapi kadar noise yang berbeda
Pengujian Salt and pepper dengan blurring yang berbeda tetapi kadar noise yang sama
Pengujian Salt and pepper dengan blurring yang sama namun dengan kadar noise yang berbeda
Pengujian Speckle dengan tingkat blurring berbeda dan kadar noise yang sama 20%
Pengujian Speckle dengan tingkat blurring sama tetapi kadar noise yang berbeda
Pengujian Speckle dengan blurring yang berbeda tetapi dengan noise yang sama
Pengujian Speckle dengan blurring yang sama namun dengan kadar noise yang berbeda
21 22 23 44 44 47 47 51 51 54 54
(4)
DAFTAR GAMBAR
Nomor
Gambar Nama Gambar Halaman
2.1 2.2 2.3 2.4 2.5 2.6 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11
a. Citra burung nuri yang agak gelap
b. Citra burung yang telah diperbaiki kontrasnya sehingga terlihat jelas dan tajam
Tiga bidang studi yang berkaitan dengan citra a. Gambar asli
b. Gambar setelah pemberian noise salt dan pepper a. Gambar asli
b. Gambar setelah pemberian noise Gaussian a. Gambar asli
b. Gambar setelah pemberian noise speckle a. Gambar asli
b. Gambar setelah pemberian noise periodic Diagram Ishikawa
Use Case Diagram Sistem Perbandingan Algoritma Wiener dan Lucy-Richardson untuk Memperbaiki Kualitas Citra
Sequence Diagram Proses Restorasi Citra Actifity Diagram Filter Wiener
Activity Diagram Filter Lucy-Richardson Pseudocode Filter wiener
Pseudocode Filter Wiener dengan autocorrelation Pseudocode Salt and pepper
Flowchart Sistem Secara Umum Proses Filter Wiener
Proses Lucy-Richardson Rancangan Form Home
Rancangan Form Filter Wiener Rancangan Form Lucy-Richardson Rancangan Form Bantuan
Form Awal
Form Filter Wiener
Form Simulasi Filter Wiener Form Lucy-Richardson
Form Simulasi Lucy-Richardson Form Bantuan
Proses uji coba sistem perbandingan restorasi citra
Perubahan blur pada noise salt and pepper terhadap nilai MSE Perubahan noise terhadap nilai MSE
Perubahan blur pada noise salt and pepper terhadap nilai MSE Perubahan noise terhadap nilai MSE
7 7 8 10 10 11 11 11 11 12 12 18 20 24 26 26 27 28 28 29 30 31 32 33 35 37 39 40 40 41 41 42 43 45 46 48 49
(5)
4.12 4.13 4.14 4.15 4.16
Proses uji coba system perbandingan restorasi citra Perubahan blur pada noise speckle terhadap nilai MSE Perubahan noise terhadap nilai MSE
Perubahan blur pada noise speckle terhadap nilai MSE Perubahan noise terhadap nilai MSE
50 52 53 55 56
(6)
DAFTAR LAMPIRAN
Halaman
A. Listing Program A-1