disusun oleh: Eky Widiya Hastuti (50407313), Nurlena ( )
Pengolahan citra adalah salah satu cabang dari ilmu informatika. Pengolahan citra berkutat pada usaha untuk melakukan transformasi suatu citra /gambar menjadi citra lain dengan menggunakan teknik tertentu.
Citra adalah gambar dua dimensi yang dihasilkan dari gambar analog dua dimensi yang kontinu menjadi gambar diskrit melalui proses sampling. Gambar analog dibagi menjadi N baris dan M kolom sehingga menjadi gambar diskrit. Persilangan antara baris dan kolom tertentu disebut dengan piksel. Contohnya adalah gambar/titik diskrit pada baris n dan kolom m disebut dengan piksel [n,m]
Steganografi adalah seni dan ilmu menulis pesan tersembunyi atau menyembunyikan pesan dengan suatu cara sehingga selain si pengirim dan si penerima, tidak ada seorangpun yang mengetahui atau menyadari bahwa ada suatu pesan rahasia. Sebaliknya, kriptografi menyamarkan arti dari suatu pesan, tapi tidak menyembunyikan bahwa ada suatu pesan. Kata "steganografi" berasal dari bahasa Yunani steganos, yang artinya “tersembunyi atau terselubung”, dan graphein, “menulis”.
Pada umumnya, pesan steganografi muncul dengan rupa lain seperti gambar, artikel, daftar belanjaan, atau pesan-pesan lainnya. Pesan yang tertulis ini merupakan tulisan yang menyelubungi atau menutupi. Contohnya, suatu pesan bisa disembunyikan dengan menggunakan tinta yang tidak terlihat di antara garis-garis yang kelihatan.
Teknik steganografi meliputi banyak sekali metode komunikasi untuk menyembunyikan pesan rahasia (teks atau gambar) di dalam berkas-berkas lain yang mengandung teks, image, bahkan audio tanpa menunjukkan ciri-ciri perubahan yang nyata atau terlihat dalam kualitas dan struktur dari berkas semula. Metode ini termasuk tinta yang tidak tampak, microdots, pengaturan kata, tanda tangan digital, jalur tersembunyi dan komunikasi spektrum lebar.
Tujuan dari steganografi adalah merahasiakan atau menyembunyikan keberadaan dari sebuah pesan tersembunyi atau sebuah informasi. Dalam prakteknya, kebanyakan pesan disembunyikan dengan membuat perubahan tipis terhadap data digital lain yang isinya tidak akan menarik perhatian dari penyerang potensial, sebagai contoh sebuah gambar yang terlihat tidak berbahaya. Perubahan ini bergantung pada kunci (sama pada kriptografi) dan pesan untuk disembunyikan. Orang yang menerima gambar kemudian dapat menyimpulkan informasi terselubung dengan cara mengganti kunci yang benar ke dalam algoritma yang digunakan.
Pada metode steganografi cara ini sangat berguna jika digunakan pada cara steganografi komputer karena banyak format berkas digital yang dapat dijadikan media untuk menyembunyikan pesan. Format yang biasa digunakan di antaranya:
- Format image : bitmap (bmp), gif, pcx, jpeg, dll.
- Format audio : wav, voc, mp3, dll.
- Format lain : teks file, html, pdf, dll.
Kelebihan steganografi jika dibandingkan dengan kriptografi adalah pesan-pesannya tidak menarik perhatian orang lain. Pesan-pesan berkode dalam kriptografi yang tidak disembunyikan, walaupun tidak dapat dipecahkan, akan menimbulkan kecurigaan. Seringkali, steganografi dan kriptografi digunakan secara bersamaan untuk menjamin keamanan pesan rahasianya.
Langkah – Langkah Pembuatan Program MatLab
Steganografi
1. Pertama buat
rancangan GUI terlebih dahulu dengan cara klik File pada Menu bar-New-GUI-Blank
GUI-Ok.
2.
Selanjutnya
buatlah sebuah rancangan GUI, jika sudah selesai simpan file dengan ekstensi
(.fig). berikut ini merupakan tampilan dari rancangan GUI :
3. Untuk merubah backgraound nama pada push button
dengan menggunakan :
4.
Kemudian pada push button select cover image, klik kanan-View
Callback-Callback.
5.
Maka akan muncul tampilan editor untuk memasukkan script
pendeteksian tepi untuk program Matlab yang kami buat.
Perintah untuk
memanggil “'Select secret Image”
lsb=1;
[handles.cfilename,handles.cpathname] = uigetfile( {'*.jpg';'*.png';'*.bmp';'*.*'}, ...
'Select cover image');
axes(handles.axes1);
I=imread([handles.cpathname
handles.cfilename]);
imageinfo_cover=imfinfo([handles.cpathname
handles.cfilename]);
val_red=I(:,:,1);
perintah untuk memanggil “select
cover image”
lsb=1;
[handles.cfilename,handles.cpathname] = uigetfile( {'*.jpg';'*.png';'*.bmp';'*.*'}, ...
'Select cover image');
axes(handles.axes1);
I=imread([handles.cpathname
handles.cfilename]);
imageinfo_cover=imfinfo([handles.cpathname
handles.cfilename]);
val_red=I(:,:,1);
if handles.rad2==1
emb=zeros(3,7);
emb(1,:)=bitget(val_red(1,50:56),lsb);
emb(2,:)=bitget(val_red(1,57:63),lsb);
emb(3,:)=bitget(val_red(1,64:70),lsb);
emb_double=bi2de(emb);
emb=char(emb_double);
emb=emb';
if ~strcmp(emb,'yes')
axes(handles.axes1);cla
errordlg(['No hidden
image in ' handles.cfilename],'Select another Image');
else
image(I),axis off
set(handles.pushbutton3,'Enable','on');
end
else
image(I),axis off
image_height=imageinfo_cover.Height;
image_width=imageinfo_cover.Width;
handles.equ=((image_height-1)*(image_width-mod(image_width,8)))/8;
set(handles.pushbutton2,'Enable','on');
end
guidata(hObject,
handles);
Perintah untuk memanggil “'Select
secret Image”
if handles.rad2==1
else
[handles.sfilename
handles.spathname]=uigetfile({'*.jpg';'*.png'},'Select secret Image');
imageinfo_cover=imfinfo([handles.spathname
handles.sfilename]);
image_height=imageinfo_cover.Height;
image_width=imageinfo_cover.Width;
equ=image_width*image_height;
if equ <=handles.equ
I=imread([handles.spathname
handles.sfilename]);
set(handles.pushbutton3,'Enable','on');
axes(handles.axes2);
image(I);axis off
else
errordlg('Select another Image','Image too
big');
end
guidata(hObject, handles);
end
untuk menggunakan push button3 “hide”
if handles.rad1==1
lsb=1;
I=imread([handles.cpathname
handles.cfilename]);
imageinfo_cover=imfinfo([handles.cpathname
handles.cfilename]);
image_height=imageinfo_cover.Height;
image_width=imageinfo_cover.Width;
val_red=I(:,:,1);
%get
the red color matrix
I_sec=imread([handles.spathname
handles.sfilename]);
imageinfo_sec=imfinfo([handles.spathname handles.sfilename]); %get
information of secret image
i_sec_height=imageinfo_sec.Height; % secret image height
i_sec_width=imageinfo_sec.Width; % secret image width
val_red=double(val_red);
%hide the
secret image height
i_sec_height_bin=de2bi(i_sec_height,16);
val_red(1,1:16)=bitset(val_red(1,1:16),1,i_sec_height_bin);
%hide the
secret image width
i_sec_width_bin=de2bi(i_sec_width,16);
val_red(1,17:32)=bitset(val_red(1,17:32),1,i_sec_width_bin);
%hide an
identity, that this image has a secret image.
emb=('yes');
emb_bin=de2bi(double(emb));
val_red(1,50:56)=bitset(val_red(1,50:56),lsb,emb_bin(1,1:7));
val_red(1,57:63)=bitset(val_red(1,57:63),lsb,emb_bin(2,1:7));
val_red(1,64:70)=bitset(val_red(1,64:70),lsb,emb_bin(3,1:7));
I(:,:,1)=val_red;
i_sec_length=i_sec_height*i_sec_width;
I_sec_bin=zeros(i_sec_length*3,8);
I_sec_bin=de2bi(double(I_sec)); %convert the secret image to
binary
Ipix_counter=1; %set a
counter for the pixels
len=mod(image_width,8);
len=image_width-len;
for
count_hi=2:image_height
count_wi=1;
for count_wi=1:8:len-8
val_red(count_hi,count_wi:count_wi+7)=...
bitset(val_red(count_hi,count_wi:count_wi+7),1,I_sec_bin(Ipix_counter,:));
Ipix_counter=Ipix_counter+1;
if
Ipix_counter>i_sec_length*3
break;
end
end
if Ipix_counter>i_sec_length*3
break;
end
end
I(:,:,1)=val_red;
[filename,
pathname] = uiputfile('.png', 'Save Image as');
imwrite(I,[pathname
filename ],'png');
set(handles.pushbutton3,'Enable','off');
set(handles.pushbutton2,'Enable','off');
axes(handles.axes1);cla
axes(handles.axes2);cla
msgbox(['The secret
image ' handles.sfilename ' is in ' filename]);
else
%case 2:Dercyption(Reocver the
secret image from cover image)
lsb=1;
I=imread([handles.cpathname
handles.cfilename]);
imageinfo_cover=imfinfo([handles.cpathname handles.cfilename]);%cover
image information
image_height=imageinfo_cover.Height; %cover image height
image_width=imageinfo_cover.Width; %cover image width
val_red=I(:,:,1); %get the
red color matrix
%extract the secret image height and width from 1st 32pixel
of cover image
i_sec_height=bi2de(bitget(double(val_red(1,1:16)),1));
i_sec_width=bi2de(bitget(double(val_red(1,17:32)),1));
i_sec_length=i_sec_height*i_sec_width;
I_sec_bi=zeros(i_sec_length*3,8);%initialize
a zero matrix
Ipix_counter=1; %counter
for pixels
len=mod(image_width,8);
len=image_width-len;
for
count_hi=2:image_height
count_wi=1;
for count_wi=1:8:len-8
I_sec_bi(Ipix_counter,1:8)=...
bitget(val_red(count_hi,count_wi:count_wi+7),1);
Ipix_counter=Ipix_counter+1;
if Ipix_counter>i_sec_length*3
break;
end
end
if Ipix_counter>i_sec_length*3
break;
end
end
image1=reshape(bi2de(I_sec_bi),i_sec_height,i_sec_width,3);
image1=uint8(image1);
rn=num2str(rand(1,1));
imwrite(image1,[num2str(rn(3:end))
'.png'],'png');
axes(handles.axes2);
image(image1);axis
off
msgbox(['The image ' rn(3:end) '.png is
extracted from ' handles.cfilename ' ,it is in your current directory']);
end
switch get(hObject,'Tag') % Get Tag of selected object
case 'radiobutton1'
handles.rad1=1;
handles.rad2=0;
guidata(hObject, handles);
% code piece when radiobutton1 is
selected goes here
axes(handles.axes1);cla
Perintah
dibawah ini menggunakan radio button
axes(handles.axes2);cla
set(handles.pushbutton3,'String','Hide');
set(handles.pushbutton3,'Enable','on');
set(handles.pushbutton2,'Enable','off');
set(handles.pushbutton1,'Enable','on');
case 'radiobutton2'
% code piece when radiobutton2 is
selected goes here
% ...
handles.rad2=1;
handles.rad1=0;
guidata(hObject, handles);
axes(handles.axes1);cla
axes(handles.axes2);cla
set(handles.pushbutton3,'String','Recover');
set(handles.pushbutton3,'Enable','off');
set(handles.pushbutton2,'Enable','off');
set(handles.pushbutton1,'Enable','on');
end
a.
Pada tampilan pertama memilih Hide Imege terlebih dahulu. Lalu
klik select cover imege untuk meneluarkan image seperti gambar dibawah ini :
b.
Pada tampilan pertama memilih Hide Imege terlebih dahulu. Lalu klik
"select secret imege “ untuk meneluarkan image seperti gambar dibawah ini :
Maka akan muncul gambar seperti tampilan dibawah ini:
c.
Selanjutnya
menyembunyikan kedua foto yang sudah ada dengan meng-klik “hide” maka foto akan
tersembunyi dengan format .PNG , tetapi yang tersimpan hanya yang ada di select
secret image seperti tampilan dibawah ini:
d.
Selanjutnya mengeluarkan foto yang sudah di hiden dengan
meng-klik Recover Imege terlebih dahulu. Lalu klik select cover imege à Open
dengan type .PNG untuk meneluarkan image seperti gambar dibawah ini :
Maka akan muncul gambar seperti tampilan dibawah ini:
e.
Jika gambar pertama muncul. Kemudian ingin memunculkan gambar
kedua dengan meng-klik Recover maka hasilnya akan tampilan seperti dibawah ini: