Kamis, 25 November 2010

Pengolahan Citra Steganografi menggunakan MatLab 7.1

disusun oleh: Eky Widiya Hastuti (50407313), Nurlena ( )

Definisi Dasar
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
6.      Berikut ini adalah tampilan program setelah di RUN
a.            Pada tampilan pertama memilih Hide Imege terlebih dahulu. Lalu klik select cover imege untuk meneluarkan image seperti gambar dibawah ini :
 Maka akan mucul gambar seperti tampilan 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:
Add caption

22 komentar:

  1. kasih contoh program sederhana matlab untuk pemula

    BalasHapus
  2. ko ga jalan y matlabnya,eror..
    bs dikirim gx mb filenya via email
    agung.triayudi@gmail.com
    mksh y mb

    BalasHapus
  3. salam kenal
    teh eky yang baik, aku minta scripnya dong, aku ga bisa tuh scripnya, tolong email yah ke zaymtsn@yahoo.com
    nuhun terima kasih. ditunggu

    BalasHapus
  4. salam kenal teteh..kok gak bisa ya dtmpat saya.. mohon bimbingannya.. kalo boleh minta skripnya teh.. email ke jenterpro@gmail.com makasih sebelumnya.. :-D

    BalasHapus
  5. Teteh, sama ky yg komen sblm2nya, mohon bimbingannya nih...
    kalau boleh mau skalian minta juga dikirimin ke edisuryana09@gmail.com
    makasih teteh.. :-D

    BalasHapus
  6. mbak tolong dong kirimkan scriptnya ke email saya. dinnayukarunniawati@gmail.com
    tolong ya mbak sedang butuh banget nih

    BalasHapus
  7. Mbak, kok eror ya scriptnya, bisa dikirim ke email saya aribandung@yahoo.com tks Mbak

    BalasHapus
  8. minta scriptx dong. error neh :(
    mohon bntuuanx..

    BalasHapus
  9. oya ne alamt emailx : zhary_bluezpiinn@yahoo.com

    BalasHapus
  10. programnya kok error, bisa minta tolong scriptnya mbak, ke: thomas.hardy@bmkg.go.id, makasih

    BalasHapus
  11. eror tuh :v pencerahan dong

    arifnugroho666@gmail.com

    BalasHapus
  12. ko error ia scriptnya, tolong kirim ke email ajihadycandra@gmail.com dong

    BalasHapus
  13. ka ko ga bs ya :( bs mnt script yg tnggl copy paste ga :D
    ke email sy ya she.al4gna@gmail.com
    makasih ya :)
    ditunggu lho

    BalasHapus
  14. kok ga bisa ya.. tolong kirim kodingnya ke okkyfariz.03@gmail.com please.. makasih

    BalasHapus
  15. gagal terus deh saya, boleh minta source codenya gak ? tolong send kesini yaa mr.kirwanto@gmail.com. Terimakasih banyak :)

    BalasHapus
  16. Balasan
    1. mas saya boleh minta scriptnya? hehe

      viki.trinanda27@gmail.com

      Hapus
  17. Asslamualaikum mbak? boleh saya minta scriptnya? hehe

    BalasHapus
  18. Asslamualaikum mbak? boleh saya minta scriptnya? hehe
    viki.trinanda27@gmail.com

    BalasHapus
  19. assalamulaikum...
    mba aku boleh minta file masternya gak ya buat bljar ?

    BalasHapus
  20. mba kok error di function.nya yah.. itu kenapa??
    kalo berkenan boleh kirimkan scriptnya ke rokhanahpujilestari1@gmail.com . terimakasih sebelumnya..

    BalasHapus