Anda di halaman 1dari 18

Wijaya, Marvin Ch dan Agus Prijono. 2007.

Pengolahan Citra Digital Menggunakan


Matlab. Bandung : Informatika Bandung.

Wikipedia. 08 Agustus 2008. Transformasi


Wavelet. http://id.wikipedia.org/wiki/Transformasi_Wavelet.html.

LAMPIRAN 1

Tampilan Aplikasi Penyisipan Watermark

Tampilan Aplikasi Ekstraksi Watermak

Universitas Sumatera Utara


Listing Program

1. Penyisipan Watermarking

function varargout = WaveletHaar(varargin)

% ADDWATERMARKHAAR1TKT Application M-file for WaveletHaar.fig

% FIG = ADDWATERMARKHAAR1TKT launch WaveletHaar GUI.

% ADDWATERMARKHAAR1TKT('callback_name', ...) invoke the named


callback.

% Last Modified by GUIDE v2.0 25-Nov-2008 17:34:00

if nargin == 0 % LAUNCH GUI

Universitas Sumatera Utara


fig = openfig(mfilename,'reuse');

% Generate a structure of handles to pass to callbacks, and store it.

handles = guihandles(fig);

guidata(fig, handles);

if nargout > 0

varargout{1} = fig;

end

elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK

try

if (nargout)

[varargout{1:nargout}] = feval(varargin{:}); % FEVAL


switchyard

else

feval(varargin{:}); % FEVAL switchyard

end

catch

disp(lasterr);

end

end

Universitas Sumatera Utara


% --------------------------------------------------------------------

function varargout = Open_Callback(h, eventdata, handles, varargin)

proyek=guidata(gcbo);

[namafile,direktori]=uigetfile({'*.bmp';'*.png';'*.tif';'*.jpg'},'Buka Gambar');

Asli=imread(namafile);

set(proyek.figure1,'currentAxes',proyek.GbrAsli);

set(imshow(Asli));

set(proyek.GbrAsli,'Userdata',Asli);

imwrite(Asli,'Asli.bmp','bmp');

% --------------------------------------------------------------------

function varargout = btnwatermark_Callback(h, eventdata, handles, varargin)

proyek=guidata(gcbo);

[namafile,direktori]=uigetfile({'*.bmp';'*.jpg'; '*.tif';'*.png'},'Buka Gambar');

watermark=imread(namafile);

set(proyek.figure1,'currentAxes',proyek.GbrWatermark);

set(imshow(watermark));

set(proyek.GbrWatermark,'Userdata',watermark);

imwrite(watermark,'watermark.bmp','bmp');

% --------------------------------------------------------------------

function varargout = btnHaarTranform_Callback(h, eventdata, handles, varargin)

proyek=guidata(gcbo);

start_time=cputime;

Universitas Sumatera Utara


k=2;

file_name='Asli.bmp';

cover_object=double(imread(file_name));

Mc=size(cover_object,1); %Panjang

Nc=size(cover_object,2); %Lebar

file_name='watermark.bmp';

message=double(imread(file_name));

Mm=size(message,1); %Panjang

Nm=size(message,2); %Lebar

message_vector=round(reshape(message,Mm*Nm,1)./256);

file_name='_key.bmp';

key=double(imread(file_name))./256;

rand('state',key);

[cA1,cH1,cV1,cD1] = dwt2(cover_object,'haar');

set(proyek.figure1,'currentAxes',proyek.GbrCv);

set(imshow(uint8(cV1)));

set(proyek.GbrCv,'Userdata',cV1);

set(proyek.figure1,'currentAxes',proyek.GbrCh);

set(imshow(uint8(cH1)));

set(proyek.GbrCh,'Userdata',cH1);

set(proyek.figure1,'currentAxes',proyek.GbrCd);

Universitas Sumatera Utara


set(imshow(uint8(cD1)));

set(proyek.GbrCd,'Userdata',cD1);

set(proyek.figure1,'currentAxes',proyek.GbrCa);

set(imshow(uint8(cA1)));

set(proyek.GbrCa,'Userdata',cA1);

for (kk=1:length(message_vector))

pn_sequence_h=round(2*(rand(Mc/2,Nc/2)-0.5));

pn_sequence_v=round(2*(rand(Mc/2,Nc/2)-0.5));

if (message(kk) == 0)

cH1=cH1+k*pn_sequence_h;

cV1=cV1+k*pn_sequence_v;

end

end

watermarked_image = idwt2(cA1,cH1,cV1,cD1,'haar',[Mc,Nc]);

watermarked_image_uint8=uint8(watermarked_image);

