BAB VI. KESIMPULAN DAN SARAN
6.2 Saran
Berdasarkan hasil yang dicapai pada penelitian ini, ada beberapa hal yang penulis sarankan untuk pengembangan selanjutnya yaitu:
1. Discrete Wavelet Transform (DWT) yang digunakan adalah Haar Wavelet, untuk pengembangan selanjutnya dapat digunakan jenis DWT lain seperti Daubechies, Coiflet, Symlet, Meyer, Morlet, dan Mexican Hat.
Teknik-teknik ini merupakan teknik yang lebih tahan terhadap serangan dibandingkan Haar wavelet.
2. Teknik watermarking dapat dilakukan pada media digital lainnya seperti audio maupun video, tetapi kedua media tersebut sangat sukar karena sensitive terhadap perubahan data yang kecil sekalipun, sehingga diperlukan pengembangan perangkat lunak lebih lanjut sehingga memungkinkan untuk menyimpan pesan rahasia ke dalam dua media digital tersebut.
3. Dalam penelitian ini menggunakan teknik non blind watermarking, artinya teknik watermarking yang memerlukan citra host dan citra ber-watermark untuk merekonstruksi watermark. Sedangkan untuk pengembangan selanjutnya dapat digunakan teknik blind watermarking merupakan teknik watermarking yang tidak memerlukan citra host untuk melakukan rekonstruksi.
67
DAFTAR PUSTAKA
[1] Alfatwa, Dean Fathony. (2009). “Watermarking Pada Citra Digital Menggunakan Discrete Wavelet Transform”. Bandung: Institute Teknologi Bandung.
[2] Asiyah, Nur. (2014). ” Contoh Pelanggaran Hak Cipta Dalam Dunia Internet”. Update: 25 februari 2014 . [3] Dwiandiyanta, B. Yudi. “Perbandingan Watermarking
Citra dengan Alihragam Wavelet dan Discrete Cosine Transform”. Yogyakarta : Universitas Atma Jaya Yogyakarta.
[4] Gonzalez, R.C., E.W., Rafael. (2008). “Digital Image Processing”. Prentice-Hall. Inc.. United State, America.
[5] Hakim, Arif Rahman. (2012). “Analisa Perbandingan Watermarking Image Menggunakan Discrete Wavelet Transform”. Jakarta: Universitas Indonesia.
[6] Hidayat, Erwin Yudi., & Udayanti, Erika Devi. (2011).
"Hybrid Watermarking Citra Digital Menggunakan Teknik DWT-DCT SVD," in Seminar Nasional Teknologi Informasi & Komunikasi Terapan, Semarang.
[7] Ischam, Ali. (2010). “Watermarking Citra Digital Menggunakan Transformasi Hybrid DWT dan DCT”.
Universitas Diponegoro.
[8] Kakade, Kiran, dkk. (2015). “Improving Image Steganography Using Invisible Watermarking”.
International Journal of Computer Science and Information Technology Research, 3(2):190-194.
[9] Kutter, Martin; Fabien A. P. Petitcolas. 1999. A Fair Benchmark for Image Watermarking Systems. The International Society for Optical Engineering.
[10] Munir, Rinaldi. (2006). “Sekilas Image Watermarking untuk Memproteksi Citra Digital dan Aplikasinya pada Citra Medis”. Bandung : Institut Teknologi Bandung.
[11] Putra, Darma. 2010. Pengolahan Citra Digital. Andi : Yogyakarta. Hal: 39-44, 63, 95-116.
[12] Reza, Moh Khavid. (2014). “Perancangan Sistem Watermarking Pada Citra Digital Menggunakan Metode DCT dan LSB”. Surakarta : Universitas Muhammadiyah.
[13] Sundararajan, Duraisamy (2011). “Fundamentals of the Discrete Haar Wavelet Transform”.
[14] Sutoyo T, Mulyanto E, Suhartono V, Nurhayati O. D, Wijanarko. 2009. Teori Pengolahan Citra Digital. Andi:
Yogyakarta. Hal: 20-23, 249-252.
[15] Syahbana, Yoanda Alim, dkk. (2015). “Algoritma Penyisipan Frame untuk Peningkatan Akurasi Metode Aligned Peak Signal-to-Noise Ratio dalam Pengukuran Kualitas Video”. Jurnal Komputer Terapan. Vol. 01, no 02.
[16] Tuakia, N.M., Suprapto, & Yudistira, N. “Implementasi Watermarking Pada Citra Medis Menggunakan Metode Discrete Wavelet Transform (DWT)”. Malang : Universitas Brawijaya.
[17] Wong, Ny poi., & Cahyadi, Willy. (2012). “Rancang Bangun Aplikasi Watermarking Pada Gambar Dengan Algoritma Digital Semipublic”. ISSN. 1412-0100. Vol.
13, no 02.
LAMPIRAN A
Kode Program Proses Antarmuka Awal
function varargout = fanyGUIedit(varargin) gui_State.gui_Callback = str2func(varargin{1});
gui_mainfcn(gui_State, varargin{:});
end
function fanyGUIedit_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = fanyGUIedit_OutputFcn (hObject, eventdata, handles)
varargout{1} = handles.output;
LAMPIRAN A (LANJUTAN)
function pushbutton1_Callback(hObject, eventdata, handles)
global asli;
[filename pathname] =
uigetfile({'*.jpg';'*.bpm';'*png';},'File Selector');
alamat = strcat(pathname,filename);
asli = imread(alamat);
asli = imresize(asli,[256 256]) axes(handles.axes1)
imshow(asli)
function pushbutton2_Callback(hObject, eventdata, handles)
global watermark;
[filename pathname] =
uigetfile({'*.jpg';'*.bpm';'*png';},'File Selector');
alamat = strcat(pathname,filename);
watermark = imread(alamat);
watermark = imresize(watermark,[256 256]) axes(handles.axes2)
imshow(watermark)
LAMPIRAN B
Kode Program Proses Dekomposisi DWT2 function pushbutton3_Callback(hObject, eventdata, handles)
global asli; global cA; global cH; global cV;
global cD; global cA2; global cH2; global cV2;
global cD2; global cA3; global cH3; global cV3;
global cD3; global watermark; global wA; global wH; global wV; global wD; global wA2; global wH2; global wV2; global wD2; global wA3; global wH3; global wV3; global wD3;
LAMPIRAN B (LANJUTAN)
disp('Waktu untuk DWT2 Level 1 adalah');
toc
wA2(:,:,1) = (wAr2);
disp('Waktu untuk DWT2 Level 2 adalah');
toc
LAMPIRAN B (LANJUTAN)
wD2(:,:,2) = (wDg2);
wD2(:,:,3) = (wDb2);
wH(:,:,1) = (wHr);
wH(:,:,2) = (wHg);
wH(:,:,3) = (wHb);
wV(:,:,1) = (wVr);
wV(:,:,2) = (wVg);
wV(:,:,3) = (wVb);
wD(:,:,1) = (wDr);
wD(:,:,2) = (wDg);
wD(:,:,3) = (wDb);
disp('Waktu untuk DWT2 Level 3 adalah');
toc;
end
axes(handles.axes3)
imshow(uint8([cA,cH;cV,cD])) axes(handles.axes4)
imshow(uint8([wA,wH;wV,wD]))
LAMPIRAN C
Kode Program Proses Penyisipan Citra
function edit2_Callback(hObject, eventdata, set(hObject,'BackgroundColor','white');
end
function pushbutton5_Callback(hObject, eventdata, handles)
global parameter; global cA; global cH; global cV; global cD; global cA2; global cH2; global cV2; global cD2; global cA3; global cH3; global cV3; global cD3; global wA; global wA2; global wA3; global cwA; global cwA2; global cwA3;
global level;
LAMPIRAN C (LANJUTAN) end
axes(handles.axes5)
imshow(uint8([cwA,cH;cV,cD]))
function pushbutton6_Callback(hObject, eventdata, handles)
global asli; global cH; global cV; global cD;
global cH2; global cV2; global cD2; global cH3;
global cV3; global cD3; global cwA; global cwA2;
global cwA3; global level; global watermarked;
if(strcmp(level,'DWT2 Level 1')==1)
watermarked(:,:,1) = idwt2(cwA(:,:,1), cH(:,:,1), cV(:,:,1), cD(:,:,1),'haar');
else
if(strcmp(level,'DWT2 Level 2')==1)
cwA(:,:,1) = idwt2(cwA2(:,:,1), cH2(:,:,1), cV2(:,:,1), cD2(:,:,1),'haar');
watermarked(:,:,3) = idwt2(cwA(:,:,3), cH(:,:,3), cV(:,:,3), cD(:,:,3),'haar');
else
cwA2(:,:,1) = idwt2(cwA3(:,:,1), cH3(:,:,1), cV3(:,:,1), cD3(:,:,1),'haar');
cwA2(:,:,2) = idwt2(cwA3(:,:,2), cH3(:,:,2), cV3(:,:,2), cD3(:,:,2),'haar');
cwA2(:,:,3) = idwt2(cwA3(:,:,3), cH3(:,:,3), cV3(:,:,3), cD3(:,:,3),'haar');
cwA(:,:,1) = idwt2(cwA2(:,:,1), cH2(:,:,1),
LAMPIRAN C (LANJUTAN)
watermarked(:,:,1) = idwt2(cwA(:,:,1), cH(:,:,1), cV(:,:,1), cD(:,:,1),'haar');
watermarked(:,:,2) = idwt2(cwA(:,:,2), cH(:,:,2), cV(:,:,2), cD(:,:,2),'haar');
watermarked(:,:,3) = idwt2(cwA(:,:,3), cH(:,:,3), cV(:,:,3), cD(:,:,3),'haar');
end
axes(handles.axes6)
imshow(uint8(watermarked))
LAMPIRAN D
Kode Program Rekonstruksi Watermark
function pushbutton7_Callback(hObject, eventdata, handles)
global parameter; global wtA; global wtA2;
global wtA3; global wH; global wH2;
global wH3; global wV; global wV2; global wV3;
global wD; global wD2; global wD3;
global level; global cA; global cA2; global cA3;
if(strcmp(level,'DWT2 Level 1')==1)
wH2(:,:,1), wV2(:,:,1), wD2(:,:,1), 'haar');
waA(:,:,2),
LAMPIRAN D (LANJUTAN)
waA3 = (wtA3 - cA3) / parameter;
waA2(:,:,1) ,
wH3(:,:,1), wV3(:,:,1), wD3(:,:,1), 'haar');
waA2(:,:,2) ,
wH3(:,:,2), wV3(:,:,2), wD3(:,:,2), 'haar');
waA2(:,:,3) ,
wH3(:,:,3), wV3(:,:,3), wD3(:,:,3), 'haar');
waA(:,:,1) ,
wH2(:,:,1), wV2(:,:,1), wD2(:,:,1), 'haar');
waA(:,:,2) ,
wH2(:,:,2), wV2(:,:,2), wD2(:,:,2), 'haar');
waA(:,:,3) ,
wH2(:,:,3), wV2(:,:,3), wD2(:,:,3), 'haar');
restorasi(:,:,1) ,
wH(:,:,1), wV(:,:,1), wD(:,:,1), 'haar');
restorasi(:,:,2) ,
wH(:,:,2), wV(:,:,2), wD(:,:,2), 'haar');
restorasi(:,:,3) ,
wH(:,:,3), wV(:,:,3), wD(:,:,3), 'haar');
end
axes(handles.axes7) imshow(uint8(restorasi))
LAMPIRAN D (LANJUTAN)
function pushbutton8_Callback(hObject, eventdata, handles)
global watermarked; global wtA; global wtA2;
global wtA3; global level;
if(strcmp(level,'DWT2 Level 1')==1)
[wAr,wHr,wVr,wDr] = (watermarked(:,:,1),'haar');
[wAg,wHg,wVg,wDg] = (watermarked(:,:,2),'haar');
[wAb,wHb,wVb,wDb] = (watermarked(:,:,3),'haar');
LAMPIRAN D (LANJUTAN)
LAMPIRAN D (LANJUTAN) wD2(:,:,2) = (wDg2);
wD2(:,:,3) = (wDb2);
wH(:,:,1) = (wHr);
wH(:,:,2) = (wHg);
wH(:,:,3) = (wHb);
wV(:,:,1) = (wVr);
wV(:,:,2) = (wVg);
wV(:,:,3) = (wVb);
wD(:,:,1) = (wDr);
wD(:,:,2) = (wDg);
wD(:,:,3) = (wDb);
end
axes(handles.axes8)
imshow(uint8([wtA,wH;wV,wD]))
LAMPIRAN E
Kode Program Pengujian terhadap Noise
function varargout = fanyNoise(varargin) gui_State.gui_Callback = str2func(varargin{1});
gui_mainfcn(gui_State, varargin{:});
end
function fanyNoise_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
global parameter; global cA; global cA2; global cA3; global wH; global wH2; global wH3; global wV; global wV2; global wV3; global wD; global wD2; global wD3;
global watermarked; global watermark; global level;
LAMPIRAN E (LANJUTAN)
level = getappdata(0,'level');
cA3 = getappdata(0,'cA3');
cA2 = getappdata(0,'cA2');
cA = getappdata(0,'cA');
wH3 = getappdata(0,'wH3');
wH2 = getappdata(0,'wH2');
wH = getappdata(0,'wHb');
wV3 = getappdata(0,'wV3');
wV2 = getappdata(0,'wV2');
wV = getappdata(0,'wV');
wD3 = getappdata(0,'wD3');
wD2 = getappdata(0,'wD2');
wD = getappdata(0,'wD');
axes(handles.axes1)
imshow(uint8(watermarked)) guidata(hObject, handles);
function varargout =
fanyNoise_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles)
global watermarked; global noised;
contents = get(handles.popupmenu1,'String');
noise = contents{get(handles.popupmenu1,'Value')};
LAMPIRAN E (LANJUTAN) noised = imnoise(uint8(watermarked),'salt &
pepper',parameter);
global noised; global level; global wtA; global wtA2; global wtA3;
if(strcmp(level,'DWT2 Level 1')==1)
[wAr,wHr,wVr,wDr] = (noised(:,:,1),'haar');
[wAg,wHg,wVg,wDg] = (noised(:,:,2),'haar');
LAMPIRAN E (LANJUTAN)
[wAr,wHr,wVr,wDr] = (noised(:,:,1),'haar');
[wAg,wHg,wVg,wDg] = (noised(:,:,2),'haar');
[wAb,wHb,wVb,wDb] = (noised(:,:,3),'haar');
[wAr,wHr,wVr,wDr] = (noised(:,:,1),'haar');
[wAg,wHg,wVg,wDg] = (noised(:,:,2),'haar');
[wAb,wHb,wVb,wDb] = (noised(:,:,3),'haar');
LAMPIRAN E (LANJUTAN)
LAMPIRAN E (LANJUTAN)
function pushbutton2_Callback(hObject, eventdata, handles)
global parameter; global wtA; global wtA2;
global wtA3; global wH; global wH2;
global wH3; global wV; global wV2; global wV3;
global wD; global wD2; global wD3;
global level; global cA; global cA2; global cA3;
if(strcmp(level,'DWT2 Level 1')==1)
wH2(:,:,3), wV2(:,:,3), wD2(:,:,3), 'haar');
restorasi(:,:,1) ,
LAMPIRAN E (LANJUTAN)
else
waA3 = (wtA3 - cA3) / parameter;
waA2(:,:,1) ,
wH3(:,:,1), wV3(:,:,1), wD3(:,:,1), 'haar');
waA2(:,:,2),
wH3(:,:,2), wV3(:,:,2), wD3(:,:,2), 'haar');
waA2(:,:,3) ,
wH3(:,:,3), wV3(:,:,3), wD3(:,:,3), 'haar');
waA(:,:,1) ,
wH2(:,:,1), wV2(:,:,1), wD2(:,:,1), 'haar');
waA(:,:,2) ,
wH2(:,:,2), wV2(:,:,2), wD2(:,:,2), 'haar');
waA(:,:,3) ,
wH2(:,:,3), wV2(:,:,3), wD2(:,:,3), 'haar');
restorasi(:,:,1) ,
wH(:,:,1), wV(:,:,1), wD(:,:,1), 'haar');
restorasi(:,:,2) ,
wH(:,:,2), wV(:,:,2), wD(:,:,2), 'haar');
restorasi(:,:,3) ,
wH(:,:,3), wV(:,:,3), wD(:,:,3), 'haar');
end
axes(handles.axes3) imshow(uint8(restorasi))
Penulis bernama lengkap Stephanie Gani, yang biasa dipanggil Fanny. Penulis dilahirkan di Surabaya pada tanggal 4 November 1992.
Penulis lulus dari SD Kristen Petra 7 Surabaya, SMP Kristen Petra 3 Surabaya, SMA Kristen Petra 2 Surabaya. Pada tahun 2011 penulis mengikuti tes SNMPTN dan penulis diterima di perguruan tinggi negeri ITS Surabaya, Jurusan Matematika..
Semenjak kuliah penulis senang mempelajari bahasa pemrograman. Bahasa Pemrograman yang pernah penulis pelajari adalah C, C++, dan Java. Oleh karena itu, penulis memilih bidang minat Ilmu Komputer.
Semasa menempuh jenjang pendidikan S-1, penulis juga aktif dalam kegiatan no-akademis diantaranya pernah menjadi Pembicara di Seminar dengan Tema “Stay Classy and Act Like a Boss” di Universitas Ciputra pada tahun 2016. Untuk mendapatkan informasi yang berhubungan dengan Tugas Akhir ini dapat ditujukan ke alamat email : [email protected]