Sebelas Maret University · 2019. 4. 4. · Created Date: 8/6/2018 7:51:16 AM
LAMPIRAN A CITRA - repository.maranatha.edu · % Tabel kuantisasi luminance Q=[ 16 11 10 16 24 40...
Transcript of LAMPIRAN A CITRA - repository.maranatha.edu · % Tabel kuantisasi luminance Q=[ 16 11 10 16 24 40...
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-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-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-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
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
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)