imwrite(watermarked_image_uint8,'dwt_watermarked.bmp','bmp');

elapsed_time=cputime-start_time,

psnr=psnr(cover_object,watermarked_image_uint8,Mc,Nc),

set(proyek.figure1,'CurrentAxes',proyek.GbrWatermarked);

Universitas Sumatera Utara


set(imshow(uint8(watermarked_image_uint8)));

2. Ekstraksi Watermarking

function varargout = WaveletHaar(varargin)

% EKSTRAKWATERMARKHAAR1TKT Application M-file for WaveletHaar.fig

% FIG = EKSTRAKWATERMARKHAAR1TKT launch WaveletHaar GUI.

% EKSTRAKWATERMARKHAAR1TKT('callback_name', ...) invoke the named


callback.

% Last Modified by GUIDE v2.0 25-Nov-2008 17:34:00

if nargin == 0 % LAUNCH GUI

fig = openfig(mfilename,'reuse');

% Generate a structure of handles to pass to callbacks, and store it.

handles = guihandles(fig);

guidata(fig, handles);

if nargout > 0

varargout{1} = fig;

end

elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK

Universitas Sumatera Utara


try

if (nargout)

[varargout{1:nargout}] = feval(varargin{:}); % FEVAL


switchyard

else

feval(varargin{:}); % FEVAL switchyard

end

catch

disp(lasterr);

end

end

% --------------------------------------------------------------------

function varargout = Open_Callback(h, eventdata, handles, varargin)

proyek=guidata(gcbo);

[namafile,direktori]=uigetfile({'*.bmp';'*.png';'*.tif';'*.jpg'},'Buka Gambar');

Watermarked=imread(namafile);

set(proyek.figure1,'currentAxes',proyek.GbrWatermarked);

set(imshow(Watermarked));

set(proyek.GbrWatermarked,'Userdata',Watermarked);

imwrite(Watermarked,'watermarked.bmp','bmp');

% --------------------------------------------------------------------

Universitas Sumatera Utara


function varargout = btnHaarTranform_Callback(h, eventdata, handles, varargin)

proyek=guidata(gcbo);

start_time=cputime;

file_name='watermarked.bmp';

watermarked_image=double(imread(file_name));

Mw=size(watermarked_image,1); %Panjang

Nw=size(watermarked_image,2); %Lebar

file_name='watermark.bmp';

orig_watermark=double(imread(file_name));

Mo=size(orig_watermark,1); %Panjang

No=size(orig_watermark,2); %Lebar

file_name='_key.bmp';

key=double(imread(file_name))./256;

rand('state',key);

message_vector=ones(1,Mo*No);

[cA1,cH1,cV1,cD1] = dwt2(watermarked_image,'haar');

Universitas Sumatera Utara


set(proyek.figure1,'currentAxes',proyek.GbrCv);

set(imshow(uint8(cV1)));

set(proyek.figure1,'currentAxes',proyek.GbrCh);

set(imshow(uint8(cH1)));

set(proyek.figure1,'currentAxes',proyek.GbrCd);

set(imshow(uint8(cD1)));

set(proyek.figure1,'currentAxes',proyek.GbrCa);

set(imshow(uint8(cA1)));

for (kk=1:length(message_vector))

pn_sequence_h=round(2*(rand(Mw/2,Nw/2)-0.5));

pn_sequence_v=round(2*(rand(Mw/2,Nw/2)-0.5));

correlation_h(kk)=corr2(cH1,pn_sequence_h);

correlation_v(kk)=corr2(cV1,pn_sequence_v);

correlation(kk)=(correlation_h(kk)+correlation_v(kk))/2;

end

for (kk=1:length(message_vector))

if (correlation(kk) > mean(correlation))

message_vector(kk)=0;

end

Universitas Sumatera Utara


end

message=reshape(message_vector,Mo,No);

set(proyek.figure1,'currentAxes',proyek.GbrWatermark);

set(imshow(message));

elapsed_time=cputime-start_time,

LAMPIRAN 2

DEKOMPOSISI CITRA DENGAN WAVELET HAAR


Misalkan kita memiliki citra berukuran 8x8 dengan nilai sebagai berikut:

47 73 47 30 45 37 27 8

67 69 46 42 63 26 24 14

72 40 59 36 62 11 15 57

67 35 72 52 51 35 30 83

39 37 65 61 41 20 24 70

51 70 54 68 37 36 111 88

64 50 44 50 44 48 119 148

86 46 50 37 34 86 99 145

Universitas Sumatera Utara


Langkah-langkah dekomposisi wavelet Haar terhadap potongan citra tersebut adalah:

1. Tentukan filter dekomposisi LH, yaitu

½ ½ 0 0 0 0 0 0

½ -½ 0 0 0 0 0 0

0 0 ½ ½ 0 0 0 0

0 0 ½ -½ 0 0 0 0

0 0 0 0 ½ ½ 0 0

0 0 0 0 ½ -½ 0 0

0 0 0 0 0 0 ½ ½

0 0 0 0 0 0 ½ -½

2. Untuk setiap kolom, kalikan kolom tersebut dengan matriks dekomposisi di


atas.

Contoh untuk kolom pertama:

½ ½ 0 0 0 0 0 0 47 57

½ -½ 0 0 0 0 0 0 67 -10

Universitas Sumatera Utara


0 0 ½ ½ 0 0 0 0 72 69

0 0 ½ -½ 0 0 0 0 * 67 = 2.5

0 0 0 0 ½ ½ 0 0 39 45

0 0 0 0 ½ -½ 0 0 51 - 6

0 0 0 0 0 0 ½ ½ 64 75

0 0 0 0 0 0 ½ -½ 86 -11

Hasil dekomposisi perbaris ini akan menghasilkan matriks D2 sbb

57.0000 71.0000 46.5000 36.0000 54.0000 31.5000 25.5000 11.0000

-10.0000 2.0000 0.5000 -6.0000 -9.0000 5.5000 1.5000 -3.0000

69.5000 37.5000 65.5000 44.0000 56.5000 23.0000 22.5000 70.0000

2.5000 2.5000 -6.5000 -8.0000 5.5000 -12.0000 -7.5000 -13.0000

45.0000 53.5000 59.5000 64.5000 39.0000 28.0000 67.5000 79.0000

-6.0000 -16.5000 5.5000 -3.5000 2.0000 -8.0000 -43.5000 -9.0000

75.0000 48.0000 47.0000 43.5000 39.0000 67.0000 109.0000 146.5000

-11.0000 2.0000 -3.0000 6.5000 5.0000 -19.0000 10.0000 1.5000

Keterangan:

- warna biru adalah hasil aproksimasi


- warna merah adalah hasil detail

Universitas Sumatera Utara


3. Atur hasil pada point 3 supaya bagian aproksimasi berkumpul di bagian atas
dan bagian detail mengumpul di bagian bawah (matriks D3)

57.0000 71.0000 46.5000 36.0000 54.0000 31.5000 25.5000 11.0000

69.5000 37.5000 65.5000 44.0000 56.5000 23.0000 22.5000 70.0000

45.0000 53.5000 59.5000 64.5000 39.0000 28.0000 67.5000 79.0000

75.0000 48.0000 47.0000 43.5000 39.0000 67.0000 109.0000 146.5000

-10.0000 2.0000 0.5000 -6.0000 -9.0000 5.5000 1.5000 -3.0000

2.5000 2.5000 -6.5000 -8.0000 5.5000 -12.0000 -7.5000 -13.0000

-6.0000 -16.5000 5.5000 -3.5000 2.0000 -8.0000 -43.5000 -9.0000

-11.0000 2.0000 -3.0000 6.5000 5.0000 -19.0000 10.0000 1.5000

4. Setelah itu, lakukan hal yang sama dengan cara mengambil perbaris.
½ ½ 0 0 0 0 0 0 57 64

½ -½ 0 0 0 0 0 0 71 -7

0 0 ½ ½ 0 0 0 0 46.5 41.25

0 0 ½ -½ 0 0 0 0 * 36 = 5.25

0 0 0 0 ½ ½ 0 0 54 72.7

0 0 0 0 ½ -½ 0 0 31.5 11.25

0 0 0 0 0 0 ½ ½ 25.5 18.25

Universitas Sumatera Utara


0 0 0 0 0 0 ½ -½ 11 7.25

Kemudian hasilnya diletakkan di matriks hasil kembali dalam bentuk baris, sehingga
hasilnya (matriks D4) akan sebagai berikut:

64.0000 -7.0000 41.2500 5.2500 42.7500 11.2500 18.2500 7.2500

53.5000 16.0000 54.7500 10.7500 39.7500 16.7500 46.2500 -23.7500

49.2500 -4.2500 62.0000 -2.5000 33.5000 5.5000 73.2500 -5.7500

61.5000 13.5000 45.2500 1.7500 53.0000 -14.0000 127.7500 -18.7500

-4.0000 -6.0000 -2.7500 3.2500 -1.7500 -7.2500 -0.7500 2.2500

