lampiran a citra - repository.maranatha.edu · % tabel kuantisasi luminance q=[ 16 11 10 16 24 40...

30
LAMPIRAN A CITRA

Upload: phamcong

Post on 09-Mar-2019

221 views

Category:

Documents


1 download

TRANSCRIPT

LAMPIRAN A

CITRA

A-1

A.1. Citra Host ”Baboon.bmp” Sebelum dan Setelah Disisipkan Pesan

Citra Host 128x128 Pesan 30% Pesan 60% Pesan 100%

Citra Host 192x192 Pesan 30%

Pesan 60% Pesan 100%

A-2

Citra Host 256x256 Pesan 30%

Pesan 60% Pesan 100%

A-3

A.2. Citra Host ”Lena.bmp” Sebelum dan Setelah Disisipkan Pesan

Citra Host 128x128 Pesan 30% Pesan 60% Pesan 100%

Citra Host 192x192 Pesan 30%

Pesan 60% Pesan 100%

A-4

Citra Host 256x256 Pesan 30%

Pesan 60% Pesan 100%

A-5

A.3. Citra Host ”Water Lilies.bmp” Sebelum dan Setelah Disisipkan Pesan

Citra Host 128x128 Pesan 30% Pesan 60% Pesan 100%

Citra Host 192x192 Pesan 30%

Pesan 60% Pesan 100%

A-6

Citra Host 256x256 Pesan 30%

Pesan 60% Pesan 100%

A-7

A.4. Citra Host ”Baboon.jpg” Sebelum dan Setelah Disisipkan Pesan

Citra Host Citra Setelah Disisipkan Pesan

A-8

A.5. Citra ”lena.jpg” Sebelum dan Setelah Disisipkan Pesan

Citra Host Citra Setelah Disisipkan Pesan

A-9

A.6. Citra Berwarna Polos Tanpa Corak Sebelum dan Setelah Disisipkan Pesan

Citra Host Citra Setelah

Disisipkan Pesan

Citra Host Citra Setelah

Disisipkan Pesan

A-10

A.7. Hasil Ekstraksi Citra

Citra ”baboon.bmp” 128x128

Citra ”baboon.bmp” 192x192

.

A-11

Citra ”baboon.bmp” 256x256

Citra ”lena.bmp” 128x128

A-12

Citra ”lena.bmp” 192x192

Citra ”lena.bmp” 256x256

A-13

Citra ”water lilies.bmp” 128x128

Citra ”water lilies.bmp” 192x192

A-14

Citra ”water lilies.bmp” 256x256

Citra ”baboon.jpg”

A-15

Citra ”lena.jpg”

LAMPIRAN B

PENILAIAN SUBJEKTIF

B-1

B.1. Kategori Penilaian Mean Opinion Score (MOS)

Nilai Kualitas citra Penjelasan

5 Sangat Bagus Citra yang diamati mempunyai kualitas yang sangat baik

hampir serupa dengan citra aslinya

4 Bagus Citra yang diamati mempunyai kualitas bagus tanpa

gangguan yang berarti

3 Cukup Citra yang diamati mempunyai kualitas yang cukup baik

dengan gangguan yang sedikit berarti

2 Batas Citra yang diamati mempunyai kualitas buruk dengan

gangguan yang berarti

1 Buruk Citra yang diamati memiliki kualitas yang demikian

buruk sehingga tidak dapat diamati lagi

B.2. Contoh Kuisioner untuk Penilaian Mean Opinion Score (MOS)

Nama :

Citra “baboon.bmp”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256

Citra host terhadap citra disisipkan pesan 30%

Citra host terhadap citra disisipkan pesan 60%

Citra host terhadap citra disisipkan pesan 100%

Citra “lena.bmp”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256

Citra host terhadap citra disisipkan pesan 30%

Citra host terhadap citra disisipkan pesan 60%

Citra host terhadap citra disisipkan pesan 100%

Citra “water lilies.bmp”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256

Citra host terhadap citra disisipkan pesan 30%

Citra host terhadap citra disisipkan pesan 60%

Citra host terhadap citra disisipkan pesan 100%

B-2

Citra “baboon.jpg”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256

Citra host terhadap citra disisipkan pesan

Citra “lena.jpg”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256

Citra host terhadap citra disisipkan pesan

B.3. Hasil Penilaian MOS

No Nama Baboon.bmp

128

Baboon.bmp

192

Baboon.bmp

256

Lena.bmp

128

Lena.bmp

192

Lena.bmp

256

1. Ferdinand 4 5 5 4 5 5 5 4 4 5 4 4 4 4 4 3 4 4

2. Tommy 5 4 4 5 4 4 4 4 5 4 4 3 3 3 3 4 4 3

3. Fritz Oliver 5 5 5 5 5 4 5 5 4 3 4 4 4 3 3 4 3 3

4. Yuwen 5 5 5 4 5 5 5 5 5 4 4 4 4 4 4 4 3 4

5. Vivi Valen 5 5 5 5 4 5 5 5 5 4 4 4 4 4 3 4 3 3

No Nama Lilies.bmp

128

Lilies.bmp

192

Lilies.bmp

256

Baboon.jpg Lena.jpg

128 192 256 128 192 256

1. Ferdinand 5 5 5 4 4 4 5 4 4 5 4 4 4 4 3

2. Tommy 4 4 4 5 4 4 4 4 4 4 4 5 3 4 3

3. Fritz Oliver 5 4 4 4 4 4 4 4 4 5 5 4 4 3 3

4. Yuwen 5 5 5 5 5 4 5 4 4 5 5 5 5 4 4

5. Vivi Valen 4 5 4 4 4 4 4 4 4 5 5 5 4 4 4

LAMPIRAN C

PERANGKAT LUNAK

C-1

%% Perhitungan Kapasitas Maksmimum Pesan Rahasia %%

% Input Citra Host

function pushbutton1_Callback(hObject, eventdata, handles) [filename, pathname] = uigetfile({'*.bmp','All Image Files';... '*.*','All Files' },'select image'); if isequal([filename,pathname],[0,0]) return else handles.img=imread(fullfile(pathname, filename)); guidata(hObject, handles); axes(handles.axes1); imshow(handles.img); img = handles.img; end

% Tabel kuantisasi luminance Q=[ 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99];

% Tabel kuantisasi chrominance CQ=[17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99];

% Pengurutan zig-zag ZigZag_Order = uint8([ 1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21 28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64]); ZigZag_Order = ZigZag_Order';

reverse_zigzag_order_8x8 = zeros(8,8); for k = 1:(size(ZigZag_Order,1) *size(ZigZag_Order,2)) reverse_zigzag_order_8x8(k) = find(ZigZag_Order== k); end;

% Ubah RGB ke YCbCr img= handles.img;

yCbCr = rgb2ycbcr(img); Y = double(yCbCr(:,:,1)); Cb=double(yCbCr(:,:,2)); Cr=double(yCbCr(:,:,3)); [xm,xn]=size(Y);

C-2

% Hitung nilai DCT dan kuantisasi Y Y_dct = blkproc (Y,[8 8],'dct2'); quan_Y = blkproc (Y_dct,[8 8],@(x)Q.\ x ); quantz_Y = round(quan_Y); Single_column_quantized_image_Y=im2col(quantz_Y, [8 8],'distinct');

% Hitung nilai DCT dan kuantisasi Cb Cb_dct = blkproc (Cb,[8 8],'dct2'); quan_Cb = blkproc (Cb_dct,[8 8],@(x)CQ.\ x ); quantz_Cb = round(quan_Cb); Single_column_quantized_image_Cb=im2col(quantz_Cb, [8 8],'distinct');

% Hitung nilai DCT dan kuantisasi Cr Cr_dct = blkproc (Cr,[8 8],'dct2'); quan_Cr = blkproc (Cr_dct,[8 8],@(x)CQ.\ x ); quantz_Cr = round(quan_Cr); Single_column_quantized_image_Cr=im2col(quantz_Cr, [8 8],'distinct');

% Gabung nilai DCT terkuantisasi Y, Cb, dan Cr joined =

cat(2,Single_column_quantized_image_Y,Single_column_quantized_image_Cb

,Single_column_quantized_image_Cr);

% Ambil nilai yang bukan -2, -1, 0 dan 1 order=joined(:); not = order~=0 & order~=1 & order~=-1 & order~=-2;

% Hitung kapasitas maksimum pesan part = order(not); max = length(part); maximum_capacity = ceil((max/7)-3); set(handles.text4, 'string',maximum_capacity);

% hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

C-3

%% Proses Penyisipan Pesan Rahasia %%

% Ambil pesan yang telah diketikkan function edit1_Callback(hObject, eventdata, handles) edit1 = get(hObject,'string'); handles.msg = edit1; guidata(hObject,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)

% Ambil kunci enkripsi function edit2_Callback(hObject, eventdata, handles) edit2 = get(hObject,'string'); handles.key_enc = edit2; guidata(hObject,handles)

% hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Input Citra Host

function pushbutton2_Callback(hObject, eventdata, handles) [filename, pathname] = uigetfile({'*.bmp','All Image Files';... '*.*','All Files' },'select image'); if isequal([filename,pathname],[0,0]) return else handles.img=imread(fullfile(pathname, filename)); guidata(hObject, handles); axes(handles.axes1); imshow(handles.img); img = handles.img; end

% Tabel kuantisasi luminance Q=[ 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99];

% Tabel kuantisasi chrominance CQ=[17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99];

% Pengurutan zig-zag ZigZag_Order = uint8([ 1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21

C-4

28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64]); ZigZag_Order = ZigZag_Order';

% Reverse zig-zag reverse_zigzag_order_8x8 = zeros(8,8); for k = 1:(size(ZigZag_Order,1) *size(ZigZag_Order,2)) reverse_zigzag_order_8x8(k) = find(ZigZag_Order== k); end;

% Ambil nilai key untuk enkripsi dan pesan rahasia key_enc = handles.key_enc; msg = handles.msg; s = msg; k = str2num(key_enc);

% Ubah pesan rahasia jadi bit-bit biner nummsg = double(msg); minus = nummsg-k; binmsg = de2bi(minus,7); binmsg2 = binmsg'; binord = binmsg2(:);

% Hitung jumlah bit biner pesan rahasia n=length(binord(:)); panjang_msg=length(msg); panjang_msg_biner=de2bi(panjang_msg,14); panjang_msg_biner_urut=panjang_msg_biner(:);

% Ubah RGB ke YCbCr img= handles.img; yCbCr = rgb2ycbcr(img); Y = double(yCbCr(:,:,1)); Cb=double(yCbCr(:,:,2)); Cr=double(yCbCr(:,:,3)); [xm,xn]=size(Y);

% Hitung nilai DCT dan kuantisasi Y Y_dct = blkproc (Y,[8 8],'dct2'); quan_Y = blkproc (Y_dct,[8 8],@(x)Q.\ x ); quantz_Y = round(quan_Y); Single_column_quantized_image_Y=im2col(quantz_Y, [8 8],'distinct'); ZigZaged_Single_Column_Image_Y=Single_column_quantized_image_Y(ZigZag_

Order,:);

% Hitung nilai DCT dan kuantisasi Cb Cb_dct = blkproc (Cb,[8 8],'dct2'); quan_Cb = blkproc (Cb_dct,[8 8],@(x)CQ.\ x ); quantz_Cb = round(quan_Cb); Single_column_quantized_image_Cb=im2col(quantz_Cb, [8 8],'distinct'); ZigZaged_Single_Column_Image_Cb=Single_column_quantized_image_Cb(ZigZa

g_Order,:);

% Hitung nilai DCT dan kuantisasi Cr Cr_dct = blkproc (Cr,[8 8],'dct2'); quan_Cr = blkproc (Cr_dct,[8 8],@(x)CQ.\ x ); quantz_Cr = round(quan_Cr);

C-5

Single_column_quantized_image_Cr=im2col(quantz_Cr, [8 8],'distinct'); ZigZaged_Single_Column_Image_Cr=Single_column_quantized_image_Cr(ZigZa

g_Order,:);

% Gabung nilai Y, Cb, dan Cr joined =

cat(2,ZigZaged_Single_Column_Image_Y,ZigZaged_Single_Column_Image_Cb,Z

igZaged_Single_Column_Image_Cr);

% Ambil nilai yang bukan -2, -1, 0 dan 1 order_zigzag=joined(:); quantz=order_zigzag; not = quantz~=0 & quantz~=1 & quantz~=-1 & quantz~=-2; part = quantz(not);

% Penyisipan pesan

lsb = mod(part,2); part(1:14)=part(1:14)-lsb(1:14)+panjang_msg_biner_urut(1:14); part(15:n+14)=part(15:n+14)-lsb(15:n+14)+binord(1:n); quantz(not) = part; reshape_zigzag = reshape(quantz,64,xm*xn*3/64);

% Rekonstruksi nilai Y, Cb, dan Cr Y2 = reshape_zigzag(1:xm*xn); Y3 = reshape(Y2,64,xm*xn/64);

Cb2 = reshape_zigzag(xm*xn+1:xm*xn*2); Cb3 = reshape(Cb2,64,xm*xn/64);

Cr2 = reshape_zigzag(xm*xn*2+1:xm*xn*3); Cr3 = reshape(Cr2,64,xm*xn/64);

Single_column_quantized_image_Yy = Y3(reverse_zigzag_order_8x8,:); quantized_image_Y= col2im(Single_column_quantized_image_Yy, [8 8],

[xm xn], 'distinct'); quantze_Y= blkproc (quantized_image_Y,[8 8],@(x)Q.* x); Yx = uint8(blkproc (quantze_Y,[8 8],'idct2'));

Single_column_quantized_image_Cby = Cb3(reverse_zigzag_order_8x8,:); quantized_image_Cb= col2im(Single_column_quantized_image_Cby, [8 8],

[xm xn], 'distinct'); quantze_Cb= blkproc (quantized_image_Cb,[8 8],@(x)CQ.* x); Cbx = uint8(blkproc (quantze_Cb,[8 8],'idct2'));

Single_column_quantized_image_Cry = Cr3(reverse_zigzag_order_8x8,:); quantized_image_Cr= col2im(Single_column_quantized_image_Cry, [8 8],

[xm xn], 'distinct'); quantze_Cr= blkproc (quantized_image_Cr,[8 8],@(x)CQ.* x); Crx = uint8(blkproc (quantze_Cr,[8 8],'idct2'));

yCbCr(:,:,1) = Yx; yCbCr(:,:,2) = Cbx; yCbCr(:,:,3) = Crx; cRGB_out = ycbcr2rgb(yCbCr); out = cRGB_out; axes(handles.axes2) imshow(out)

% RLE run_level_pairs=[]; f = xm*xn*3/64;

C-6

for block_index=1:f single_block_image_vector_64(1:64)=0; for Temp_Vector_Index=1:64 single_block_image_vector_64(Temp_Vector_Index) =

reshape_zigzag(Temp_Vector_Index, block_index); end non_zero_value_index_array =

find(single_block_image_vector_64~=0); number_of_non_zero_entries =

length(non_zero_value_index_array);

if non_zero_value_index_array(1)==1, run=0; run_level_pairs=cat(1,run_level_pairs, run,

single_block_image_vector_64(non_zero_value_index_array(1))); end

for n=2:number_of_non_zero_entries, run=non_zero_value_index_array(n)-

non_zero_value_index_array(n-1)-1; run_level_pairs=cat(1, run_level_pairs, run,

single_block_image_vector_64(non_zero_value_index_array(n))); end

run_level_pairs=cat(1, run_level_pairs, 155, 155); end

length_rle=length(run_level_pairs); length_ori = xm*xn*3; compression_factor = length_ori / length_rle; set(handles.text6, 'string',compression_factor);

save_matrix=run_level_pairs; save_matrix2=run_level_pairs+100;

% Simpan sebagai stego-image [filename, pathname, filterindex] = uiputfile( ... {'*.abc', 'abc-Files (*.abc)';... '*.*', 'All Files (*.*)'},... 'Save'); if isequal(filename,0) || isequal(pathname,0) disp('User selected Cancel') else disp(['User selected',fullfile(pathname,filename)]) fid= fopen(filename,'w'); fwrite(fid, save_matrix2); end

% hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

C-7

%% Proses Ekstraksi Pesan Rahasia %%

% Ambil citra yang akan diekstrak

function pushbutton1_Callback(hObject, eventdata, handles) [filename, pathname] = uigetfile({'*.abc','All Image Files';... '*.*','All Files' },'select image'); if isequal([filename,pathname],[0,0]) return else fid= fopen(filename,'r'); load_matrix = fread(fid); load_matrix2 = load_matrix-100;

% Invers RLE run_level_pairs = load_matrix2; c=[]; for n=1:2:size(run_level_pairs),

if run_level_pairs(n)<155 zero_count=0; zero_count=run_level_pairs(n); for l=1:zero_count

c=cat(1,c,0); end c=cat(1,c,run_level_pairs(n+1)); else number_of_trailing_zeros= 64-mod(size(c),64); for l= 1:number_of_trailing_zeros c=cat(1,c,0); end end end

handles.x = c; guidata(hObject, handles);

Q = [ 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99];

CQ=[17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99];

ZigZag_Order = uint8([ 1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21

C-8

28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64]);

ZigZag_Order = ZigZag_Order'; reverse_zigzag_order_8x8 = zeros(8,8); for k = 1:(size(ZigZag_Order,1) *size(ZigZag_Order,2)) reverse_zigzag_order_8x8(k) = find(ZigZag_Order== k); end;

% rekonstruksi citra leng = length(c); tem=leng/64; xm = sqrt (leng/3); xn=xm; reshape_zigzag_after = reshape(c,64,tem);

Y2 = reshape_zigzag_after(1:xm*xn); Y3 = reshape(Y2,64,xm*xn/64);

Cb2 = reshape_zigzag_after(xm*xn+1:xm*xn*2); Cb3 = reshape(Cb2,64,xm*xn/64);

Cr2 = reshape_zigzag_after(xm*xn*2+1:xm*xn*3); Cr3 = reshape(Cr2,64,xm*xn/64);

Single_column_quantized_image_Yy = Y3(reverse_zigzag_order_8x8,:); quantized_image_Y= col2im(Single_column_quantized_image_Yy, [8 8],

[xm xn], 'distinct'); quantze_Y= blkproc (quantized_image_Y,[8 8],@(x)Q.* x); Yx = uint8(blkproc (quantze_Y,[8 8],'idct2'));

Single_column_quantized_image_Cby = Cb3(reverse_zigzag_order_8x8,:); quantized_image_Cb= col2im(Single_column_quantized_image_Cby, [8 8],

[xm xn], 'distinct'); quantze_Cb= blkproc (quantized_image_Cb,[8 8],@(x)CQ.* x); Cbx = uint8(blkproc (quantze_Cb,[8 8],'idct2'));

Single_column_quantized_image_Cry = Cr3(reverse_zigzag_order_8x8,:); quantized_image_Cr= col2im(Single_column_quantized_image_Cry, [8 8],

[xm xn], 'distinct'); quantze_Cr= blkproc (quantized_image_Cr,[8 8],@(x)CQ.* x); Crx = uint8(blkproc (quantze_Cr,[8 8],'idct2'));

% Menampilkan citra yang akan diekstrak yCbCr(:,:,1) = Yx; yCbCr(:,:,2) = Cbx; yCbCr(:,:,3) = Crx; cRGB_out = ycbcr2rgb(yCbCr); out = cRGB_out; axes(handles.axes1) imshow(out) end % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

C-9

% Ekstraksi pesan rahasia function pushbutton2_Callback(hObject, eventdata, handles) c = handles.x; key_dec = handles.key_dec; k=str2num(key_dec); not2 = c~=0 & c~=1 & c~=-1 & c~=-2; part2 = c(not2); key = part2(1:14); key2 = mod(key,2); key3 = key2'; key4 = bi2de(key3); n=key4*7; l=n/7; out_msg = part2(15:n+14); out_msg_biner = mod(out_msg,2); out_msg_biner_reshape = reshape(out_msg_biner,7,l); out_msg_biner_trans = out_msg_biner_reshape'; out_msg_decimal = bi2de(out_msg_biner_trans);

% Dekripsi pesan plus = out_msg_decimal+k;

% Menampilkan pesan yang berhasil diekstrak out_msg_ascii = char(plus); output_msg = out_msg_ascii'; set(handles.text2, 'string',output_msg);

% hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Ambil kunci untuk dekripsi

function edit2_Callback(hObject, eventdata, handles) edit2 = get(hObject,'string'); handles.key_dec = edit2; guidata(hObject,handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)