i 1 HALAMAN JUDUL PENERAPAN TEKNIK WATERMARKING METODE DWT (DISCRETE WAVELET TRANSFORM) PADA CITRA DIGITAL SKRIPSI Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer Program Studi Teknik Informatika Oleh: Benedictus Reynusa Paradhipta 115314075 PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS SANATA DHARMA YOGYAKARTA 2015 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
103
Embed
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJIrepository.usd.ac.id/596/2/115314075_full.pdf · yang tidak kasat mata pada citra ber -watermark dengan nilai PSNR 48,43 dan SSIM 0,949. Konstanta
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
i
1 HALAMAN JUDUL
PENERAPAN TEKNIK WATERMARKING METODE DWT
(DISCRETE WAVELET TRANSFORM)
PADA CITRA DIGITAL
SKRIPSI
Diajukan Untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Komputer
Program Studi Teknik Informatika
Oleh:
Benedictus Reynusa Paradhipta
115314075
PROGRAM STUDI TEKNIK INFORMATIKA
JURUSAN TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2015
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
ii
2 HALAMAN JUDUL (English)
APPLICATION OF DIGITAL IMAGE WATERMARKING
TECHNIQUE USING DWT
(DISCRETE WAVELETE TRANSFORM) METHOD
a Thesis
Presented as Partial Fulfillment of the Requirements to Obtain Sarjana Komputer
Degree in Informatics Engineering Study Program
By:
Benedictus Reynusa Paradhipta
115314075
INFORMATICS ENGINEERING STUDY PROGRAM
DEPARTMENT OF INFORMATICS ENGINEERING
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2015
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
iii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
iv
PENERAPAN TEKNIK WATERMARKING METODE DWT
(DISCRETE WAVELET TRANSFORMS)
PADA CITRA DIGITAL
3 HALAMAN PENGESAHAN
Dipersiapkan dan disusun oleh:
Nama : Benedictus Reynusa Paradhipta
NIM : 115314075
Telah dipertahankan di depan panitia penguji
pada tanggal 23 Juli 2015
dan dinyatakan memenuhi syarat
Susunan Panitia Penguji:
Nama Lengkap Tanda Tangan
Ketua : Alb. Agung Hadhiatma, S.T., M.T. _____________
Sekretaris : Dr. Anastasia Rita Widiarti, M. Kom. _____________
Anggota : Sri Hartati Wijono, S.Si., M.Kom. _____________
Yogyakarta, Juli 2015
Fakultas Sains dan Teknologi
Universitas Sanata Dharma
Dekan,
(Paulina Heruningsih Prima Rosa, S.Si., M.Sc)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
v
4 HALAMAN PERSEMBAHAN
“Better is the end of a thing than its beginning, and the patient
in spirit is better than the proud in spirit.”
( Ecclesiastes 7:8 )
“When you feel like giving up, remember why you held so long in the first
place, because COURAGE is not having the strength to go on; it is
going on when you don't have the strength.”
-- Theodore Roosevelt
Skripsi ini dipersembahkan untuk:
Keluarga dan semua orang terkasih yang selalu percaya kepadaku,
The other wing, partner on my path.
For my existences.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
vi
5 PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini
tidak memuat karya atau bagian karya orang lain, kecuali yang telah disebutkan
dalam kutipan dan daftar pustaka sebagaimana layaknya sebuah karya ilmiah.
Yogyakarta, 31 Juli 2015
Penulis
Benedictus Reynusa Paradhipta
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
vii
LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI KARYA ILMIAH
UNTUK KEPENTINGAN AKADEMIS
6 LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI
Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma:
Nama : Benedictus Reynusa Paradhipta
NIM : 115314075
Demi pengembangan ilmu pengetahuan, saya memberikan kepada perpustakaan
Universitas Sanata Dharma karya ilmiah yang berjudul:
PENERAPAN TEKNIK WATERMARKING METODE DWT
(DISCRETE WAVELET TRANSFORMS)
PADA CITRA DIGITAL
Beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan
kepada perpustakaan Universitas Sanata Dharma hak untuk menyimpan,
mengalihkan dalam bentuk media lain, mengelolanya dalam bentuk pangkalan data,
mendistribusikan secara terbatas, dan mempublikasikan di internet atau media lain
untuk kepentingan akademis tanpa perlu meminta ijin dari saya maupun
memberikan royalty kepada saya selama tetap mencatumkan nama saya sebagai
penulis.
Demikian pernyataan ini saya buat dengan sebenarnya.
Yogyakarta, 31 Juli 2015
Yang menyatakan,
Benedictus Reynusa Paradhipta
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
viii
7 ABSTRAK
PENERAPAN TEKNIK WATERMARKING METODE DWT
(DISCRETE WAVELET TRANSFORMS)
PADA CITRA DIGITAL
ABSTRAK
Citra dokumen digital memiliki kelebihan dalam penyimpanan dan
pengiriman dalam waktu singkat dibandingkan dengan dokumen yang dicetak.
Citra dokumen digital seringkali digunakan sebagai persyaratan dalam registrasi
beasiswa online atau lamaran kerja online yang membutuhkan persyaratan berupa
ijazah atau sertifikat. Untuk melindungi keaslian citra dokumen atau kepemilikan
atas citra dokumen tersebut, teknik watermarking adalah salah satu yang terbaik.
Tujuan dari skripsi ini adalah penggunaan teknik watermarking dengan
menggunakan metode DWT (Discrete Wavelet Transform) pada citra digital
berwarna. Citra digital ditransformasikan ke dalam 4 subband; LL, LH, HL dan
HH. Proses penyisipan watermark (embed) dilakukan pada subband LL. Kualitas
citra dihitung menggunakan PSNR (Peak Signal-to-Noise Ratio) dan SSIM
(Structural Similiarity).
Dari percobaan yang dilakukan, konstanta yang digunakan pada proses
penyisipan watermark (embed) adalah α = 0.01 sehingga menghasilkan watermark
yang tidak kasat mata pada citra ber-watermark dengan nilai PSNR 48,43 dan SSIM
0,949. Konstanta yang digunakan pada proses ekstraksi watermark (extract) adalah
α = 10 sehingga menghasilkan watermark yang dapat dikenali secara HVS (Human
Visual System) oleh penulis dari citra ber-watermark, bahkan watermark masih
dapat dikenali dari citra ber-watermark yang sudah mengalami modifikasi blurring,
croping, contrasting , add noise, rotate dan scaling.
Kata kunci : watermarking, watermark, wavelet, DWT, PSNR, SSIM, Robustness
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
ix
8 ABSTRACT
APPLICATION OF DIGITAL IMAGE WATERMARKING
TECHNIQUE USING DWT
(DISCRETE WAVELETE TRANSFORM) METHOD
ABSTRACT
The document digital image have more advantageous in storage and
spreading than printed document. The document digital image commonly used for
online scholarship registration requirment or in an online job application that
require important document in digital media, such as qualification certificate or
diploma certificate. In order to protect copyright and authentication of these
document digital image, watermarking technic is one of the best solution.
This paper proposes a digital private watermarking algorithm based on
discrete wavelet transform (DWT) for color image. The original color image is
transformed into four subband frequency; LL,LH,HL,HH. The embedding process
in on subband LL. The quality of watermarked image calculated by PSNR (Peak
Signal-to-Noise Ratio) and SSIM (Structural Similiarity).
From this experiment, the constant number used for embed is α = 0.01
produce invisible watermark on watermarked image with PSNR value 48,43 and
SSIM value 0,949. The constant number used for extract is α = 10 produce
recognizable watermark in HVS (Human Visual System) by writer from
watermarked image, even from watermarked image that have modificated by
blurring, croping, contrasting , add noise, rotate and scaling.
Gambar 4.4 (a) Hasil dekomposisi citra host, (b) Hasil dekomposisi citra
watermark
2. Mencari koefisien fLL dari citra host.
Karena proses dekomposisi hanya dilakukan dalam satu tingkat,
sehingga koefisien fLL dari citra host hanya ada satu koefisien saja.
Sehingga proses penyisipan watermark dilakukan dengan
memodifikasi koefisien ini.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
35
3. Memodifikasi fLL citra host menggunakan fLL citra watermark.
Modifikasi yang dilakukan pada fLL citra host akan menjadi koefisien
fLL baru yang akan digunakan dalam proses rekonstruksi. Modifikasi
yang dilakukan adalah dengan menambahkan koefisien fLL citra host
dengan koefisien fLL citra citra watermark yang sudah dikalikan dengan
suatu nilai konstanta (α). Varian nilai konstanta (α) yang digunakan
menjadi bahan percobaan yang dilakukan pada bab V.
newhost_LL = h_LL + (0.001*w_LL) (Lampiran 1)
4. Merekonstruksi citra
Proses rekonstruksi citra dilakukan dengan menggunakan fungsi
idwt2D_1level() yang ada pada idwt2D_1level.m (lampiran 4).
idwt2D_1level.m merupakan adaptasi dan modifikasi dari fungsi
Wavelet Toolbox dari Matlab Image Processing Toolbox, dengan
menggunakan wavelet haar. Hasil rekonstruksi dapat dilihat pada
gambar 4.5. Potongan coding rekonstruksi citra pada Matlab:
rgb2=idwt2D_1level(newhost_LL,h_LH,h_HL,h_HH,'haar'); rgb2=uint8(rgb2); imshow(rgb2,'Parent',handles.watermarking); title(handles.watermarking,'Citra Digital yang sudah
diberi watermark'); (Lampiran 1)
Gambar 4.5. Rekonstruksi dengan IDWT menghasilkan citra ber-watermark
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
36
4.3. Alur Proses Ekstraksi ( extract )
1. Dekomposisi citra host, citra watermark dan citra ber-watermark
Dekomposisi citra digital dilakukan dengan menggunakan fungsi
dwt2D_1level() yang ada pada dwt2D_1level.m (lampiran 3).
dwt2D_1level.m merupakan adaptasi dan modifikasi dari fungsi
Wavelet Toolbox dari Matlab Image Processing Toolbox, dengan
menggunakan wavelet haar. Hasil dekomposisi dapat dilihat pada
gambar 4.6. Potongan coding dekomposisi pada Matlab:
Gambar 4.6 (a) Hasil dekomposisi citra host, (b) Hasil dekomposisi citra
watermark, (c) Hasil dekomposisi citra ber-watermark.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
37
2. Mencari koefisien fLL dari citra ber-watermark.
Karena proses dekomposisi hanya dilakukan dalam satu tingkat,
sehingga koefisien fLL dari citra ber-watermark hanya ada satu
koefisien saja. Sehingga proses ekstraksi watermark dilakukan dengan
memodifikasi koefisien ini.
3. Memodifikasi fLL citra ber-watermark menggunakan fLL citra
watermark dan fLL citra host.
Modifikasi yang dilakukan pada fLL citra ber-watermark akan menjadi
koefisien fLL watermark hasil ekstraksi yang akan digunakan dalam
proses rekonstruksi. Modifikasi yang dilakukan adalah dengan
mengurangkan koefisien fLL citra host dengan koefisien fLL citra
watermark kemudian dibagi dengan suatu nilai konstanta (α). Varian
nilai konstanta (α) yang digunakan menjadi bahan percobaan yang
dilakukan pada bab V.
newwatermark_LL=(wm_LL-h_LL)/0.001; (Lampiran 2)
4. Merekonstruksi citra
Proses rekonstruksi citra dilakukan dengan menggunakan fungsi
idwt2D_1level() yang ada pada idwt2D_1level.m (lampiran 4).
idwt2D_1level.m merupakan adaptasi dan modifikasi dari fungsi
Wavelet Toolbox dari Matlab Image Processing Toolbox, dengan
menggunakan wavelet haar. Kemudian citra hasil rekonstruksi
ditampilkam dalam Graphical User Interface perangkat lunak. Hasil
rekonstruksi dapat dilihat pada gambar 4.7.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
38
rgb2=idwt2D_1level(newhost_LL,h_LH,h_HL,h_HH,'haar'); rgb2=uint8(rgb2); imshow(rgb2,'Parent',handles.watermarking); title(handles.watermarking,'Citra Digital yang sudah
diberi watermark'); (Lampiran 2)
Gambar 4.7. Rekonstruksi dengan IDWT menghasilkan citra watermark hasil
ekstraksi.
4.4. Hitung PSNR dan SSIM
Proses menghitung PSNR dan SSIM dilakukan dengan membandingkan
piksel dari citra host dan citra ber-watermark yang merupakan hasil dari proses
watermarking.
4.4.1 Hitung PSNR
Penghitungan nilai PSNR dari citra ber-watermark dilakukan dengan
cara mencari MSE. Coding fungsi MSE dan PSNR pada Matlab :
function [ out ] = MSE( pic1,pic2 ) %Mean Squared Error [m, n]=size(pic1); for i=1:m for j=1:n e=e+double((pic1(i,j)-pic2(i,j))^2); end end out=e/(m*n); end
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
39
function [ out ] = PSNR( pic1,pic2 )%Peak Signal to-NoiseRatio e=MSE(pic1,pic2); out=20*log10(255/sqrt(e));
end (Lampiran 5)
4.4.2. Hitung SSIM (Structural Similiarity)
Penghitungan nilai SSIM menggunakan fungsi SSIM() yang ada
pada SSIM.m (Lampiran 6). Hasil output hitung PSNR dan SSIM dapat
dilihat pada gambar 4.8. Source code dari SSIM.m bersumber dari
https://ece.uwaterloo.ca/~z70wang/research/ssim/ dan dipublikasikan
pada Journal IEEE Transactions on Image Processing, vol. 13, no. 4, pp.
600-612 oleh Z. Oleh Wang, A. C. Bovik, H. R. Sheikh dan E. P. Simoncelli
tahun 2004. Potongan coding hitung SSIM pada Matlab:
img1 = imread('citra_asal.jpg'); imgrez1 = imresize(img1,[3410 2473]); img2 = imread('hasil1_mark2.jpg'); imgrez2 = imresize(img2,[3410 2473]); A = rgb2gray(imgrez1); B = rgb2gray(imgrez2); [mssim, ssim_map] = SSIM(A, B); [ out ] = PSNR(A,B); fprintf('The SSIM value is %0.4f.\n',mssim);
fprintf('The PSNR value is %0.4f.\n',out); (Lampiran 7)
Gambar 4.8. Hasil perhitungan PSNR dan SSIM
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
40
4.5. Penambahan Standart Malicious Attack pada citra ber-watermark
Seluruh proses modifikasi citra ber-watermark menggunakan fungsi-fungsi
yang sudah disediakan oleh Matlab. Potongan oding dari fungsi-fungsi yang
digunakan :
%add noise salt and pepper 10% (mean=0, variance=0.1) B = imnoise(A,'salt & pepper',0.1); %add noise gaussian 10% (mean=0 , variance = 0.1) C = imnoise(A,'gaussian',0.1); %blur radius 10 pixel blur10 = fspecial('disk',10); D = imfilter(A,blur10,'replicate'); %blur radius 5 pixel blur5 = fspecial('disk',5); E = imfilter(A,blur5,'replicate'); %rotate 5 derajat F = imrotate(A,5); % imshow(F); %rotate 90 derajat G = imrotate(A,90); %contrast adjust RGB high_out = 0.9 H= imadjust(A,[0 0 0; 0.9 0.9 0.9],[]); %Scaling up 20% I1 = imresize(A, 1.2); %Scaling down 20%
I2 = imresize(A, 0.8); (Lampiran 8)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
41
5. BAB V
HASIL DAN PEMBAHASAN
5.1. Kerja Perangkat Lunak
Kerja perangkat lunak memiliki 2 fungsi utama yaitu:
1. Penyisipan watermark (embed) : menghasilkan citra ber-watermark,
dapat dilihat pada gambar 5.1.
2. Ekstraksi watermark (extract) : menghasilkan citra watermark dari
proses ekstraksi citra ber-watermak, dapat dilihat pada gambar 5.2.
Gambar 5.1 Penyisipan watermark (embed)
Gambar 5.2 Ekstraksi watermark (extract)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
42
5.2. Hasil Pengujian
Citra digital yang digunakan sebagai media penyisipan watermark
ditampilkan pada Tabel 5.1, sedangkan untuk citra watermark ditampilkan pada
Tabel 5.2.
Tabel 5.1 File citra asal (host)
Nama file Ukuran Citra Citra
Citra1.jpg 3410 x 2473
pixel
Tabel 5.2 File citra watermark
Nama file Ukuran Citra Citra
watermark1.jpg 2000 x 1500
pixel
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
43
watermark2.jpg 2000 x 1500
pixel
5.2.1. Hasil Pengujian Citra Ber-watermark
Hasil pengujian menggunakan 2 varian citra watermark yang berbeda
dengan menggunakan varian konstanta (α) yang menentukan kekuatan penyisipan
watermark. Konstanta (α) yang digunakan dalam proses embed adalah 0.1 dan 0.01,
Hasil dari proses embed menghasilkan citra baru (citra ber-watermark) yang tidak
berbeda jauh dengan citra asal (host) yang ditampilkan pada Tabel 5.3. dan Tabel
5.4. Hal ini dibuktikan dengan nilai PSNR dari citra ber-watermark lebih dari 40db
yang mengindikasikan bahwa kualitas citra ber-watermark tinggi (Cheddad, Curran
dan Kevitt 2010). Hal ini juga diperkuat dengan nilai SSIM (Structural Similiarity)
yang lebih dari 0,9 dimana ketika nilai SSIM adalah 1 maka mengindikasikan
bahwa citra yang dibandingkan adalah citra yang sama (Wang, Bovik,
Sheikh dan Simoncelli, 2004: 600-612).
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
44
Tabel 5.3 Tabel hasil watermarking dengan watermark1.jpg
No Konstanta
embed (α) Citra host Hasil watermarking
Nilai
PSNR
dan
SSIM
1.
α = 0.1
PSNR =
53,29
SSIM =
0,936
2.
α = 0.01
PSNR =
48,43
SSIM =
0,949
Tabel 5.4 Tabel hasil watermarking dengan watermark2.jpg
No Konstanta
embed (α) Citra host Hasil watermarking
Nilai
PSNR
dan
SSIM
1.
α = 0.1
PSNR =
50,23
SSIM =
0,917
2.
α = 0.01
PSNR =
48,61
SSIM =
0,949
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
45
5.2.2. Hasil Pengujian Ekstraksi dari Citra Ber-watermark
Pengujian ekstraksi citra ber-watermark ini dilakukan dengan
menggunakan beberapa varian konstanta (α) dalam proses extract. Varian
konstanta (α) yang digunakan dalam proses extract adalah 0.01, 0.1, 1 dan 10.
Proses extract dilakukan pada citra ber-watermark, dimana citra ber-watermark
tersebut dihasilkan dari proses embed yang menggunakan konstanta (α) 0.01
dan 0.1 .
Dari hasil pengujian ini membuktikan bahwa semakin besar nilai
konstanta (α) dalam proses extract maka hasil ekstraksi watermark yang
didapat akan semakin terlihat jelas secara Human Visual System (HVS). Hal ini
ditunjukan pada Tabel 5.5 untuk ekstraksi dari citra ber-watermark yang didapat
dari proses embed dengan konstanta (α) 0,1 dan pada Tabel 5.6 untuk ekstraksi
dari citra ber-watermark yang didapat dari proses embed dengan konstanta (α)
0,01.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
46
Tabel 5.5 Tabel extract dengan α = 0.01, α = 0.1, α = 1, α =10 untuk embed dengan α = 0.1
... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT
% --- Executes just before WatermarkingGUI is made visible. function WatermarkingGUI_OpeningFcn(hObject, eventdata, handles,
varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of
MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to WatermarkingGUI (see
% --- Outputs from this function are returned to the command line. function varargout = WatermarkingGUI_OutputFcn(hObject, eventdata,
handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of
MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of
MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of
edit1 as a double
% --- Executes during object creation, after setting all
properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of
MATLAB % handles empty - handles not created until after all
CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
% --- Executes on button press in browse1. function browse1_Callback(hObject, eventdata, handles) global filename pathname; [filename,pathname]=uigetfile('*.jpg;*.jpeg','Choose Image : '); if isequal(filename,0) || isequal(pathname,0) return; else browse1 = imread([pathname,filename]); host = imresize(browse1, [2480 3508]); %standart A4 untuk
resolusi cetak end imshow(host,'Parent',handles.image1);
% --- Executes on button press in browse2. function browse2_Callback(hObject, eventdata, handles)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
78
global filename1 pathname1; [filename1,pathname1]=uigetfile('*.jpg;*.jpeg','Choose Image : '); if isequal(filename1,0) || isequal(pathname1,0) return; else browse2 = imread([pathname1,filename1]); watermark = imresize(browse2, [2480 3508]); %standart A4 untuk
resolusi cetak end imshow(watermark,'Parent',handles.image2);
% --- Executes on button press in proses. function proses_Callback(hObject, eventdata, handles) global filename pathname; global filename1 pathname1; read=imread([pathname,filename]); rgbimage = imresize(read, [2480 3508]); %standart A4 untuk
resolusi cetak imshow(rgbimage,'Parent',handles.watermarking); title(handles.watermarking,'Citra Digital Asli'); pause(0.5); [h_LL,h_LH,h_HL,h_HH]=dwt2D_1level(rgbimage,'haar'); dec2d = [ h_LL, h_LH; h_HL, h_HH ]; dec2d=uint8(dec2d); imshow(dec2d,'Parent',handles.watermarking); title(handles.watermarking,'dwt2D_1level dari Citra Digital
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before ExtractGUI is made visible. function ExtractGUI_OpeningFcn(hObject, eventdata, handles,
varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of
MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to ExtractGUI (see VARARGIN) % Choose default command line output for ExtractGUI handles.output = hObject; % Update handles structure guidata(hObject, handles); usd=imread('logo_usd.jpg'); host=imread('host.jpg'); mark=imread('watermark.jpg'); marked=imread('watermarked.jpg');
% --- Outputs from this function are returned to the command line. function varargout = ExtractGUI_OutputFcn(hObject, eventdata,
handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of
MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in browse1. function browse1_Callback(hObject, eventdata, handles) global filename pathname; [filename,pathname]=uigetfile('*.jpg;*.jpeg','Choose Image : '); if isequal(filename,0) || isequal(pathname,0) return; else browse1 = imread([pathname,filename]); host = imresize(browse1, [2480 3508]); %standart A4 untuk
resolusi cetak end imshow(host,'Parent',handles.image1);
% --- Executes on button press in browse2. function browse2_Callback(hObject, eventdata, handles) global filename1 pathname1; [filename1,pathname1]=uigetfile('*.jpg;*.jpeg','Choose Image : '); if isequal(filename1,0) || isequal(pathname1,0) return; else browse2 = imread([pathname1,filename1]); watermark = imresize(browse2, [2480 3508]); %standart A4 untuk
resolusi cetak end imshow(watermark,'Parent',handles.image2);
% --- Executes on button press in proses. function proses_Callback(hObject, eventdata, handles) global filename pathname; global filename1 pathname1; global filename2 pathname2; % rgbimage=imread('host.jpg'); read=imread([pathname,filename]); rgbimage = imresize(read, [2480 3508]); %standart A4 untuk
resolusi cetak imshow(rgbimage,'Parent',handles.image3); title(handles.image3,'Citra Digital Asli'); pause(0.5) [h_LL,h_LH,h_HL,h_HH]=dwt2D_1level(rgbimage,'haar'); dec2d = [... h_LL, h_LH; ... h_HL, h_HH ... ]; dec2d=uint8(dec2d); imshow(dec2d,'Parent',handles.image3); title(handles.image3,'dwt2D_1level dari Citra Digital Asli');
resolusi cetak imshow(rgbimage3,'Parent',handles.image3); title(handles.image3,'Citra Digital yang sudah diberi watermark'); pause(0.5); [wm_LL,wm_LH,wm_HL,wm_HH]=dwt2(rgbimage3,'haar'); dec2 = [ wm_LL, wm_LH; wm_HL, wm_HH ]; dec2=uint8(dec2); imshow(dec2,'Parent',handles.image3); title(handles.image3,'dwt2D_1level dari Citra Digital yang sudah
diberi watermark'); pause(0.5); %watermarking newwatermark_LL= (wm_LL-h_LL)/1; %output rgb2=idwt2D_1level(newwatermark_LL,w_LH,w_HL,w_HH,'haar'); gray = rgb2gray(rgb2); bw = im2bw(gray, 0.90); % inversrgb2 = imcomplement(bw); imshow(bw,'Parent',handles.image3); title(handles.image3,'Watermark yang sudah diekstrak'); function save_Callback(hObject, eventdata, handles) img = getimage(handles.image3); [FileName, PathName] = uiputfile('*.jpg', 'Save As'); if PathName==0, return; end Name = fullfile(PathName,FileName); imwrite(img, Name, 'jpg');
% --- Executes on button press in browse3. function browse3_Callback(hObject, eventdata, handles) global filename2 pathname2; [filename2,pathname2]=uigetfile('*.jpg;*.jpeg','Choose Image : '); if isequal(filename2,0) || isequal(pathname2,0) return;
resolusi cetak end imshow(marked,'Parent',handles.image3);
Lampiran 3
dwt2D_1level.m function [a,h,v,d] = dwt2D_1level(x,varargin)%Variable length
input argument list.
nbIn = nargin; %%NARGIN Number of function input arguments. narginchk(2,7) if ischar(varargin{1}) [Lo_D,Hi_D] = wfilters(varargin{1},'d'); next = 2; else Lo_D = varargin{1}; Hi_D = varargin{2}; next = 3; end
% cek argumen untuk Size, Shift and Extension. DWT_Attribute = getappdata(0,'DWT_Attribute'); if isempty(DWT_Attribute) , DWT_Attribute = dwtmode('get'); end dwtEXTM = DWT_Attribute.extMode; % Default: Extension. shift = DWT_Attribute.shift2D; % Default: Shift. for k = next:2:nbIn-1 switch varargin{k} case 'mode' , dwtEXTM = varargin{k+1}; case 'shift' , shift = mod(varargin{k+1},2); end end
% Hitung size. lf = length(Lo_D); sx = size(x);
% Extend, Decompose & Extract coefficients. first = 2-shift; flagPer = isequal(dwtEXTM,'per'); if ~flagPer sizeEXT = lf-1; last = sx+lf-1; else sizeEXT = lf/2; last = 2*ceil(sx/2); end
x = double(x); if length(sx)==2 y = wextend('addcol',dwtEXTM,x,sizeEXT); z = conv2(y,Lo_D(:)','valid'); a = convdown(z,Lo_D,dwtEXTM,sizeEXT,first,last); h = convdown(z,Hi_D,dwtEXTM,sizeEXT,first,last); z = conv2(y,Hi_D(:)','valid');
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
83
v = convdown(z,Lo_D,dwtEXTM,sizeEXT,first,last); d = convdown(z,Hi_D,dwtEXTM,sizeEXT,first,last); else a = cell(0,3); h = cell(0,3); v = cell(0,3); d = cell(0,3); for k = 1:3 y = wextend('addcol',dwtEXTM,x(:,:,k),sizeEXT); z = conv2(y,Lo_D(:)','valid'); a{k} = convdown(z,Lo_D,dwtEXTM,sizeEXT,first,last); h{k} = convdown(z,Hi_D,dwtEXTM,sizeEXT,first,last); z = conv2(y,Hi_D(:)','valid'); v{k} = convdown(z,Lo_D,dwtEXTM,sizeEXT,first,last); d{k} = convdown(z,Hi_D,dwtEXTM,sizeEXT,first,last); end a = cat(3,a{:}); h = cat(3,h{:}); v = cat(3,v{:}); d = cat(3,d{:}); end
function y = convdown(x,F,dwtEXTM,lenEXT,first,last)
y = x(:,first(2):2:last(2)); y = wextend('addrow',dwtEXTM,y,lenEXT); y = conv2(y',F(:)','valid'); y = y'; y = y(first(1):2:last(1),:); %-------------------------------------------------------%
Lampiran 4
idwt2D_1level.m
function x = idwt2D_1level(a,h,v,d,varargin) narginchk(2,7) if isempty(a) && isempty(h) && isempty(v) && isempty(d), x = [];
return; end if ischar(varargin{1}) [Lo_R,Hi_R] = wfilters(varargin{1},'r'); next = 2; else Lo_R = varargin{1}; Hi_R = varargin{2}; next = 3; end
% Cek arguments untuk Size, Shift and Extension. DWT_Attribute = getappdata(0,'DWT_Attribute'); if isempty(DWT_Attribute) , DWT_Attribute = dwtmode('get'); end dwtEXTM = DWT_Attribute.extMode; % Default: Extension. shift = DWT_Attribute.shift2D; % Default: Shift. sx = []; k = next; while k<=length(varargin) if ischar(varargin{k}) switch varargin{k}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
84
case 'mode' , dwtEXTM = varargin{k+1}; case 'shift' , shift = mod(varargin{k+1},2); end k = k+2; else sx = varargin{k}; k = k+1; end end x = upsconv2(a,{Lo_R,Lo_R},sx,dwtEXTM,shift)+ ... % Approximation. upsconv2(h,{Hi_R,Lo_R},sx,dwtEXTM,shift)+ ... % Horizontal
function [ out ] = MSE( pic1,pic2 ) %Mean Squared Error [m, n]=size(pic1); for i=1:m for j=1:n e=e+double((pic1(i,j)-pic2(i,j))^2); end end out=e/(m*n); end function [ out ] = PSNR( pic1,pic2 ) %Peak Signal to-Noise Ratio e=MSE(pic1,pic2); out=20*log10(255/sqrt(e)); end
Lampiran 6
function [mssim, ssim_map] = SSIM(img1, img2, K, window, L) if (size(img1) ~= size(img2)) ssim_index = -Inf; ssim_map = -Inf; return; end
[M N] = size(img1);
if (nargin == 2) if ((M < 11) || (N < 11)) ssim_index = -Inf; ssim_map = -Inf; return end window = fspecial('gaussian', 11, 1.5); %