2.5000 0 -7.2500 0.7500 -3.2500 8.7500 -10.2500 2.7500

-11.2500 5.2500 1.0000 4.5000 -3.0000 5.0000 -26.2500 -17.2500

-4.5000 -6.5000 1.7500 -4.7500 -7.0000 12.0000 5.7500 4.2500

5. Atur hasil pada point 4 supaya bagian aproksimasi berkumpul di bagian kiri
dan bagian detail mengumpul di bagian kanan (matriks D5)

64.0000 41.2500 42.7500 18.2500 -7.0000 5.2500 11.2500 7.2500

53.5000 54.7500 39.7500 46.2500 16.0000 10.7500 16.7500 -23.7500

49.2500 62.0000 33.5000 73.2500 -4.2500 -2.5000 5.5000 -5.7500

61.5000 45.2500 53.0000 127.7500 13.5000 1.7500 -14.0000 -18.7500

-4.0000 -2.7500 -1.7500 -0.7500 -6.0000 3.2500 -7.2500 2.2500

2.5000 -7.2500 -3.2500 -10.2500 0 0.7500 8.7500 2.7500

-11.2500 1.0000 -3.0000 -26.2500 5.2500 4.5000 5.0000 -17.2500

Universitas Sumatera Utara


-4.5000 1.7500 -7.0000 5.7500 -6.5000 -4.7500 12.0000 4.2500

6. Kita telah berhasil melakukan dekomposisi wavelet Haar 1 level terhadap


citra. Matriks yang dihasilkan pada point 6 dapat juga dilihat sebagai berikut:

64.0000 41.2500 42.7500 18.2500 -7.0000 5.2500 11.2500 7.2500

53.5000 54.7500 39.7500 46.2500 16.0000 10.7500 16.7500 -23.7500

49.2500 62.0000 33.5000 73.2500 -4.2500 -2.5000 5.5000 -5.7500

61.5000 45.2500 53.0000 127.7500 13.5000 1.7500 -14.0000 -18.7500

-4.0000 -2.7500 -1.7500 -0.7500 -6.0000 3.2500 -7.2500 2.2500

2.5000 -7.2500 -3.2500 -10.2500 0 0.7500 8.7500 2.7500

-11.2500 1.0000 -3.0000 -26.2500 5.2500 4.5000 5.0000 -17.2500

-4.5000 1.7500 -7.0000 5.7500 -6.5000 -4.7500 12.0000 4.2500

Keterangan:

- warna biru adalah bagian aproksimasi


- warna merah adalah bagian detail horizontal
- warna coklat adalah bagian detai vertikal
- warna hijau adalah bagian detail diagonal

REKONSTRUKSI CITRA DENGAN WAVELET HAAR

Universitas Sumatera Utara


Berikut adalah langkah-langkah yang perlu dilakukan untuk merekonstruksi citra
tersebut kembali menjadi citra semula

1. Tentukan filter rekonstruksi L* dan H*, yaitu

1 0 0 0 1 0 0 0

1 0 0 0 -1 0 0 0

0 1 0 0 0 1 0 0

L*= 0 1 0 0 H* = 0 -1 0 0

0 0 1 0 0 0 1 0

0 0 1 0 0 0 -1 0

0 0 0 1 0 0 0 1

0 0 0 1 0 0 0 -1

2. Untuk setiap baris hasil dekomposisi (matriks D5), kalikan matriks L* dan H*
tersebut dengan bagian dari matriks D5, menjadi:

1 0 0 0 1 0 0 0

1 0 0 0 -1 0 0 0

0 1 0 0 64 0 1 0 0 -7

0 1 0 0 * 41.25 + 0 -1 0 0 * 5.25

0 0 1 0 42.75 0 0 1 0 11.25

0 0 1 0 18.25 0 0 -1 0 7.25

0 0 0 1 0 0 0 1

Universitas Sumatera Utara


0 0 0 1 0 0 0 -1

64 -7 57

64 7 71

41.25 5.25 46.5

= 41.25 + -5.25 = 36

42.75 11.25 54

42.75 -11.25 31.5

18.25 7.25 25.5

18.25 -7.25 11

Kemudian hasilnya kembali diletakkan secara perbaris di matriks hasil, yang


nantinya akan sama persis dengan matriks D3

3. Dengan cara yang sama, dilakukan perkalian pada tahap 2 terhadap setiap
kolom dari matriks yang diperoleh pada langkah sebelumnya. Langkah ini
akan menghasilkan kembali citra awal.

Universitas Sumatera Utara

Anda mungkin juga menyukai