pemanfaatan filterisasi untuk meningkatkan · kecil hanya memiliki daya tampung yang sedikit. ......
TRANSCRIPT
i
PEMANFAATAN FILTERISASI UNTUK MENINGKATKAN
DAYA TAMPUNG PESAN PADA STEGANOGRAFI
PIXEL VALUE DIFFERENCES (PVD)
MUHAMAD AZHARI
SEKOLAH PASCA SARJANA
INSTITUT PERTANIAN BOGOR
BOGOR
2012
iii
PERNYATAAN MENGENAI TESIS DAN
SUMBER INFORMASI
Saya menyatakan bahwa tesis berjudul Pemanfaatan Filterisasi untuk
Meningkatkan Daya Tampung Pesan pada Steganografi Pixel Value Differences
(PVD) merupakan karya saya. Tesis dibuat dengan arahan dari komisi
pembimbing dan belum diajukan dalam bentuk apa pun kepada perguruan tinggi
mana pun. Sumber informasi yang berasal atau dikutip dari karya yang diterbitkan
maupun tidak diterbitkan dari penulis lain telah disebutkan dalam teks dan
dicantumkan dalam Daftar Pustaka di bagian akhir tesis ini.
Bogor, Agustus 2012
Muhamad Azhari
NRP G651090021
v
ABSTRACT
MUHAMAD AZHARI. Utilization filtering to Increase Capacity Message on
PVD (Pixel Value Differences) Steganography. Under direction of SUGI
GURITMAN, and AHMAD RIDHA.
On technique Pixel Value Differences (PVD) steganography before the secret
message is inserted, the cover image of the first divided into blocks that do not
overlap each other (non-overlapping pixel blocks). The excess value of the pixel is
used to determine the amount of message bits that can be inserted. If the difference
is large, then the message can be inserted in large numbers and vice versa. Image
processing operations may affect the difference in value of adjacent pixels in an
image. Therefore, by applying the filter in the PVD steganography is expected to
increase the capacity of the message which is owned by a cover. Filtering done to
the cover before the message is inserted. Type of filtration used is blur, emboss,
and sharp. Research shows sharp have greatest increase their capacity without
degrading performance value of Peak Signal to Noise Ratio (PSNR).
Steganography application which developed is used in the process of inserting
message, extracting messages, measuring the capacity of the message and PSNR
value.
Keyword: image processing , pixel value difference, steganografy
vii
RINGKASAN
MUHAMAD AZHARI. Pemanfaatan Filterisasi untuk Meningkatkan Daya
Tampung Pesan pada Steganografi Pixel Value Differences (PVD). Dibimbing
oleh SUGI GURITMAN dan AHMAD RIDHA.
Steganografi merupakan salah satu teknik yang digunakan dalam
pengiriman pesan rahasia. Teknik tersebut bekerja dengan cara menyembunyikan
pesan rahasia dalam sebuah media yang disebut cover. Sebuah file cover yang
siap untuk dikirim dikenal dengan istilah stego image. Namun, penyembunyian
pesan dalam jumlah besar kerap kali menimbulkan distorsi. Sehingga stego image
terlihat menjadi tidak wajar. Teknik Pixel Value Differences (PVD) diterapkan
untuk mengatasi distorsi tersebut dengan cara membagi citra cover menjadi blok-
blok piksel yang tidak saling tumpang tindih (non-overlapping pixel blocks).
Setiap nilai kedua blok piksel cover dihitung selisihnya untuk digunakan dalam
menentukan besarnya bit pesan yang akan disisipkan. Selisih piksel yang besar
dapat menampung pesan dalam jumlah besar demikian sebaliknya selisih yang
kecil hanya memiliki daya tampung yang sedikit.
Upaya peningkatan daya tampung pesan terus dilakukan yaitu dengan
melakukan operasi pengolahan citra terhadap cover. Sebelum cover disisipi pesan
proses filterisasi diterapkan terhadap citra yang akan dijadikan cover. Jenis
filterisasi yang digunakan yaitu blur, emboss, dan sharp. Penelitian membuktikan
filter sharp merupakan jenis filter yang paling besar meningkatkan daya tampung
pesan tanpa menurunkan capaian nilai Peak Signak to Noise Ratio (PSNR).
Penelitian dilakukan di Laboratorium Net Centric Computing Departemen
Ilmu Komputer FMIPA-IPB. Cover yang digunakan pada penelitian berupa citra
24 bit berformat bmp. Adapun pesan yakni citra 24 bit berformat bmp dan plain
teks. Aplikasi steganografi yang dikembangkan pada penelitian ini digunakan
dalam proses penyisipan pesan, pengambilan pesan, pengukuran daya tampung
pesan dan nilai PSNR.
Kata kunci: pengolahan citra, pixel value differences, steganografi
viii
© Hak Cipta milik IPB, tahun 2012
Hak Cipta dilindungi Undang-Undang
Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan
atau menyebutkan sumbernya. Pengutipan hanya untuk kepentingan pendidikan,
penelitian, penulisan karya ilmiah, penyusunan laporan, penulisan kritik, atau
tinjauan suatu masalah; dan pengutipan tersebut tidak merugikan kepentingan
yang wajar IPB.
Dilarang mengumumkan dan memperbanyak sebagian atau seluruh Karya tulis
dalam bentuk apa pun tanpa izin IPB
ix
PEMANFAATAN FILTERISASI UNTUK MENINGKATKAN
DAYA TAMPUNG PESAN PADA STEGANOGRAFI
PIXEL VALUE DIFFERENCES (PVD)
MUHAMAD AZHARI
Tesis
Sebagai salah satu syarat untuk memperoleh gelar
Magister Komputer pada
Program Studi Magister Ilmu Komputer
SEKOLAH PASCA SARJANA
INSTITUT PERTANIAN BOGOR
BOGOR
2012
xi
Judul Tesis : Pemanfaatan Filterisasi untuk Meningkatkan Daya Tampung
Pesan pada Steganografi Pixel Value Differences (PVD)
Nama : Muhamad Azhari
NRP : G651090021
Disetujui,
Komisi Pembimbing
Dr. Sugi Guritman Ahmad Ridha, S.Kom, MS
Ketua Anggota
Diketahui,
Ketua Program Studi Dekan Sekolah Pascasarjana
Ilmu Komputer
Dr. Yani Nurhadryani, S.Si, MT Dr. Ir. Dahrul Syah, M.Sc, Agr
Tanggal Ujian: 15 Agustus 2012 Tanggal Lulus:
xiii
PRAKATA
Segala puji adalah kepunyaan Allahu azza wa jalla. Shalawat serta salam
semoga selalu tercurah kepada Rosulullah Muhammad shalallahu ‘alayhi
wassalam, sahabatnya, dan pengikutnya yang setia di atas sunnah beliau hingga
akhir zaman. Amin.
Topik yang diangkat pada penelitian ini yakni “Pemanfaatan Filterisasi
untuk Meningkatkan Daya Tampung Pesan pada Steganografi Pixel Value
Differences (PVD)”. Seiring rampungnya pengerjaan tesis ini penulis
mengucapkan terimakasih kepada.
1 Bapak Dr . Sugi Guritman sebagai ketua komisi pembimbing dan Bapak
Ahmad Ridha S.Kom, MS sebagai anggota komisi pembimbing yang telah
banyak memberikan arahan dalam penelitian dan penulisan tesis.
2 Bapak Endang Purnama Giri S.Kom, M.Kom selaku penguji dan Bapak Toto
Haryanto S.Kom, M.Si selaku moderator sidang akhir yang telah memberikan
masukan untuk kesempurnaan tesis.
3 Segenap teman-teman Pascasarjana Ilkom IPB khususnya Angkatan XI.
4 Istri dan buah hati tercinta yang selalu sabar menemani pada hari-hari di kala
mengerjakan tesis.
5 Ayah, ibu, dan adik-adik yang memberikan fikiran dan sumbangsihnya dalam
penyelesaian tesis ini.
Semoga karya ilmiah yang jauh dari sempurna ini bermanfaat bagi penulis
dan juga bagi rekan-rekan yang ingin mempelajari topik yang penulis bahas.
Bogor, Agustus 2012
Muhamad Azhari
xiv
RIWAYAT HIDUP
Penulis (Muhamad Azhari) dilahirkan di Jakarta pada 17 Juli 1975 sebagai
anak sulung dari pasangan Ir. Bakri Lakatjong, MKom, MT dan Sri Gunarti
Harahap. Setelah lulus dari SMAN 34 Jakarta penulis melanjutkan pendidikan
tinggi ke universitas Gunadarma Depok pada program studi Teknik Komputer
lulus pada tahun 1999 dengan gelar Sarjana Komputer (S.Kom.).
Penulis adalah staf dosen pada program studi Ilmu Komputer Universitas
Mulawarman (Unmul) sejak tahun 2006 sampai sekarang. Pada tahun 2009,
penulis diterima sebagai mahasiswa Sekolah Pascasarjana program studi Ilmu
Komputer IPB. Penelitian berjudul “Pemanfaatan Filterisasi untuk Meningkatkan
Daya Tampung Pesan pada Steganografi Pixel Value Differences (PVD)”
merupakan tesis yang menjadi tugas akhir untuk memperoleh gelar Magister Ilmu
Komputer.
xv
DAFTAR ISI
Halaman
DAFTAR ISI ..................................................................................................... xv
DAFTAR TABEL ........................................................................................... xvii
DAFTAR GAMBAR......................................................................................xviii
DAFTAR LAMPIRAN..................................................................................... xix
1 PENDAHULUAN ...................................................................................... 1
1.1 Latar Belakang...................................................................................... 1
1.2 Perumusan Masalah .............................................................................. 3
1.3 Tujuan Penelitian .................................................................................. 3
1.4 Ruang Lingkup Penelitian..................................................................... 3
2 TINJAUAN PUSTAKA.............................................................................. 4
2.1 Steganografi.......................................................................................... 4
2.2 Least Significant Bit (LSB) ................................................................... 5
2.3 Algoritma LSB ..................................................................................... 6
2.4 Citra 7
2.5 Pengolahan Citra................................................................................... 8
2.6 Filterisasi ............................................................................................ 10
2.7 Dokumen Bitmap ................................................................................ 11
2.8 Algoritma Pixel Value Difference (PVD) ............................................ 12
2.9 Peak Signal to Noise Ratio (PSNR)..................................................... 15
2.10 Pengujian Perangkat Lunak............................................................... 16
2.11 Antarmuka Grafis (GUI) ................................................................... 16
3 METODE ................................................................................................. 19
3.1 Waktu dan Tempat.............................................................................. 19
3.2 Bahan dan Data................................................................................... 19
3.3 Perangkat Lunak dan Keras................................................................. 19
3.4 Metodelogi Penelitian ......................................................................... 20
3.4.1 Penyisipan Pesan ..................................................................... 20
3.4.2 Filterisasi ................................................................................. 21
3.4.3 Ekstraksi Pesan........................................................................ 22
4 HASIL DAN PEMBAHASAN ................................................................. 23
4.1 Pembuatan Aplikasi ............................................................................ 23
4.1.1 Alat dan Data........................................................................... 23
4.1.2 Algoritme dan Perancangan Aplikasi ....................................... 24
4.1.3 Perancangan Antarmuka Grafis (GUI) ..................................... 27
4.2 Implementasi ...................................................................................... 30
4.3 Pengujian Aplikasi.............................................................................. 32
xvi
4.4 Hasil dan Percobaan............................................................................ 35
4.4.1 Filterisasi ................................................................................. 37
4.4.2 Hasil Percobaan ....................................................................... 37
4.4.2.1 PSNR ........................................................................... 40
4.4.2.2 Daya Tampung Pesan................................................... 41
5 SIMPULAN DAN SARAN ...................................................................... 43
5.1 Simpulan ............................................................................................ 43
5.2 Saran ................................................................................................ 43
DAFTAR PUSTAKA ........................................................................................ 44
LAMPIRAN ...................................................................................................... 46
xvii
DAFTAR TABEL
Halaman
1 Daya tampung pesan pada setiap daerah rentang ............................................. 25
2 Nilai piksel file cover48pix.bmp ..................................................................... 33
3 Nilai piksel file 4pixel.bmp ............................................................................. 33
4 Nilai piksel file layer red file stegoku1.bmp .................................................... 33
5 Nilai piksel file layer green file stegoku1.bmp ................................................ 34
6 Nilai piksel file layer blue file stegoku1.bmp................................................... 34
7 Output file testpxpy.m..................................................................................... 34
8 Nilai piksel file stegoku1.bmp......................................................................... 35
xviii
DAFTAR GAMBAR
Halaman
1 Proses penyisipan pesan .................................................................................. 4
2 Penyisipan pesan LSB..................................................................................... 5
3 Model warna RGB dalam koordinat Cartesian................................................. 7
4 Grid piksel citra .............................................................................................. 8
5 Piksel 8 bit RGB ............................................................................................. 9
6 Matriks piksel. ................................................................................................ 9
7 Filterisasi citra dengan matriks 3x3. .............................................................. 11
8 Struktur dokumen bitmap .............................................................................. 11
9 Sistem scanning steganografi PVD................................................................ 13
10 Pengembangan GUI pada proses RPL ........................................................... 17
11 Lebar jangkauan Rj dengan Wj ∈{8, 8, 16, 32, 64, 128} . ............................. 20
12 Tahapan penyisipan pesan steganografi PVD ................................................ 21
13 Tahapan ekstraksi pesan steganografi PVD ................................................... 22
14 Aliran data proses penyisipan dan ekstraksi pesan......................................... 24
15 Flowchart penyisipan pesan steganografi PVD ............................................. 25
16 Flowchart ekstraksi pesan steganografi PVD ................................................ 27
17 Layout halaman depan................................................................................... 29
18 Layout halaman penyisipan pesan teks dan image ......................................... 30
19 Layout halaman pengambilan pesan .............................................................. 30
20 Halaman depan aplikasi steganografi PVD.................................................... 31
21 Halaman ekstraksi pesan image aplikasi steganografi PVD ........................... 32
22 Halaman ekstraksi pesan teks aplikasi steganografi PVD ............................. 33
23 Citra bakal cover ........................................................................................... 37
24 Citra pesan.................................................................................................... 37
25 Visualisasi filterisasi citra airplane.bmp ........................................................ 39
26 Visualisasi filterisasi citra baboon.bmp ......................................................... 39
27 Visualisasi filterisasi citra fractal.bmp........................................................... 40
28 Visualisasi filterisasi citra pepper.bmp .......................................................... 40
30 Capaian PSNR pada cover airplane.bmp ....................................................... 41
31 Daya tampung pesan pada tiap filterisasi cover 256x256 piksel ..................... 42
32 Daya tampung pesan pada tiap filterisasi cover 512x512 piksel ..................... 43
xix
DAFTAR LAMPIRAN
Halaman
1 Source code .................................................................................................... 47
2 Hasil percobaan cover Airplane.bmp (256x256 piksel).................................... 70
3 Hasil percobaan cover Baboon.bmp (256x256 piksel) ..................................... 71
4 Hasil percobaan cover Fractal.bmp (256x256 piksel) ...................................... 72
5 Hasil percobaan cover Pepper.bmp (256x256 piksel) ...................................... 73
6 Hasil percobaan cover Airplane2.bmp (512x512 piksel).................................. 74
7 Hasil percobaan cover Baboon2.bmp (512x512 piksel) ................................... 75
8 Hasil percobaan cover Fractal2.bmp (512x512 piksel) .................................... 76
9 Hasil percobaan cover Pepper2.bmp (512x512 piksel) .................................... 77
1
BAB I
PENDAHULUAN
1.1 Latar Belakang
Berbagai tindak kejahatan informasi semakin sering terjadi. Kejahatan itu
dapat terjadi dalam hitungan detik. Kenyataan tersebut menunjukkan keamanan
informasi perlu terus diupayakan. Teknik pengamanan tidak dapat lagi semata-
mata hanya mengandalkan pada keamanan fisik namun perlu juga ditunjang
dengan teknik-teknik keamanan informasi yang bersifat non-fisik (Guritman
2003).
Tindak kejahatan informasi rawan terjadi dalam proses pengiriman pesan
maka diperlukan teknik untuk mengamankannya. Kriptografi dan steganografi
merupakan teknik keamanan yang umum digunakan dalam pengiriman sebuah
pesan. Kedua teknik tersebut mempunyai perbedaan. Pada teknik kriptografi
pesan diacak terlebih dahulu sebelum dikirim sehingga isi pesan tidak dipahami
oleh pihak-pihak yang tidak berhak membaca pesan tersebut.
Sementara itu pada steganografi sebuah media dibutuhkan untuk
menyembunyikan pesan rahasia, media itu disebut cover. Sebuah file cover yang
siap untuk dikirim dikenal dengan istilah stego image. Penyembunyian pesan
dalam cover tidak terlihat sehingga tidak menimbulkan kecurigaan bagi pihak-
pihak yang tidak berkepentingan (Johnson & Jajodia 1998). Namun, penyisipan
pesan dalam jumlah yang besar kerap kali menimbulkan distorsi sehingga stego
image yang dihasilkan terlihat tidak wajar (Chang 2004). Oleh karena itu,
penerapan steganografi membutuhkan metode yang tepat agar mampu
menghasilkan stego image yang memiliki tampilan secara visual/statistical yang
wajar, tidak mencurigakan, dan memiliki daya tampung pesan yang mencukupi
(Zang & Wang 2005).
Least Significant Bit (LSB) merupakan metode yang umum digunakan
dalam steganografi (Bender 1996). Metode ini menyisipkan k bit pesan dalam k
bit LSB cover (Chang 2004). Lindayati (2007) menemukan bahwa pesan mampu
disisipkan pada cover sampai sebesar level 4 LSB. Meskipun demikian,
implementasi teknik LSB memiliki kelemahan. Pada level 3 saja sudah terlihat
distorsi pada stego image yang dihasilkan (Amirtharajan 2010). Sebelumnya Wu
2
(2003) mengemukakan bahwa distorsi tersebut besarnya semakin meningkat
seiring penambahan level LSB.
Upaya perbaikan dilakukan oleh Wu (2003) melalui teknik Pixel Value
Differences (PVD). Sebelum pesan disisipkan ke dalam LSB cover, citra cover
dibagi terlebih dahulu menjadi blok-blok yang tidak saling tumpang tindih (non-
overlapping pixel blocks). Setiap blok berisi dua piksel yang saling berdekatan.
Kemudian, selisih nilai kedua piksel tersebut digunakan untuk menentukan
besarnya bit pesan yang dapat disisipkan. Selisih piksel yang banyak dapat
menampung pesan yang besar demikian sebaliknya selisih yang kecil hanya
memiliki daya tampung yang sedikit.
Umumnya, dalam sebuah image piksel-piksel menyebar secara
berkelompok sehingga pada daerah halus (smooth area) didapati nilai selisih
antara piksel-piksel yang berdekatan kecil. Namun, sebaliknya pada daerah
kontras (contrast area) nilai selisih antara piksel-piksel yang berdekatan besar.
Oleh karena itu, image dengan daerah halus yang luas hanya dapat disisipi sedikit
pesan rahasia, sebaliknya image dengan daerah kontras yang luas dapat disisipi
banyak pesan (Rojali 2009; Wang et al. 2006).
Sementara itu, penelitian yang dilakukan oleh Kekre et al. (2010), Gopalan
dan Shi (2010) menyatakan bahwa pemilihan jenis cover sangat menentukan
besarnya kapasitas pesan yang dapat disisipkan. Format file digital yang dapat
digunakan sebagai cover dalam steganografi dapat berbentuk image, audio, video,
dan multimedia (Sridevi et al. 2009). Penggunaan cover berupa image dengan
berbagai jenisnya telah diusahakan untuk meningkatkan kapasitas pesan.
Operasi pengolahan citra terhadap cover belum banyak dilakukan. Salah
satu operasi pengolahan citra yang dapat memberikan pengaruh terhadap nilai-
nilai piksel dalam sebuah image yakni filterisasi (Pramukanto 2001). Pengaruh
tersebut diharapkan dapat meningkatkan daya tampung pesan pada sebuah cover.
Berdasarkan hal tersebut perlu dilakukan penelitian lebih lanjut terhadap
media cover yang digunakan untuk steganografi PVD. Oleh karena itu, untuk
mengetahui pemanfaatan filterisasi dalam meningkatkan daya tampung pesan
pada cover steganografi PVD maka penelitian ini dilakukan.
3
1.2 Perumusan Masalah
Berdasarkan latar belakang tersebut muncul beberapa masalah yang
dirumuskan sebagai berikut:
1 Bagaimana mengimplementasikan teknik steganografi PVD dalam sebuah
aplikasi?
2 Bagaimana mengukur kapasitas daya tampung pesan yang dimiliki sebuah
cover?
3 Jenis filterisasi apakah yang dapat meningkatkan daya tampung pesan?
1.3 Tujuan Penelitian
Tujuan utama dari penelitian ini adalah sebagai berikut:
1 Menghasilkan aplikasi steganografi PVD yang dapat diimplementasikan untuk
pesan berupa image dan teks.
2 Mengetahui kapasitas daya tampung pesan yang dimiliki oleh sebuah image.
3 Menemukan jenis filterisasi yang dapat meningkatkan daya tampung pesan
pada steganografi PVD.
1.4 Ruang Lingkup Penelitian
Ruang lingkup penelitian dibatasi pada:
1 Penggunaan cover berukuran 24 bit RGB dengan format BMP.
2 Pesan rahasia yang digunakan merupakan plain teks dan image BMP 24 RGB.
3 Filterisasi yang digunakan pada penelitian ini adalah jenis sharpen, blur, dan
emboss.
4
BAB II
TINJAUAN PUSTAKA
2.1 Steganografi
Ada banyak metode komunikasi untuk menyembunyikan sebuah pesan
rahasia. Metode-metode tersebut termasuk diantaranya teknik menyembunyikan
pesan menggunakan tinta yang tidak tampak, microdots, teknik pengaturan kata,
tanda tangan digital, jalur tersembunyi, dan komunikasi spektrum lebar (Munir
2006). Selain itu, ada juga kriptographi dan steganographi yang selama ini
dikenal.
Kata steganografi (steganography) berasal dari bahasa Yunani steganos
yang artinya tersembunyi atau terselubung dan graphein berarti menulis sehingga
kurang lebih artinya menulis (tulisan) terselubung. Pengertian lain dari
steganografi, yaitu sebuah teknik penyembunyian pesan. Sebuah pesan yang
disisipi (diekstrak) ke suatu media sebagai pembawa pesan (Long Truong 2002).
Pada Gambar 1 sebuah fungsi penyisipan digunakan untuk
menyembunyikan pesan atau message dalam sebuah file cover. Proses penyisipan
pesan ke dalam cover menghasilkan sebuah file baru yang disebut stego image.
Demikian pula pada proses pengambilan pesan dari stego image digunakan
sebuah fungsi ekstraksi. Penyembunyian pesan tidak menunjukkan ciri-ciri
perubahan yang nyata atau terlihat dalam kualitas dan struktur apabila
dibandingkan dengan file semula. Steganografi bertujuan untuk merahasiakan
atau menyembunyikan keberadaan sebuah pesan atau sebuah informasi.
Penambahan stego key dapat digunakan untuk memastikan hanya orang yang
mengetahui kunci rahasia saja yang bisa membaca pesan tersembunyi tersebut
sehingga penyembunyian pesan semakin sempurna (Zollner 1998).
Gambar 1 Proses peyisipan pesan (Zollner 1998).
5
2.2 Least Significant Bit (LSB)
Sebuah image terbentuk dari banyak piksel. Sederet bit disusun untuk
membentuk sebuah piksel yang ada. Deretan bit yang membentuk piksel tersebut
dipisahkan menjadi dua bagian, yaitu Least Significant Bit (LSB) dan Most
Significant Bit (MSB). Jika setiap piksel dibentuk dari 8 bit maka LSB yaitu 4 bit
pada posisi belakang yang bernilai kecil dan MSB yakni 4 bit sisanya.
Pada steganografi, metode LSB merupakan salah satu metode yang umum
digunakan pada saat ini. Metode LSB bekerja dengan cara menyisipkan k bit
pesan rahasia ke dalam k bit LSB piksel cover (Bender 1996). Pada image bitmap
24 bit, setiap piksel (titik) terdiri atas susunan tiga warna merah, hijau, dan biru
(RGB) yang masing-masing disusun oleh bilangan 8 bit dari 0 sampai 255 atau
dengan format biner 00000000 sampai 11111111. Perubahan bit pada posisi-
posisi LSB tidak besar pengaruhnya terhadap kombinasi warna yang dihasilkan
oleh komponen warna pada gambar. Dengan demikian, perubahan warna yang
terjadi tidak terlihat jelas.
Gambar 2 merupakan ilustrasi dari perubahan bit-bit LSB pada satu piksel
warna. Kemudian, penyisipan informasi dilakukan pada bit-bit tersebut. Bit-bit
LSB pada 4 bit akhir dalam 1 byte (8 bit).
Gambar 2 Penyisipan pesan pada LSB.
Contoh data tiga piksel dari gambar berukuran 24-bit, yaitu:
00100111 11101001 11001000
00100111 11001000 11101001
11001000 00100111 11101001
Diketahui nilai biner dari karakter ‘A’ adalah 10000011. Oleh karena itu,
data setelah penanaman karakter ‘A’ adalah sebagai berikut:
00100111 11101000 11001000 → 100
00100110 11001000 11101000 → 000
6
11001000 00100111 11101001 → 11, perubahan hanya pada bit-bit
yang digarisbawahi (Johnson & Jajodia 1998).
2.3 Algoritme LSB
Metode LSB memiliki algoritme penyisipan pesan sebagai berikut (Rojali
2009):
1 Membagi komponen nilai dari warna piksel cover menjadi komponen nilai
Red, Green, dan Blue (RGB).
2 Mengubah komponen nilai RGB tersebut menjadi nilai biner.
3 Mengubah pesan menjadi nilai biner.
4 Menganti komponen LSB bit cover dengan bit pesan.
5 Setelah pesan rahasia disisipkan ke dalam cover kemudian bit cover yang
baru diubah kembali ke dalam nilai desimal.
6 Menggabungkan kembali nilai-nilai desimal RGB sehingga menjadi nilai
warna untuk stego image.
Pada proses penyisipan pesan ke dalam k-LSB cover digunakan persamaan
(1) berikut:
................................ (1)
Keterangan :
− Is=(x,y) adalah intensitas piksel (x,y) dari stego image
− Io=(x,y), adalah intensitas piksel (x,y) dari cover
− B(x,y) adalah nilai desimal dari suatu blok yang ditempelkan pada
piksel (x,y) dan mod(.) merupakan operasi modular.
Sebagai contoh, untuk penyisipan 4-LSB (yaitu k=4), dengan blok pertama
data rahasia berisi empat bit yaitu 1001, maka B(0,0)=10012=9,
I0(0,0)=100010102=138, sehingga menghasilkan intensitas piksel pada stego
image Is(0,0)=138–mod(138,24)+9 =138-10+9=137= 100010012.
Proses ekstraksi pesan menjalankan algoritme sebagai berikut:
7
1 Konversi nilai desimal stego image kedalam nilai biner dengan panjang 8
bit.
2 Ambil nilai biner stego image sebanyak k bit LSB yang digunakan untuk
menghasilkan pesan rahasia.
2.4 Citra
Sebuah citra merupakan bentuk representasi dua dimensi (2-D) dari
intensitas cahaya yang ditulis sebagai fungsi f(x,y). Citra digital dapat ditampilkan
dalam bentuk matriks dua dimensi (Gambar 6). Baris dan kolom matriks
merupakan posisi citra sedangkan elemennya menyatakan nilai warna pada posisi
tersebut. Elemen pada citra digital disebut piksel. Setiap piksel merupakan
perpaduan dari 3 komponen warna dasar yaitu R (Red), G (Green), dan B (Blue).
Pada model warna RGB setiap warna yang dihasilkan disusun berbasiskan
koordinat cartesius. Warna hitam berfungsi sebagai titik pusat koordinat (R=0,
G=0, B=0), dan warna putih berada pada titik terjauh (R=255, G=255, B=255)
sedangkan warna abu-abu berada pada suatu titik tempat ke tiga warna merah,
hijau dan biru memiliki nilai yang sama (contoh: R=50, G =50 , B=50) (Gonzalez
2002). Model warna RGB dapat ditampilkan pada Gambar 3.
Gambar 3 Model warna RGB dalam koordinat Cartesian.
(Sumber: www.siggraph.org/education/materials/HyperGraph/color/
colorgb.htm).
Green
(1,1,0) Yellow
Red
(1,0,1) Magenta
Blue
(0,0,0) Black
(1,1,1) White
(0,1,1) Cyan
8
2.5 Pengolahan Citra
Sebuah citra kaya informasi. Agar citra yang mengalami gangguan mudah
diinterpretasi (baik oleh manusia maupun mesin), maka dapat dilakukan
manipulasi terhadap citra tersebut menjadi citra lain yang kualitasnya lebih baik.
Seringkali sebuah citra yang dimiliki mengalami penurunan mutu (degradasi),
misalnya mengandung cacat atau derau (noise), warnanya terlalu kontras, kurang
tajam, kabur (blurring), dan sebagainya. Bidang studi yang menyangkut hal ini
adalah pengolahan citra (image processing). Pengolahan citra adalah pemrosesan
citra, khususnya dengan menggunakan komputer, menjadi citra yang kualitasnya
lebih baik.
Gambar 4 Grid piksel citra.
Semua citra digital yang ditampilkan di layar komputer merupakan
sederetan atau sekumpulan piksel (picture element). Citra tersebut dikatakan
sebagai citra digital karena bentuk representasinya berupa bilangan (numbers) dan
komputer mengenal dalam urutan ‘0’ dan ‘1’.
Citra digital bitmap (citra bitmap) secara teknis sering disebut sebagai
raster images. Citra digital jenis ini tersusun atas titik-titik yang disebut piksel
(pixel=picture element) (Gambar 4). Setiap piksel memiliki nilai (value atau
number) yang menunjukkan intensitas keabuan pada piksel tersebut. Setiap titik
piksel tersebut memiliki koordinat (x,y). Setiap piksel yang ada pada citra
disimpan dengan kedalaman warna 1, 4, 8, 16, 24, atau 32 bit per piksel sebagai
representasi nilai intensitas piksel. Umumnya piksel citra disimpan pada
kedalaman warna 8 bit. Hal ini berarti ada sebanyak 28
derajat keabuan yakni dari
0 sampai dengan 255.
9
Citra bitmap ada tiga macam yaitu citra biner, citra berwarna, dan citra
hitam-putih (grayscale). Citra biner hanya mempunyai dua nilai keabuan, 0 dan 1.
Oleh karena itu, 1 bit sudah cukup untuk merepresentasikan nilai piksel. Citra
berwarna citra yang lebih umum. Warna yang terlihat pada citra bitmap
merupakan kombinasi dari tiga warna dasar, yaitu merah, hijau, dan biru. Setiap
piksel tersusun atas tiga komponen warna yaitu R (red), G (green), B (blue).
Kombinasi dari ketiga warna tersebut menghasilkan warna yang khas untuk piksel
bersangkutan.
Pada Gambar 5 diilustrasikan sebuah citra dengan 256 warna, setiap piksel
panjangnya 8 bit, tetapi komponen warna RGB-nya disimpan dalam tabel RGB
yang disebut pallete. Setiap komponen panjangnya 8 bit. Jadi, ada 256 nilai
keabuan untuk warna merah, ada 256 nilai keabuan untuk warna hijau, dan ada
256 nilai keabuan untuk warna biru. Nilai setiap piksel tidak menyatakan derajat
keabuannya secara langsung tetapi nilai piksel menyatakan indeks pada tabel
RGB yang memuat nilai keabuan merah (R), nilai keabuan hijau (G), dan nilai
keabuan biru (B) untuk piksel yang bersangkutan.
Gambar 5 Piksel 8 bit RGB.
Citra digital merupakan suatu matriks tempat indeks baris dan kolomnya
menyatakan suatu titik pada citra tersebut dan elemen matriksnya yang disebut
sebagai elemen gambar piksel (pixel/ picture element/ pels) menyatakan tingkat
keabuan pada titik tersebut (Gambar 6). Manipulasi dapat dilakukan pada sebuah
citra berupa manipulasi pada tingkatan piksel (Gonzales, 2002).
Gambar 6 Matriks piksel.
10
2.6 Filterisasi
Seringkali sebuah citra digital memiliki kualitas yang tidak baik, terkadang
kelebihan cahaya (overexposed), agak kabur (blurry) atau tidak fokus. Bahkan
untuk tujuan tertentu terkadang diperlukan manipulasi citra untuk mendapatkan
tampilan efek-efek khusus, embossing, blurring dan sebagainya.
Beberapa program aplikasi desktop publisher dapat digunakan untuk tujuan
pengolahan/pengeditan citra (image processing/ editing) yakni Adobe Photoshop,
GIMP dan Aldus PhotoStyler. Aplikasi tersebut mempunyai fasilitas pengolahan
citra otomatis. Fasilitas pengolahan citra customize atau convolution yang
disediakan dalam operasi filterisasi. Filterisasi tersebut dapat dilakukan dengan
teknik yang sederhana dengan algoritme dan teknik-teknik transformasi citra yang
sederhana. Misalnya, dalam menampilkan efek sharping, blurring, embossing,
walaupun memerlukan proses transformasi citra yang kompleks. Namun
algoritme yang mengendalikannya sangat sederhana.
Filter merupakan operasi neighbourhood yaitu nilai dari piksel yang
diberikan pada citra keluaran ditentukan oleh suatu algoritme pada sekumpulan
piksel citra masukan. Algoritme dalam transformasi citra khususnya pada
filterisasi digital dilakukan dengan memodifikasi nilai digital piksel tampilan
warna citra berdasarkan pertimbangan nilai digital warna dari piksel yang
bersangkutan dan tetangga (neighbourhood) (Wijaya & Prijono 2007).
Umumnya dalam proses filterisasi digunakan operasi konvolusi matriks.
Matriks dua dimensi yang terdiri atas kolom dan baris digunakan sebagai Filter.
Filter tersebut bisa berukuran 3 X 3, 5 X 5 atau 7 X 7 yang mempunyai nilai
koefisien kernel tertentu tengantung kepada fungsinya. Koefisien sel kernel
merupakan bilangan integer antara -999 sampai +999. Operasi filter dilakukan
dengan mengubah nilai-nilai seluruh piksel suatu citra berdasarkan nilai piksel asli
dan piksel di sekitarnya (neighbour pixel). Perubahan nilai piksel ditentukan oleh
harga-harga yang digunakan pada kernel (template).
Operasi konvolusi dilakukan dengan cara mengalikan nilai piksel yang
menjadi target perubahan beserta ke delapan piksel tetangganya dengan harga
koefisien pada posisi sel kernel yang bersangkutan, lalu menjumlahkannya. Nilai
11
baru yang dihasilkan kemudian menggantikan nilai awal piksel citra (Pramukanto
2001). Hal tersebut dijelaskan pada Gambar 7 berikut.
Gambar 7 Filterisasi citra dengan matriks 3x3.
Pada filter dengan ukuran matriks tertentu, misalnya 3 X 3 (Gambar 7),
diisikan harga koefisien pada ke sembilan sel kernel berdasarkan tujuan filterisasi.
Pada contoh ini digunakan filter dengan harga koefisien: 0, 1, 0, 0, 0, 0, 0, 0, 0
dengan operasi konvolusi antara piksel citra dengan matriks filter yaitu (40x0)+
(42x1)+ (46x0)+ (46x0)+ (50x0)+ (55x0)+ (52x0)+ (56x0)+ (58x0) dihasilkan
piksel keluaran bernilai 42 = 42.
2.7 Dokumen Bitmap
Salah satu format gambar/citra adalah bitmap (bmp). Pada suatu dokumen
bitmap dapat tersimpan 1 bit warna (hitam/putih) sampai dengan 24 bit warna
(true color). Struktur format dokumen ini seperti terlihat pada Gambar 8.
Gambar 8 Struktur dokumen bitmap.
12
Format bitmap tersebut memiliki 4 bagian yaitu header, info header,
optional pallete, dan image data. Bagian header bitmap berisikan 14 byte data
yang berisikan informasi yang menyatakan identifikasi sebagai suatu dokumen
bitmap, besar atau ukuran data pada dokumen ini, beserta informasi awal
pembacaan dokumen bitmap. Bagian info header sepanjang 40 byte berisikan
informasi tinggi dan lebar citra, jumlah bit/piksel, resolusi, besarnya dokumen,
jenis kompresi (bila ada) serta definisi yang berhubungan dengan warna yang
dipakai. Bagian optional palette mencatat warna-warna yang dipaksakan/penting
untuk dipakai dalam bitmap yang kurang dari 24 bit (true color bitmap). Jadi
bagian ini dapat ada ataupun tidak. Pada true color bitmap tidak ada optional
palette. Bagian image data berisikan data yang dikonversi sebagai warna tampilan
gambar/citra pada layar monitor.
Dokumen bitmap mudah dibuat. Data dari tiap piksel dapat diambil dengan
mengacu pada sistem koordinat. Manipulasi tiap piksel dilakukan dengan mudah
sesuai dengan kapasitas warna yang dapat disimpan. Namun, dokumen bitmap
memiliki kekurangan yakni ukuran memori dokumen file bitmap lebih besar
daripada file bentuk lain. Selain itu, dokumen bitmap sulit untuk diubah skala
resolusinya. Perubahan pada skala resolusi terkadang akan mengakibatkan
perubahaan pada kepadatan warnanya (Rojali 2009).
2.8 Algoritme Piksel Value Differencing (PVD)
Penelitian awal algoritme PVD dilakukan oleh (Wu & Tsai, 2003). Proses
penyembunyian pesan dalam sebuah cover dilakukan dengan cara menghitung
selisih nilai antara dua piksel cover yang terdekat (non overlapping pixel block).
Selisih digunakan untuk menentukan jumlah data yang dapat disisipkan
berdasarkan jangkauan tabel yang dipilih. Jika selisihnya besar maka pesan
disisipkan dalam jumlah yang besar demikian sebaliknya. Sehingga pada teknik
PVD pesan dapat disembunyikan dalam jumlah yang besar. Walaupun terdapat
loophole (kelemahan) yang dapat diketahui oleh stegoanalisis namun
penyembunyian pesan rahasia menggunakan teknik PVD tidak mampu dilihat
oleh pandangan manusia ( Zang & Wang, 2004).
13
Penyisipan pesan ke dalam LSB cover didahului dengan membagi citra
cover menjadi blok-blok yang tidak saling tumpang tindih. Setiap blok tersebut
berisi dua piksel yang saling berdekatan yaitu P(i,x) dan P(i,y) kemudian selisih di
antara keduanya dihitung sebagai di dengan menggunakan persamaan (2) berikut.
di = |P(i,x)-P(i,y)|
……………………..(2)
Pencarian selisih antara dua piksel terdekat dilakukan menggunakan arah
seperti pada Gambar 9. Keberadaan tabel jangkauan dibutuhkan pada penerapan
teknik PVD ini karena jumlah pesan yang disisipkan besarnya menyesuaikan
dengan nilai jangkauan yang ada pada tabel tersebut. Tabel jangkauan dibuat
berdasarkan kemampuan daya tangkap yang ada pada manusia (Simple Human
Visual System) dalam membedakan tingkat kehalusan dan kekontrasan (Wu & Tsai
2003). Selisih piksel yang besar sehingga daerah menjadi kontras dapat
menampung pesan yang besar demikian sebaliknya selisih yang kecil yang
merupakan daerah halus maka hanya memiliki daya tampung yang sedikit.
Gambar 9 Sistem scanning steganografi PVD (Wu &Tsai 2003).
Selisih yang diperoleh digunakan untuk mencari batas bawah (lj) dan batas
atas (uj) berdasarkan tabel jangkauan yang dipilih (Gambar 11). Selisih nilai lj dan
uj kemudian ditambah 1 ditetapkan sebagai wj sehingga diperoleh nilai ti yakni
kapasitas daya tampung pesan pada dua piksel yang berdekatan (hiding capacity
of two consecutive pixels) dengan menggunakan persamaan (3).
ti = log(wj)
……………………..(3)
14
Nilai ti yang kemudian digunakan untuk mencari nilai selisih dua piksel
yang baru (d′i) dengan menjumlahkan nilai desimal ti dengan batas bawah tabel
jangkauan (t′i + lj). Langkah selanjutnya adalah menghitung nilai P(i,x) dan P(i,y)
yang telah disisipkan pesan (P′(i,x) dan P′(i,y)) menggunakan persamaan (4) (Wang
et al. 2006).
……………………..(4)
Proses penyisipan dan ekstraksi pesan pada algoritme steganografi PVD
adalah sebagai berikut.
Proses Penyisipan Pesan
1 Untuk setiap piksel yang berurutan ( P(i,x) dan P(i,y) ) pada cover image
hitung selisihnya sebagai di. Berdasarkan nilai di carilah nilai batas bawah
(lj) dan batas atas (uj) dari tabel jangkauan Rj.
2 Hitung nilai wj = uj-lj +1.
3 Hitung nilai ti=log(wj) dengan basis logaritma 2.
4 Nilai ti adalah menentukan jumlah bit pesan yang dapat disisipkan.
5 Ambil pesan sepanjang ti , t′i adalah nilai desimal dari ti.
6 Hitung nilai d′i = t′i + lj.
7 Hitung nilai m yang merupakan nilai mutlak dari selisih d′i dan di .
8 Carilah nilai P′(i,x) dan P′(i,y) dengan menggunakan persamaan (4).
Proses Ekstraksi Pesan
Pada proses ekstraksi pesan, pencarian selisih piksel terdekat sesuai dengan
Gambar 6. Selengkapnya proses ekstraksi pada algoritme PVD sebagai berikut.
1 Untuk setiap titik yang berurutan (P′(i,x) dan P′(i,y) ) pada stego image
hitung perbedaan antara nilai P′(i,x) dan P′(i,y) sebagai d′i yang dimutlakkan.
15
Berdasarkan nilai d′i carilah nilai batas bawah (lj) dan batas atas (uj) dari
tabel jangkauan Rj.
2 Hitung nilai wj = uj-lj +1
3 Hitung nilai ti=log(wj) dengan basis logaritma 2.
4 Nilai ti adalah menentukan jumlah bit pesan yang telah disisipkan.
5 Hitung t′i = d′i- lj , konversi nilai t′i kedalam biner dengan panjang ti
6 Hasil konversi nilai t′i kedalam biner dengan panjang ti merupakan pesan
yang disembunyikan.
2.9 Peak Signal to Noise Ratio (PSNR)
PSNR adalah sebuah nilai untuk menyatakan tingkat noise milik sebuah
image yang telah disisipi pesan. PSNR diukur dalam satuan Desibel (db).
Semakin besar nilai PSNR perbedaan antara stego image dan cover image
semakin kecil, sebaliknya semakin kecil nilai PSNR menunjukkan bahwa
perbedaan antara stego image dan cover image semakin besar (Medeni 2010).
Menurut Cole (2003) nilai PSNR dikatakan baik jika bernilai di atas 20. Hal ini
juga bermakna jika nilai di bawah 20 maka distorsi yang terjadi antara stego
image dan cover image sangat besar.
Nilai Mean Square Error (MSE) digunakan untuk menyatakan
penyimpangan yang terjadi antara cover image dan stego image. Jika MSE
bernilai besar maka penyimpangan yang terjadi besar. Gambar dengan komponen
warna Red, Green dan Blue memiliki tiga komponen nilai MSE maka
menghitungnya dengan membuat rata-rata nilai MSE seluruh kompunen warna
tersebut.
Persamaan untuk mencari PSNR sebagai berikut :
PSNR = 10 Log10 (2552 / MSE )
……………………….(5)
Sedangkan formula untuk menghitung nilai MSE adalah sebagai berikut :
MSE = [ ]2
1 1
),(),(1∑∑
= =
−M
x
N
y
yxKyxIMxN
……………………….(6)
16
Keterangan:
I(x,y) = data cover image
K(x,y) = data stego image
M = lebar image
N = tinggi image
2.10 Pengujian Perangkat Lunak
Membangun perangkat lunak dimulai dari tahap pembuatan konsep abstrak
yakni menspesifikasi dan merancang perangkat lunak hingga ke tahap
implementasi yang dapat dilihat baru kemudian dilakukan tes.
Tes dilakukan untuk menguji coba perangkat lunak sehingga dapat diketahui
kekurangan-kekurangan yang ada pada perangkat lunak. Ketika melakukan tes,
bentuk perangkat lunak harus sudah didefinisikan standarisasinya sehingga
kekurangan-kekurangan dapat dilengkapi. Programmer dapat menguji perangkat
lunak dengan melihat konstruksi dan komposisinya atau dengan melatih fungsi-
fungsi dan menguji hasilnya.
Sebuah perangkat lunak memiliki banyak komponen di dalamnya. Tes yang
dilakukan dengan cara komponen per komponen dalam perangkat lunak disebut
unit tes. Unit tes merupakan tes yang dilakukan pada setiap individu modul
program sebelum diintegrasikan dengan modul-modul program yang lain. Unit tes
juga terkadang disebut modul tes. Unit yang dapat dites adalah fungsi-fungsi,
subrutin, prosedur atau method. Unit kadang-kadang dapat berupa grup kecil atau
modul-modul yang saling berhubungan yang senantiasa dieksekusi layaknya
sebuah grup. Tujuan dari unit tes untuk mengidentifikasi dan memperbaiki error-
error yang mungkin sebelum menjadi perangkat lunak yang besar. Error akan
semakin sulit diketahui dan diperbaiki jika modul-modul sudah disatukan
(Satzinger et al. 2007).
2.11 Antarmuka Grafis (GUI)
Perancangan GUI secara fisik adalah merancang tampilan pada layar
monitor. Perancangan tersebut berbentuk form atau halaman web, jenisnya dapat
berupa:
17
1 Menu pilihan
2 Form isian (entry)
3 Penyajian informasi (report, query)
4 Kotak dialog jika diperlukan
5 Fasilitas bantuan (Help) jika diperlukan
Perancangan GUI menfokuskan pada tiga daerah rancangan yaitu rancangan
antarmuka antara modul-modul perangkat lunak, rancangan antarmuka antara
perangkat lunak dengan entitas eksternal, dan rancangan antarmuka antara
perangkat lunak dengan pengguna perangkat lunak (manusia dengan komputer).
Perancangan tersebut dikendalikan oleh data yang mengalir di antara modul-
modul dan karakteristik bahasa pemrograman yang diimplementasikan pada
perangkat lunak.
Pada perancangan GUI diperlukan runtutan untuk memudahkan pembuatan
GUI. Proses pembuatan GUI terdiri dari desain fase dan implemetasi fase.
Runtutan tersebut tampak pada Gambar 10.
Gambar 10 Pengembangan GUI proses RPL (MathWorks 1997).
Gambar 10 menunjukkan proses pengembangan GUI dilakukan dari tahap
desain ke implementasi. Arah panah berputar menunjukkan setiap proses yang ada
dapat mengalami pengulangan bahkan sampai beberapa kali apabila dibutuhkan.
Meskipun pengembangan sudah berada pada tahapan implementasi namun apabila
diperlukan proses-proses yang sudah dilakukan pada tahapan sebelumnya dapat
dilakukan kembali.
18
Perancangan GUI membutuhkan banyak informasi maka diagram alir
dibutuhkan untuk menggambarkan transformasi data ketika bergerak di dalam
sistem. Kebutuhan data dan kontrol dari setiap entitas harus ditentukan untuk
perancangan GUI yang sesuai. Semua aliran data dari modul ke modul pada
aplikasi harus sesuai untuk memastikan data sudah sesuai dengan kebutuhan.
19
BAB III
METODE
3.1 Waktu dan Tempat
Penelitian dilaksanakan di Laboratorium Net Centric Computing
Departemen Ilmu Komputer IPB dimulai bulan Oktober 2011 sampai dengan Juni
2012.
3.2 Bahan dan data
Penelitian ini menggunakan citra gambar 24 bit berformat bmp sebagai
bahan cover. Adapun pesan berupa citra gambar 24 bit berformat bmp dan plain
teks. Jumlah citra yang digunakan untuk cover sebanyak lima buah yang dipilih
mengacu pada penyebaran warna kontras dan halusnya masing-masing citra
tersebut, sedangkan pesan dipilih disesuaikan dengan daya tampung masing-
masing cover.
3.3 Perangkat Lunak dan Keras
Perangkat lunak dan keras yang digunakan pada penelitian ini sebagai berikut:
1 Microsoft Windows XP
2 MathWorks Matlab versi 6.5
3 Adobe Photoshop CS
Perangkat lunak tersebut dioperasikan pada notebook HP 500 series dengan
spesifikasi sebagai berikut:
1 Processor Intel Mobile 2,13 Gigahertz
2 Memori sebesar 1 Gigabyte
3 Intel display adapter 128 Megabyte
4 Harddisk 80 Gigabyte
5 Keyboard dan monitor
20
3.4 Metodelogi Penelitian
3.4.1 Penyisipan Pesan
Metode penyisipan pesan pada steganografi PVD dilakukan dengan cara
membagi-bagi piksel pada cover image menjadi sepasang-sepasang yang saling
berdekatan dan tidak saling menumpuk (non-ovelapping block pixel). Nilai setiap
piksel berubah setelah disisipi dengan bit pesan (data embedding). Jumlah bit
pesan yang disisipkan bergantung pada selisih setiap pasang piksel tersebut.
Besarnya bit yang disisipkan disesuaikan dengan tabel jangkauan yang digunakan.
Pada penelitian ini digunakan tabel jangkauan seperti Gambar 11.
Gambar 11 Lebar jangkauan Rj dengan Wj ∈{8, 8, 16, 32, 64, 128} (Wu, 2003).
Selisih sebesar 0 sampai 7 berada pada rentang R1 dan selisih sebesar 8
sampai 15 pada rentang R2 . Pada R1 dan R2 ditetapkan bit pesan yang dapat
21
disisipkan sebesar 3 bit. Pada rentang R3 dapat disisipkan pesan sebesar 4 bit, R4
sebesar 5 bit, R5 sebesar 6 bit dan R6 sebesar 7 bit.
Metode yang digunakan pada proses penyisipan pesan ke dalam cover
dijelaskan seperti diagram alir pada Gambar 12.
Gambar 12 Tahapan penyisipan pesan steganografi PVD.
Proses penyisipan pesan pada penelitian ini dimulai dengan melakukan
filterisasi terhadap cover-cover yang ingin disisipi pesan. Setelah pesan disiapkan
maka proses penyisipan dilakukan menggunakan teknik steganografi PVD dengan
hasil output berupa file stego image.
3.4.2 Filterisasi
Filterisasi dilakukan terhadap cover menggunakan filter customize
berukuran 3x3 yang disediakan oleh perangkat lunak Adobe Photoshop. Jenis
filter yang akan digunakan pada proses tersebut, sharpen, blur, emboss
22
Implementasi dari masing-masing cover pada aplikasi steganografi PVD
diamati untuk mengukur peningkatan daya tampung pesan dan nilai PSNR.
3.4.3 Ekstraksi pesan
Pada proses ekstraksi pesan metode yang digunakan seperti ditampilkan
diagram alir pada Gambar 13.
Gambar 13 Tahapan ekstraksi pesan steganografi pvd.
Setelah file stego image dihasilkan dari proses penyisipan pesan maka
tahapan selanjutnya yakni melakukan proses ekstraksi pesan yaitu mengambil
pesan rahasia yang tersimpan pada sebuah cover. Pada tahapan ini output berupa
file pesan rahasia yang disembunyikan pada cover.
23
BAB IV
HASIL DAN PEMBAHASAN
Kapasitas daya tampung pesan pada steganografi PVD semakin besar
jumlahnya jika cover yang digunakan berupa image dengan kontras yang luas. Hal
itu dikarenakan jumlah selisih antara dua piksel yang berdekatan pada cover
semakin besar jumlahnya, bitstream pesan yang dapat disisipkan pada setiap dua
piksel cover semakin besar pula jumlahnya. Sebagaimana yang terlihat pada tabel
jangkauan (Tabel 1) yang digunakan pada penelitian ini. Semakin besar selisih
piksel maka bit pesan yang diambil untuk disisipkan berada pada rentang yang
lebih besar.
Karakteristik piksel-piksel yang berdekatan pada sebuah citra umumnya
memiliki selisih yang tidak besar. Selisih piksel hanya berada pada rentang R1 dan
range R2, sehingga citra tersebut hanya mampu menampung sedikit bit pesan
(Rojali 2009). Teknik pengolahan citra dapat dilakukan dalam rangka
meningkatkan nilai selisih piksel-piksel tersebut. Salah satu teknik pengolahan
citra yang dapat dilakukan yakni filterisasi. Proses tersebut dapat merubah nilai
piksel-piksel yang dimiliki sebuah citra. Oleh karena itu, sebelum sebuah citra
dijadikan cover dilakukan proses filterisasi customize terhadap citra-citra cover
tersebut.
4.1 Pembuatan Aplikasi Steganografi PVD
4.1.1 Alat dan Data
Pada penelitian ini aplikasi steganografi PVD dikembangkan menggunakan
pemrograman script lewat Matlab versi 6.5 yang berjalan pada sistem operasi
Microsoft Windows XP SP2. Aplikasi terdiri atas dua menu yaitu penyisipan dan
pengambilan pesan. Menu-menu tersebut dibangun dengan m file dan GUI. Input
data cover berupa file gambar berformat bmp dengan mode RGB sedangkan
pesan yang disisipkan berupa plain teks dan file gambar berformat bmp bermode
RGB.
Aliran data dilakukan dengan menginput data cover dan pesan rahasia yang
ingin disembunyikan. Setelah itu proses penyisipan pesan dilakukan. Aliran data
24
berakhir dengan menghasilkan data output stego image. Pada proses pengambilan
pesan, aliran data dimulai dengan menginput data stego image dan berakhir pada
output data pesan rahasia. Kedua proses ini tampak pada Gambar 14.
4.1.2 Algoritme dan Perancangan Aplikasi
Aplikasi steganografi PVD memiliki dua menu dalam implementasinya
yakni embeded message (penyisipan pesan) dan extract message (pengambilan
pesan). Gambar 15 merupakan algoritme yang digunakan untuk pengembangan
embeded message (penyisipan pesan) pada aplikasi steganografi PVD.
Pada algoritme penyisipan pesan dilakukan tiga proses penyisipan pesan yang
sama pada setiap layer Red, Green dan Blue. Dimulai dengan menginput cover
berformat bmp yang memiliki tiga layer RGB. Kemudian, dari setiap layer
tersebut dua piksel yang berdekatan (gx, gx+1) dihitung selisihnya, masing-masing
disimpan dalam variabel dred, dgreen, dblue. Nilai selisih tersebut kemudian
dimutlakan (absolute value) yang dihitung sebesar dabs (masing-masing disimpan
dalam variabel dabsred, dabsgreen, dabsblue). Mengacu kepada tabel jangkauan
Input data
Cover
Proses
Penyisipan
Pesan
Output data
stego image
Input data
Pesan
Rahasia
Input data
Cover
Proses
Pengambilan
Pesan
Output
Pesan Rahasia
Gambar 14 Aliran data proses penyisipan dan pengambilan pesan.
25
(Gambar 9) maka dapat ditetapkan daerah rentang dari nilai dabs tersebut terdapat
lima daerah rentang yang ditetapkan pada penelitian ini. Adapun rentang 1 dengan
kisaran antara 0 sampai dengan 7, rentang 2 dengan kisaran antara 8 sampai
dengan 15, rentang 3 dengan kisaran antara 15 sampai dengan 31, rentang 4
dengan kisaran antara 32 sampai dengan 63, rentang 5 dengan kisaran antara 64
sampai dengan 127 dan rentang 6 dengan kisaran antara 128 sampai dengan 255.
Algoritme dilanjutkan dengan menentukan daerah rentang untuk dabs.
Penentuannya ditetapkan dengan menghitung nilai ti yang merupakan seberapa
banyak bit dari bitstream pesan yang dapat disisipkan. Nilai ti dihitung pada
setiap iterasi saat menghitung selisih antara dua piksel. Nilai ti dihitung dengan
melakukan operasi log terhadap nilai selisih batas bawah dan batas atas dari
rentang yang bersesuaian. Operasi log menghasilkan ketetapan bahwa pada selisih
piksel 0 sampai 7 dan 8 sampai 15 dapat disisipkan 3 bit pesan, selisih 16 sampai
31 disisipkan 4 bit, selisih 32 sampai 63 disisipkan 5 bit, selisih 64 sampai 127
disisipkan 6 bit dan selisih 128 sampai dengan 255 disisipkan 7 bit (Tabel 1).
Tabel 1 Daya tampung pesan pada setiap daerah rentang
Rentang 1 2 3 4 5 6
lb (batas bawah) 0 8 16 32 64 128
ub (batas atas) 7 15 31 63 127 255
ti (jumlah bit yang disisipkan) 3 3 4 5 6 7
Input pesan berupa citra RGB memiliki tiga layer. Setiap layer memiliki
nilai piksel yang berbeda. Sebelum disisipkan nilai piksel-piksel tersebut
dikonversi terlebih dahulu menjadi format string binary (binstream). Setelah
dihitung nilai ti maka bitstream pesan diambil sepanjang (length) ti dan disimpan
dalam messbindata. Kemudian bitstream messbindata dikonversi menjadi nilai
desimal (messdecdata), dijumlahkan dengan batas bawah rentang pada tabel
jangkauan (lj) menjadi nilai selisih untuk dua piksel yang baru (dx). Selisih
absolut dari d dan dx adalah nilai m yang dibutuhkan pada persamaan (4) untuk
menghitung nilai dua piksel yang baru (px, py).
26
Input pesan berupa plain teks, string binary (binstream) pesan dibagi
menjadi tiga bagian. Setelah dihitung nilai ti maka diambil bintstream sepanjang
(length) ti dan disimpan dalam messbindata. Proses pengambilan bitstream pesan
sepanjang ti dilanjutkan menghitung nilai-nilai messbindata, mesdecdata, dx, dan
m ini terus berulang seiring iterasi yang dilakukan pada setiap dua piksel cover
(gx, gx+1). Iterasi dihentikan sampai semua bitstream pesan disisipkan dalam
piksel cover sehingga menghasilkan nilai-nilai piksel baru (px,py) yang digunakan
untuk membentuk stego image. Aplikasi ini selain menghasilkan stego image
pada menu penyisipan pesan juga menghasilkan nilai PSNR, daya tampung
maksimal, dan ukuran dimensi pesan yang digunakan untuk pengambilan pesan.
Adapun algoritme yang digunakan untuk pengembangan menu extracted
message (pengambilan pesan) disajikan pada Gambar 15.
Gambar 15 Diagram alir proses pengambilan pesan.
27
Stego image merupakan image berformat RGB maka dalam algoritme
pengambilan pesan dilakukan juga tiga proses pengambilan pesan yang sama pada
masing-masing layer. Pengambilan pesan diawali dengan menginput stego image.
Kemudian dari setiap layer stego image dua piksel yang berdekatan (gx, gx+1)
dihitung selisihnya, masing-masing disimpan dalam variabel dxred, dxgreen,
dxblue. Nilai selisih tersebut kemudian dimutlakkan (absolute value) yang
dihitung sebesar dxabs (masing-masing disimpan dalam variabel dxabsred,
dxabsgreen, dxabsblue).
Mengacu kepada tabel jangkauan dapat ditetapkan rentang area dari nilai
dxabs tersebut. Seperti pada proses penyisipan pesan, demikian pula pada
pengambilan pesan digunakan juga tabel jangkauan yang memiliki lima daerah
rentang. Rentang tersebut yaitu rentang 1 dengan kisaran antara 0 sampai dengan
7, rentang 2 dengan kisaran antara 8 sampai dengan 15, rentang 3 dengan kisaran
antara 15 sampai dengan 31, rentang 4 dengan kisaran antara 32 sampai dengan
63, rentang 5 dengan kisaran antara 64 sampai dengan 127 dan rentang 6 dengan
kisaran antara 128 sampai dengan 255.
Pada setiap iterasi yang menghitung selisih dua piksel berdekatan pada
stego image, rentang-rentang pada tabel jangkauan digunakan untuk menentukan
besarnya tistego, yaitu besaran yang digunakan untuk menentukan berapa banyak
bit pesan yang telah disisipkan pada dua piksel stego image. Perhitungan tistego
dimulai dengan menghitung wj yaitu mengurangkan batas atas dengan batas
bawah (uj-lj+1). Kemudian dilakukan operasi log terhadap wj yang hasilnya
merupakan besarnya tistego maka hasil operasi log terhadap wj ditetapkan jika
selisih piksel 0 sampai 7 dan 8 sampai 15 dapat disisipkan 3 bit pesan, selisih 16
sampai 31 disisipkan 4 bit, selisih 32 sampai 63 disisipkan 5 bit, selisih 64 sampai
127 disisipkan 6 bit dan selisih 128 sampai dengan 255 disisipkan 7 bit (Tabel 1).
4.1.3 Perancangan Antarmuka Grafis (GUI)
Aplikasi ini dilengkapi dengan GUI agar user mudah menggunakannya.
Aplikasi dilengkapi dengan menu bar dan tombol-tombol eksekusi.
Perancangannya dibuat mudah untuk digunakan. Tag name yang dipilih memakai
istilah-istilah umum keamanan informasi. Perancangan GUI untuk aplikasi ini
28
keseluruhan terdiri dari lima halaman interface yaitu halaman depan, menu
penyisipan pesan teks, menu penyisipan pesan image, menu pengambilan pesan
teks, dan menu pengambilan pesan image. Halaman depan merupakan halaman
tampilan pertama aplikasi. Pada menu bar halaman depan terdapat menu
penyisipan pesan dan pengambilan pesan. Menu penyisipan pesan terdiri dari dua
submenu yakni menu penyisipan teks dan image. User dapat memilih file yang
dijadikan cover dan pesan. Kedua file tersebut secara visual ditampilkan pada
layar interface. Tombol build stego digunakan untuk menyisipkan pesan ke dalam
cover sekaligus menyimpan file stego image ke dalam memori dan
menampilkannya pada jendela tampilan. Aplikasi ini juga akan menampilkan
jumlah maksimal bit pesan dimiliki sebuah cover, nilai PSNR, dan besarnya
ukuran pesan yang disisipkan.
Menu pengambilan pesan terdiri dari dua submenu yakni menu pengambilan
pesan teks dan image. File stego image dipilih pada menu tersebut. User diminta
untuk memasukan ukuran pesan untuk mengambil pesan rahasia. Ukuran panjang
baris dan kolom pesan digunakan untuk mengambil pesan berbentuk image
sedangkan ukuran panjang string pesan digunakan untuk mengambil pesan
berbentuk plain teks. Proses ekstraksi pesan menampilkan pesan pada jendela
tampilan sekaligus menyimpan file ekstraksi pesan ke dalam memori. Gambar 16,
17, dan 18 merupakan layout dari GUI pada aplikasi steganografi PVD.
Gambar 16 Layout halaman depan.
29
Gambar 17 Layout halaman penyisipan pesan teks dan image.
Gambar 18 Layout halaman pengambilan pesan.
30
4.2 Implementasi
Aplikasi steganografy PVD pada penelitian dibuat menggunakan
pemrograman script Matlab 6.5 dinamakan dengan m-file. Dibutuhkan lima buah
script m-file dalam mengembangkan aplikasi tersebut. Dua script m-file
merupakan isi program sebagai implementasi dari algoritme penyisipan pesan dan
pengambilan pesan, tiga buah script m-file untuk mengimplementasikan grafik
antarmuka. Script m-file untuk penyisipan pesan berjumlah 515 line number dan
pengambilan pesan berjumlah 293 line number. Implementasi dalam pengerjaan
persamaan (4) membutuhkan fungsi tersendiri yang dibuat dengan script m-file
sebanyak 56 line number. Script m-file seluruhnya dapat dilihat pada lampiran 1.
Lima buah file figure dibuat untuk pengembangan grafik antarmuka. Setiap
komponen yang ada pada file figure tersebut dikendalikan oleh sebuah script m-
file. File figure halaman depan membutuhkan script m-file sebanyak 118 line
number, halaman penyisipan pesan (embededmessage) membutuhkan script m-file
sebanyak 882 line number dan halaman pengambilan pesan (extractmessage)
membutuhkan script m-file sebanyak 456 line number.
Gambar 19 Halaman depan aplikasi steganografi PVD.
31
Gambar 20 Halaman penyisipan pesan aplikasi steganografi PVD.
Gambar 21 Halaman pengambilan pesan image aplikasi steganografi PVD.
32
Gambar 22 Halaman pengambilan pesan teks aplikasi steganografi PVD.
4.3 Pengujian Aplikasi
Sebelum aplikasi digunakan, unit tes dilakukan untuk menguji aplikasi.
Pengujian menggunakan menggunakan file cover48pix.bmp sebagai cover, file
4pixel.bmp sebagai pesan, dan file stego image disimpan dalam file
stegoku1.bmp. Gambar 23 dan 24 merupakan visualisasi dari file-file tersebut.
Gambar 23 File cover cover48pix.bmp dan pesan 4pixel.bmp
Gambar 24 File stego image stegoku1.bmp
33
Nilai piksel yang dimiliki file-file yang digunakan dalam unit tes adalah
seperti yang tampak pada tabel 2, tabel 3.
Tabel 2 Nilai piksel file cover48pix.bmp
Layer: Red
137 125 131 136 123 123 124 255
255 147 129 177 154 135 148 137
255 255 139 135 150 185 142 140
255 255 137 123 230 169 148 150
255 181 137 123 135 132 133 150
255 255 255 255 255 255 255 255
Layer: Green
28 4 17 27 0 0 2 255
255 49 12 109 63 25 51 29
255 255 32 24 54 124 37 33
255 255 27 0 214 93 51 54
255 115 29 0 23 19 19 54
255 255 255 255 255 255 255 255
Layer: Blue
164 155 160 163 153 153 154 255
255 173 158 196 177 163 173 164
255 255 166 162 174 201 167 165
255 255 163 153 237 189 173 174
255 198 164 153 162 160 161 174
255 255 255 255 255 255 255 255
Tabel 3 Nilai piksel file 4pixel.bmp
Layer: red Layer: green Layer: blue
0 0 244 33 34 234
255 255 255 255 0 255
Stego image yang dihasilkan dalam unit tes memiliki nilai piksel seperti
yang disajikan pada tabel 4, 5, dan 6.
Tabel 4 Nilai piksel layer red file stegoku1.bmp
135 127 130 138 128 119 62 317
233 169 134 173 160 129 147 138
255 255 139 135 150 185 142 140
255 255 137 123 230 169 148 150
255 181 137 123 135 132 133 150
255 255 255 255 255 255 255 255
34
Tabel 5 Nilai piksel layer green file stegoku1.bmp
32 1 17 27 6 -5 2 256
232 71 -3 124 61 26 51 29
255 255 32 24 54 124 37 33
255 255 27 0 214 93 51 54
255 115 29 0 23 19 19 54
255 255 255 255 255 255 255 255
Tabel 6 Nilai piksel layer blue file stegoku1.bmp
164 155 158 166 159 147 173 237
261 168 156 199 178 163 176 161
255 255 166 162 174 201 167 165
255 255 163 153 237 189 173 174
255 198 164 153 162 160 161 174
255 255 255 255 255 255 255 255
Aplikasi menggunakan fungsi newpixel (newpixel.m) untuk menghitung
persamaan (4). Fungsi tersebut diuji kebenarannya dengan membuat sebuah
script m-file (testpxpy.m). Tabel 7 memperlihatkan nilai piksel dari output file
testpxpy.m.
Tabel 7 Output file testpxpy.m
Data Input Data Output
P(i,x) P(i,y) P'(i,x) P'(i,y)
137 125 135 127
131 136 130 138
123 123 128 119
124 255 62 317
255 147 233 169
129 177 134 173
154 135 160 129
Perbandingan nilai piksel dari kedua output yang dihasilkan yaitu output file
stego image aplikasi (fungsi newpixel) dan output script m-file testpxpy.m
membuktikan kebenaran algoritme aplikasi. Walaupun pada ujicoba ditemukan
nilai-nilai piksel yang berada di luar jangkauan (out of range) yaitu berada di luar
35
[0..255], namun hal ini sedikit sekali ditemukan sehingga secara visual tidak
mempengaruhi pesan (Luo et al. 2009). Apabila output file stego image disimpan
dalam file stegoku1.bmp, nilai-nilai piksel yang berada di luar jangkauan
dinormalisasi ke dalam format 24 bit. Tabel 8 menunjukkan nilai-nilai piksel yang
dimiliki file stegoku1.bmp.
Tabel 8 Nilai piksel file stegoku1.bmp
Layer: Red
135 127 130 138 128 119 62 255
233 169 134 173 160 129 147 138
255 255 139 135 150 185 142 140
255 255 137 123 230 169 148 150
255 181 137 123 135 132 133 150
255 255 255 255 255 255 255 255
Layer: Green
32 1 17 27 6 0 2 255
232 71 0 124 61 26 51 29
255 255 32 24 54 124 37 33
255 255 27 0 214 93 51 54
255 115 29 0 23 19 19 54
255 255 255 255 255 255 255 255
Layer: Blue
164 155 158 166 159 147 173 237
255 168 156 199 178 163 176 161
255 255 166 162 174 201 167 165
255 255 163 153 237 189 173 174
255 198 164 153 162 160 161 174
255 255 255 255 255 255 255 255
Unit tes juga dilakukan pada proses ekstraksi pesan. File pesan yang
disembunyikan pada file stego image stegoku1.bmp diekstrak sehingga
didapatkan file pesan yang diinginkan. Hasil ekstraksi membuktikan bahwa
aplikasi berjalan dengan benar dan dapat digunakan dalam melakukan penelitian.
4.4 Hasil dan Percobaan
Empat buah citra yang dijadikan sebagai cover pada penelitian ini masing-
masing berukuran 512x512 piksel dan 256x256 piksel disajikan pada Gambar 25.
36
Airplane.bmp
Baboon.bmp
Fractal.bmp
Pepper.bmp
Gambar 25 Citra bakal cover.
Percobaan menggunakan dua pesan berbentuk plain teks dan empat pesan
berbentuk image. Gambar 26 menyajikan image pesan yang digunakan.
Barcode.bmp
Flower.bmp
Peta.bmp
Sby.bmp
Gambar 26 Citra pesan.
37
4.4.1 Filterisasi
Tahapan filterisasi dilakukan menggunakan Adobe Photoshop CS. Matriks
(kernel) yang digunakan untuk customize filter pada penelitian ini adalah sebagai
berikut.
1. Blur:
1 1 1 1 2 1
1 1 1 2 4 2
1 1 1 1 2 1
2. Sharpen:
-1 -1 -1 0 -1 0
-1 9 -1 -1 5 -1
-1 -1 -1 0 -1 0
3. Emboss:
-2 -1 0
-1 1 1
0 1 2
Sebelum sebuah citra diinput untuk dijadikan cover dalam aplikasi, citra-
citra tersebut difilterisasi terlebih dahulu. Gambar 27, 28, 29, dan 30 merupakan
hasil filterisasi yang dilakukan terhadap citra-citra bakal cover tersebut.
4.4.2 Hasil Percobaan
Citra cover yang digunakan pada penelitian ini yakni sebesar 256x256
piksel berukuran 192 Kilobyte (KB) dan cover 512x512 piksel berukuran 769
KB. Adapun pesan yang disisipkan berukuran 5 KB, 10 KB, 21 KB, 31 KB, 43
KB, 50 KB, 60 KB, 80 KB dan 100 KB.
38
Citra sebelum difilter
Citra dengan filter blur1
Citra dengan filter blur2
Citra dengan filter emboss
Citra dengan filter sharp1
Citra dengan filter sharp2
Gambar 27 Visualisasi proses filterisasi terhadap citra airplane.bmp.
Citra sebelum difilter
Citra dengan filter blur1
Citra dengan filter blur2
Citra dengan filter emboss
Citra dengan filter sharp1
Citra dengan filter sharp2
Gambar 28 Visualisasi proses filterisasi terhadap citra baboon.bmp.
39
Citra sebelum difilter
Citra dengan filter blur1
Citra dengan filter blur2
Citra dengan filter emboss
Citra dengan filter sharp1
Citra dengan filter sharp2
Gambar 29 Visualisasi proses filterisasi terhadap citra fractal.bmp.
Citra sebelum difilter
Citra dengan filter blur1
Citra dengan filter blur2
Citra dengan filter emboss
Citra dengan filter sharp1
Citra dengan filter sharp2
Gambar 30 Visualisasi proses filterisasi terhadap citra pepper.bmp.
40
4.4.2.1 PSNR
PSNR merupakan nilai yang dihasilkan pada percobaan dalam penelitian ini.
Percobaan menghasilkan nilai PSNR seluruhnya bernilai di atas 20 db. Hal ini
menunjukkan bahwa noise yang ditimbulkan setelah cover disisipi pesan berada di atas
batas minimal (Cole 2003). Oleh karena itu, stego image yang dihasilkan memiliki
tingkat keamanan yang baik. Gambar 31 menunjukkan capaian nilai PSNR yang
dilakukan pada percobaan.
Cover: Airplane 192 KB ; Pesan: Barcode 21 KB
36.1114, 313905
36.6608, 392955
Sharp2
36.4303, 325122
Emboss
36.4432, 315405
Blur2
35.9469, 360381
Sharp1
35.9492, 310092
Blur1
250000
270000
290000
310000
330000
350000
370000
390000
410000
35.9 36 36.1 36.2 36.3 36.4 36.5 36.6 36.7
PSNR (db)
Day
a T
am
pu
ng
Pe
sa
n (
bit
)
Cover: Airplane.bmp (769 KB); Pesan: Sby.bmp (100 KB)
35.2302, 1202991
Blur1
35.6804, 1544820
Sharp2
37.3198, 1378095
Sharp1
36.8871, 1258593
Emboss
36.4636, 1216128
Blur2
36.3474, 1220637
1000000
1100000
1200000
1300000
1400000
1500000
1600000
35 35.5 36 36.5 37 37.5
PSNR
Day
a T
am
pu
ng
Pes
an
(b
it)
Gambar 31 Capaian PSNR pada percobaan dengan cover airplane.bmp
41
4.4.2.2 Daya Tampung Pesan
Percobaan pertama dilakukan dengan menggunakan cover berukuran
256x256 piksel dan pesan berukuran 21 KB. Tampak dalam Gambar 32, salib
sumbu x yang menyatakan kapasitas daya tampung pesan sebuah cover nilainya
meningkat setelah dilakukan filterisasi. Namun tidak pada filter blur, daya
tampung pesan cover mengalami penurunan. Demikian juga pada Gambar 33,
diagram menunjukkan bahwa daya tampung pesan pada cover berukuran 512x512
berkapasitas 756 KB terjadi peningkatan setelah dilakukan filterisasi.
Filter sharp1 merupakan jenis filter yang dapat meningkatkan daya tampung
pesan sebuah cover dengan maksimal. Daya tampung awal sebesar 313 905 bit
mampu meningkat sampai dengan 392 955 bit, terjadi peningkatan sebesar 79050
bit dalam menampung pesan. Filterisasi dapat meningkatkan daya tampung pesan
sebuah cover.
Filter sharp dan emboss mampu meningkatkan daya tampung pesan pada
sebuah cover. Pada cover berukuran 192 KB daya tampung pesan rata-rata
meningkat sebesar 4% dengan menggunakan filter sharp1. Pada ukuran cover
yang lebih besar yaitu 756 KB, daya tampung pesan meningkat rata-rata sebesar
7%. Bila dirata-ratakan pada kedua cover tersebut, maka filter sharp1 dapat
menaikkan daya tampung sebesar 5.5%.
Ukuran Cover : 192 KB
313905
345698
381312
310986
392955
351903
446730434298
0
50000
100000
150000
200000
250000
300000
350000
400000
450000
airplane.bmp baboon.bmp fractal.bmp pepper.bmp
Cover
Daya T
am
pu
ng
Pesan
(b
it)
Normal
Blur1
Blur2
Emboss
Sharp1
Sharp2
Gambar 32 Daya tampung pesan pada cover berukuran 192 KB dengan berbagai
jenis filterisasi.
42
Ukuran Cover : 756 KB
1220637
13832791431057
1218492
1544820
16962871748427
1924245
0
200000
400000
600000
800000
1000000
1200000
1400000
1600000
1800000
2000000
airplane.bmp baboon.bmp fractal.bmp pepper.bmp
Cover
Da
ya T
am
pu
ng
Pe
sa
n (
bit
)
Normal
Blur1
Blur2
Emboss
Sharp1
Sharp2
Gambar 33 Daya tampung pesan pada cover berukuran 756 KB dengan berbagai
jenis filterisasi
43
BAB V
SIMPULAN DAN SARAN
5.1 Simpulan
Penelitian ini menghasilkan simpulan sebagai berikut:
1 Aplikasi steganografi PVD yang dikembangkan pada penelitian ini dapat
digunakan untuk mengetahui daya tampung pesan yang dimiliki oleh
sebuah cover.
2 Filterisasi dapat digunakan untuk meningkatkan daya tampung pesan
yang dimiliki sebuah cover dengan tetap mempertahankan nilai PSNR di
atas ambang 20.
3 Filter sharp mampu meningkatkan daya tampung pesan cover paling
besar dibandingkan jenis-jenis filter lainnya yang digunakan pada
penelitian ini.
5.2 Saran
Penelitian lebih lanjut disarankan untuk menerapkan hal-hal sebagai berikut:
1 Beberapa jenis tabel jangkauan perlu digunakan untuk mencari daya
tampung yang lebih besar.
2 Perancangan algoritme untuk mempercepat waktu proses.
3 Nilai-nilai piksel yang berada di luar jangkauan perlu diatasi dengan
merancang algoritme yang tepat.
44
DAFTAR PUSTAKA
Amirtharajan R, Akila R, Deepikachowdavarapu P, 2010. A Comparative
Analysis of Image Steganography. International Journal of Computer
Applications 2:41-47
Bender W, Gruhl D, Morimoto N, Lu A. 1996. Techniques for data hiding. IBM
Systems Journal 35:313-336
Chang CC , Tseng HW. 2004. Steganographic method for digital images using
side match. Pattern Recognition Letter 25:1431-1437. [Elsevier BV].
www.elsevier.com/locate/j.patrec.2004.05.006.pdf [17 Mar 2010].
Cole E. 2003. Hiding in Plain Sight Steganography and the Art of Covert
Communication. Indiana: Wiley.
Gonzales RC, Richard E. Woods. 2002. Digital Image Processing. New York:
Addison Wesley.
Gopalan K, Shi Q. 2010. Audio Steganography using Bit Modification – A
Tradeoff on Perceptibility and Data Robustness for Large Payload Audio
Embedding. Di dalam: Proceedings of 19th International Conference on
Computer Communications and Networks; Zurich, 2-5 Agu 2010.
Switzerland: ICCCN. hlm 1-6.
Guritman S. 2003. Pengantar Kriptografi. Bogor: Fakultas Matematika dan Ilmu
Pengetahuan Alam IPB.
Hair J, Bush R, Ortinau D. 2006. Marketing Research. New York: McGraw-Hill.
Hearn D, Baker MP. 2004. Graphics Principles and Practice In C. New Jersey:
Prentice Hall.
Johnson NF, Jajodia S. 1998. Exploring Steganography: Seeing the Unseen.
Computer 31: 26-34
Lindayati. 2007. Steganografi berbasis Least Significant Bit (LSB) pada gambar
dengan penyisipan berukuran variabel [skripsi]. Bogor: Fakultas Matematika
dan Ilmu Pengetahuan Alam, Institut Pertanian Bogor.
Luo W, Huang F, Huang J. 2011. A more secure steganography based on adaptive
pixel-value differencing scheme. Multimedia Tools Appl. 52:407-430
[MathWorks] MathWorks. 1997. Building GUIs with MATLAB Version 5. Natick:
The MathWorks, Inc.
45
Medeni M.B O, Souidi EM. 2010. A Generalization of the PVD Steganographic
Method. International Journal of Computer Science and Information Security
(IJCSIS) 8:156-159.
Nugroho EP, Ratnasari K, Ramadhani KN, Putro BL. 2009. Rekayasa Perangkat
Lunak. Bandung: Politeknik Telkom.
Pramukanto Q. 2001. Mengolah citra gambar dan foto digital.
http://ebookbrowse.com/mengolah-citra-gambar-dan-foto-digital-
pdf-d143663573. [ 20 Agu 2011]
Purnomo MH, Muntasa A. 2010. Konsep Pengolahan Citra Digital dan Ekstraksi
Fitur. Yogyakarta: Graha Ilmu.
Rojali. 2009. Perbaikan dan Evaluasi Kinerja Algoritme Piksel Value Differencing
(PVD) [tesis]. Bogor. Fakultas Matematika dan Ilmu Pengetahuan Alam. IPB.
Satzinger J, Jackson R, Burd S. 2007. Systems Analysis and Design in Changing
World. Kanada: Thomson Course Technology.
Sekaran U. 2003. Research Methods for Business. New York: John Wiley & Sons.
Sridevi R, Damoradam A, Narasimham SVL. 2009. Efficient Method of Audio
Steganography by Modified LSB Algorithm and Strong Encryption Key With
Enhanced Security. JATIT 5, 6:768-771.
Wang C, Wu N, Tsai C, Hwang M. 2006. A high quality steganographic method
with piksel-value differencing and modulus function. The Journal of Systems
and Software 81:150-158.
Wijaya M C, Prijono A. 2007. Pengolahan Citra Digital Menggunakan Matlab
Image Processing Toolbox. Bandung: Informatika.
Wu D, Tsai W. 2003. A steganographic method for images by pixel-value
differencing. Pattern Recognition Letters 24: 1613–1626.
Zhang X, Wang S. 2004. Vulnerability fo Pixel-Value Differencing
Steganography to Histogram Analysis and Modification for Enhanced
Security. Pattern Recognition Letters 25: 331–339.
Zhang X, Wang S. 2005. Steganography Using Multiple-Base Notational System
and Human Vision Sensitivity. IEEE Signal Processing Letters 12:67-70.
Zollner J, Federrath H, Klimant H, Pfitzmann A, Piotraschke R, Westfeld A,
Wicke G , Wolf G. 1998. Modeling the security of steganographic systems. Di
dalam: Proceeding. 2nd Workshop on Information Hiding; Portland, 14-17
Apr 1998. LNCS 1525, hlm 345-355.
47
Lampiran 1 Source code
GUI halaman depan
function varargout = depan(varargin)
% DEPAN M-file for depan.fig
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @depan_OpeningFcn, ...
'gui_OutputFcn', @depan_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function depan_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = depan_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function embedtext_Callback(hObject, eventdata, handles)
embededmessagetext
function embedimage_Callback(hObject, eventdata, handles)
embededmessage
function extractmessagetext_Callback(hObject, eventdata, handles)
extractmessagetext
function extractimage_Callback(hObject, eventdata, handles)
extractmessage
function axes10_CreateFcn(hObject, eventdata, handles)
imshow('logoipb.bmp')
Penyisipan pesan image
%read in cover image filename
covername = cov;
%read in message image filename
messagename = mess;
%inisialisasi variabel red
tred=[];
wjred=0;
tired=0;
tixred=0;
48
Lanjutan
tnred=0;
pixelred=[];
pxred=[];
pyred=[];
matrixdatared=[];
matrixdataxred=[];
tmessred=[];
ttred=0;
%inisialisasi variabel green
tgreen=[];
wjgreen=0;
tigreen=0;
tixgreen=0;
tngreen=0;
pixelgreen=[];
pxgreen=[];
pygreen=[];
matrixdatagreen=[];
matrixdataxgreen=[];
tmessgreen=[];
ttgreen=0;
%inisialisasi variabel blue
tblue=[];
wjblue=0;
tiblue=0;
tixblue=0;
tnblue=0;
pixelblue=[];
pxblue=[];
pyblue=[];
matrixdatablue=[];
matrixdataxblue=[];
tmessblue=[];
ttblue=0;
%tabel jangkauan
lb=[0 8 16 32 64 128]; %lowerbound
ub=[7 15 31 63 127 255]; %upperbound
bitditampung=[3 3 4 5 6 7];
%open cover image files
[row,col,layer]=size(cov);
cov=double(cov);
%open message image files
[rowmess,colmess,layermess]=size(mess);
mess=double(mess);
%memecah nilai R G B cover
redcov=cov(:,:,1);
redcov=double(redcov);
[rowred,colred]=size(redcov);
greencov=cov(:,:,2);
greencov=double(greencov);
[rowgreen,colgreen]=size(greencov);
bluecov=cov(:,:,3);
bluecov=double(bluecov);
[rowblue,colblue]=size(bluecov);
%memecah nilai R G B message
redmess=mess(:,:,1);
redmess=double(redmess);
49
Lanjutan
[rowredmess,colredmess]=size(redmess);
greenmess=mess(:,:,2);
greenmess=double(greenmess);
[rowgreenmess,colgreenmess]=size(greenmess);
bluemess=mess(:,:,3);
bluemess=double(bluemess);
[rowbluemess,colbluemess]=size(bluemess);
%convert to binary matrix 8bit
redmessbin = dec2bin(redmess,8);
redmessbinstream = [];
greenmessbin = dec2bin(greenmess,8);
greenmessbinstream = [];
bluemessbin = dec2bin(bluemess,8);
bluemessbinstream = [];
%Convert RED binary matrix message to binary stream
%REDMESSBINSTREAM
[rowredmessbin,colredmessbin]=size(redmessbin);
for i=1:rowredmessbin
for j=1:colredmessbin
redmessbinstream = [redmessbinstream
redmessbin(rowredmessbin*(j-1) + i)];
end
end
lengthmessred=length(redmessbinstream);
[redbinstreamrow,redbinstreamcol]=size(redmessbinstream);
%Convert green binary matrix message to binary stream
%greenMESSBINSTREAM
[rowgreenmessbin,colgreenmessbin]=size(greenmessbin);
for i=1:rowgreenmessbin
for j=1:colgreenmessbin
greenmessbinstream = [greenmessbinstream
greenmessbin(rowgreenmessbin*(j-1) + i)];
end
end
lengthmessgreen=length(greenmessbinstream);
[greenbinstreamrow,greenbinstreamcol]=size(greenmessbinstream);
%Convert blue binary matrix message to binary stream
%blueMESSBINSTREAM
[rowbluemessbin,colbluemessbin]=size(bluemessbin);
for i=1:rowbluemessbin
for j=1:colbluemessbin
bluemessbinstream = [bluemessbinstream
bluemessbin(rowbluemessbin*(j-1) + i)];
end
end
lengthmessblue=length(bluemessbinstream);
[bluebinstreamrow,bluebinstreamcol]=size(bluemessbinstream);
%RED operation %cek bitspace
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gred=redcov(1+x,1+y:2+y);
gred=double(gred);
dred=gred(1,2)-gred(1,1); %d=difference between 2 pixel
dred=redcov(1+x,2+y)-redcov(1+x,1+y);
dabsred= abs(dred); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
50
Lanjutan
for i=1:1:6
if(dabsred >= lb(i)&& dabsred <= ub(i))
wjred=ub(i)-lb(i)+1;
tired=log2(wjred);
end
end
tred=[tred;tired];
end
end
bitspacered=sum(tred);
lengthmessred;
if lengthmessred>bitspacered
comment=('PROCESS TERMINATED----UKURAN PESAN TERLALU BESAR')
return
end
%green operation %cek bitspace
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
ggreen=greencov(1+x,1+y:2+y);
ggreen=double(ggreen);
dgreen=ggreen(1,2)-ggreen(1,1);
dgreen=greencov(1+x,2+y)-greencov(1+x,1+y);
dabsgreen= abs(dgreen); %absolute value to make0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsgreen >= lb(i)&& dabsgreen <= ub(i))
wjgreen=ub(i)-lb(i)+1;
tigreen=log2(wjgreen);
end
end
tgreen=[tgreen;tigreen];
end
end
bitspacegreen=sum(tgreen);
if lengthmessgreen>bitspacegreen
comment=('PROCESS TERMINATED----UKURAN PESAN TERLALU BESAR')
return
end
%blue operation %cek bitspace
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gblue=bluecov(1+x,1+y:2+y);
gblue=double(gblue);
dblue=gblue(1,2)-gblue(1,1); %d=difference between 2 pixel
dblue=bluecov(1+x,2+y)-bluecov(1+x,1+y);
dabsblue= abs(dblue); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsblue >= lb(i)&& dabsblue <= ub(i))
wjblue=ub(i)-lb(i)+1;
tiblue=log2(wjblue);
end
end
tblue=[tblue;tiblue];
end
end
51
Lanjutan
bitspaceblue=sum(tblue);
if lengthmessblue>bitspaceblue
comment=('PROCESS TERMINATED----UKURAN PESAN TERLALU BESAR')
return
end
%mencari selisih dua nilai pixel (desimal) terdekat
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gred=redcov(1+x,1+y:2+y);
gred=double(gred);
dred=gred(1,2)-gred(1,1); %d=difference between 2 pixel
dred=redcov(1+x,2+y)-redcov(1+x,1+y);
dabsred= abs(dred); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsred >= lb(i)&& dabsred <= ub(i))
wjred=ub(i)-lb(i)+1;
tired=log2(wjred);
end
end
ttred=tired+tixred;
if tired+tixred < lengthmessred
redmessbindata=redmessbinstream(1+tnred:tired+tixred);
tnred=tired+tixred;
tixred=tnred;
%convert bitstream to decimal
redmessdecdata=bin2dec(redmessbindata);
dxred=redmessdecdata+lb(tired-1);
%calculate m
mred=abs(dxred-dabsred);
mred/2;
dabsred;
[pxred,pyred]=newpixel(gred(1,1),gred(1,2),dabsred,dxred,mred);
pixelred=[pixelred; pxred pyred];
matrixdatared={(redmessbindata)};
matrixdataxred=[matrixdataxred; matrixdatared];
else
redmessbindata=redmessbinstream(1+tnred:lengthmessred);
%tnred=tired+tixred
%convert bitstream to decimal
redmessdecdata=bin2dec(redmessbindata);
dxred=redmessdecdata+lb(tired-1);
%calculate m
mred=abs(dxred-dabsred);
[pxred,pyred]=newpixel(gred(1,1),gred(1,2),dabsred,dxred,mred);
pixelred=[pixelred; pxred pyred];
matrixdatared={(redmessbindata)};
matrixdataxred=[matrixdataxred; matrixdatared];
break, end
end %endif
if ttred>=lengthmessred break, end
end %endfor col
end %endfor row
%mencari selisih dua nilai pixel (desimal) terdekat
for x=0:1:row-1 %traverse through all the pixel value on
52
Lanjutan
for y=0:2:col-1
ggreen=greencov(1+x,1+y:2+y);
ggreen=double(ggreen);
dgreen=ggreen(1,2)-ggreen(1,1);
dgreen=greencov(1+x,2+y)-greencov(1+x,1+y);
dabsgreen= abs(dgreen); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsgreen >= lb(i)&& dabsgreen <= ub(i))
wjgreen=ub(i)-lb(i)+1;
tigreen=log2(wjgreen);
end
end
ttgreen=tigreen+tixgreen;
if tigreen+tixgreen < lengthmessgreen
greenmessbindata=greenmessbinstream(1+tngreen:tigreen+tixgreen);
tngreen=tigreen+tixgreen;
tixgreen=tngreen;
%convert bitstream to decimal
greenmessdecdata=bin2dec(greenmessbindata);
dxgreen=greenmessdecdata+lb(tigreen-1);
%calculate m
mgreen=abs(dxgreen-dabsgreen);
mgreen/2;
dabsgreen;
[pxgreen,pygreen]=newpixel(ggreen(1,1),ggreen(1,2),dabsgreen
,dxgreen,mgreen);
pixelgreen=[pixelgreen; pxgreen pygreen
matrixdatagreen={(greenmessbindata)};
matrixdataxgreen=[matrixdataxgreen; matrixdatagreen];
else
greenmessbindata=greenmessbinstream(1+tngreen:lengthmessgreen);
%tngreen=tigreen+tixgreen
%convert bitstream to decimal
greenmessdecdata=bin2dec(greenmessbindata);
dxgreen=greenmessdecdata+lb(tigreen-1);
%calculate m
mgreen=abs(dxgreen-dabsgreen);
[pxgreen,pygreen]=newpixel(ggreen(1,1),ggreen(1,2),dabsgreen
,dxgreen,mgreen);
pixelgreen=[pixelgreen; pxgreen pygreen];
matrixdatagreen={(greenmessbindata)};
matrixdataxgreen=[matrixdataxgreen; matrixdatagreen];
break, end
end %endif
if ttgreen>=lengthmessgreen break, end
end %endfor col
end %endfor row
%mencari selisih dua nilai pixel (desimal) terdekat
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gblue=bluecov(1+x,1+y:2+y);
gblue=double(gblue);
dblue=gblue(1,2)-gblue(1,1); %d=difference between 2 pixel
dblue=bluecov(1+x,2+y)-bluecov(1+x,1+y
dabsblue= abs(dblue); %absolute value to make 0<=d<=255
53
Lanjutan
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsblue >= lb(i)&& dabsblue <= ub(i))
wjblue=ub(i)-lb(i)+1;
tiblue=log2(wjblue);
end
end
ttblue=tiblue+tixblue;
if tiblue+tixblue < lengthmessblue
bluemessbindata=bluemessbinstream(1+tnblue:tiblue+tixblue;
tnblue=tiblue+tixblue;
tixblue=tnblue;
%convert bitstream to decimal
bluemessdecdata=bin2dec(bluemessbindata) ;
dxblue=bluemessdecdata+lb(tiblue-1);
%calculate m
mblue=abs(dxblue-dabsblue);
[pxblue,pyblue]=newpixel(gblue(1,1),gblue(1,2), dabsblue,
dxblue, mblue);
pixelblue=[pixelblue; pxblue pyblue];
matrixdatablue={(bluemessbindata)};
matrixdataxblue=[matrixdataxblue;matrixdatablue];
else
bluemessbindata=bluemessbinstream(1+tnblue:lengthmessblue);
%convert bitstream to decimal
bluemessdecdata=bin2dec(bluemessbindata);
dxblue=bluemessdecdata+lb(tiblue-1);
%calculate m
mblue=abs(dxblue-dabsblue);
dabsblue;
[pxblue,pyblue]=newpixel(gblue(1,1),gblue(1,2),dabsblue,
dxblue,mblue);
pixelblue=[pixelblue; pxblue pyblue];
matrixdatablue={(bluemessbindata)};
matrixdataxblue=[matrixdataxblue; matrixdatablue];
break, end
end %endif
if ttblue>=lengthmessblue break, end
end %endfor col
end %endfor row
%lihat bitstream data pesan red
matrixpesanred=strvcat(matrixdataxred);
[mred,nred]=size(matrixpesanred);
sizebitpesanred=mred*nred;
matrixpesanredt=matrixpesanred'; %tranpose matrix
streampesanred=reshape(matrixpesanredt,1,sizebitpesanred);
streampesanred_pj=regexprep(streampesanred,'[^\w'']','');
jmlelemenpxpyred=prod(size(pixelred)) ;
jmlelemenredcov=prod(size(redcov));
vektorpixelred=reshape(pixelred.',1,[]); %matrix jadi vektor
pjvektorpxpyred = length(vektorpixelred);
redcovt = redcov';
redcovt(1:pjvektorpxpyred) = vektorpixelred;
newredcov = redcovt';
stegred=newredcov;
%lihat bitstream data pesan green
54
Lanjutan
matrixpesangreen=strvcat(matrixdataxgreen);
[mgreen,ngreen]=size(matrixpesangreen);
sizebitpesangreen=mgreen*ngreen;
matrixpesangreent=matrixpesangreen'; %tranpose matrix
streampesangreen=reshape(matrixpesangreent,1,sizebitpesangreen);
streampesangreen_pj=regexprep(streampesangreen,'[^\w'']','');
jmlelemenpxpygreen=prod(size(pixelgreen)) ;
jmlelemengreencov=prod(size(greencov));
vektorpixelgreen=reshape(pixelgreen.',1,[]);%matrix jadi vektor
pjvektorpxpygreen = length(vektorpixelgreen);
greencovt = greencov';
greencovt(1:pjvektorpxpygreen) = vektorpixelgreen;
newgreencov = greencovt';
steggreen=newgreencov;
%liat bitstream data pesan blue
matrixpesanblue=strvcat(matrixdataxblue);
[mblue,nblue]=size(matrixpesanblue);
sizebitpesanblue=mblue*nblue;
matrixpesanbluet=matrixpesanblue'; %tranpose matrix
streampesanblue=reshape(matrixpesanbluet,1,sizebitpesanblue);
streampesanblue_pj=regexprep(streampesanblue,'[^\w'']','');
jmlelemenpxpyblue=prod(size(pixelblue)) ;
jmlelemenbluecov=prod(size(bluecov));
vektorpixelblue=reshape(pixelblue.',1,[]); %matrix jadi vektor
pjvektorpxpyblue = length(vektorpixelblue);
bluecovt = bluecov';
bluecovt(1:pjvektorpxpyblue) = vektorpixelblue;
newbluecov = bluecovt';
stegblue=newbluecov;
%SHOW dan PSNR
uint8red = uint8(newredcov);
uint8green = uint8(newgreencov);
uint8blue = uint8(newbluecov);
stego(:,:,1) = uint8red;
stego(:,:,2) = uint8green;
stego(:,:,3) = uint8blue;
%imshow(stego)
%figure(3), imshow(stego);title('stego');
imwrite(stego,'stegoku1.bmp');
%hitung PSNR
PSNR=psnr(cov,stego);
bitspace=bitspacered+bitspacegreen+bitspaceblue;
Penyisipan pesan teks
%read in cover image filename
covername = cov;
%read in message image filename
messagename = mess;
bittext=readdata(mess);
pjtext=length(bittext);
pjtextrgb=round(pjtext/3);
redmessbinstream=bittext(1:pjtextrgb)
lengthmessred=length(redmessbinstream);
greenmessbinstream=bittext(pjtextrgb+1:pjtextrgb+pjtextrgb)
lengthmessgreen=length(greenmessbinstream);
bluemessbinstream=bittext(pjtextrgb+pjtextrgb+1:pjtext)
55
Lanjutan
lengthmessblue=length(bluemessbinstream);
%inisialisasi variabel red
tred=[];
wjred=0;
tired=0;
tixred=0;
tnred=0;
pixelred=[];
pxred=[];
pyred=[];
matrixdatared=[];
matrixdataxred=[];
ttred=0;
%inisialisasi variabel green
tgreen=[];
wjgreen=0;
tigreen=0;
tixgreen=0;
tngreen=0;
pixelgreen=[];
pxgreen=[];
pygreen=[];
matrixdatagreen=[];
matrixdataxgreen=[];
ttgreen=0;
%inisialisasi variabel blue
tblue=[];
wjblue=0;
tiblue=0;
tixblue=0;
tnblue=0;
pixelblue=[];
pxblue=[];
pyblue=[];
matrixdatablue=[];
matrixdataxblue=[];
ttblue=0;
%tabel jangkauan
lb=[0 8 16 32 64 128]; %lowerbound
ub=[7 15 31 63 127 255]; %upperbound
bitditampung=[3 3 4 5 6 7];
%open cover image files
[row,col,layer]=size(cov);
cov=double(cov);
%memecah nilai R G B cover
redcov=cov(:,:,1);
redcov=double(redcov);
[rowred,colred]=size(redcov);
greencov=cov(:,:,2);
greencov=double(greencov);
56
Lanjutan
[rowgreen,colgreen]=size(greencov);
bluecov=cov(:,:,3);
bluecov=double(bluecov);
[rowblue,colblue]=size(bluecov);
%RED operation %cek bitspace
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gred=redcov(1+x,1+y:2+y);
gred=double(gred);
dred=gred(1,2)-gred(1,1); %d=difference between 2 pixel
dred=redcov(1+x,2+y)-redcov(1+x,1+y);
dabsred= abs(dred); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsred >= lb(i)&& dabsred <= ub(i))
wjred=ub(i)-lb(i)+1;
tired=log2(wjred);
end
end
tred=[tred;tired];
end
end
bitspacered=sum(tred);
lengthmessred;
if lengthmessred>bitspacered
comment=('PROCESS TERMINATED ---- UKURAN PESAN TERLALU BESAR')
return
end
%green operation %cek bitspace
for x=0:1:row-1 %traverse through all the pixel value
for y=0:2:col-1
ggreen=greencov(1+x,1+y:2+y);
ggreen=double(ggreen);
dgreen=ggreen(1,2)-ggreen(1,1);
dgreen=greencov(1+x,2+y)-greencov(1+x,1+y);
dabsgreen= abs(dgreen); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsgreen >= lb(i)&& dabsgreen <=ub(i))
wjgreen=ub(i)-lb(i)+1;
tigreen=log2(wjgreen);
end
end
tgreen=[tgreen;tigreen];
end
end
bitspacegreen=sum(tgreen);
lengthmessgreen;
if lengthmessgreen>bitspacegreen
comment=('PROCESS TERMINATED ----UKURAN PESAN TERLALU BESAR');
return
end
%blue operation %cek bitspace
57
Lanjutan
for x=0:1:row-1 %traverse through all the pixel value
for y=0:2:col-1
gblue=bluecov(1+x,1+y:2+y);
gblue=double(gblue);
dblue=gblue(1,2)-gblue(1,1); %d=difference between 2 pixel
dblue=bluecov(1+x,2+y)-bluecov(1+x,1+y);
dabsblue= abs(dblue); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsblue >= lb(i)&& dabsblue <= ub(i))
wjblue=ub(i)-lb(i)+1;
tiblue=log2(wjblue);
end
end
tblue=[tblue;tiblue];
end
end
bitspaceblue=sum(tblue);
lengthmessblue;
if lengthmessblue>bitspaceblue
comment=('PROCESS TERMINATED ----UKURAN PESAN TERLALU BESAR');
end
%mencari selisih dua nilai pixel (desimal) terdekat
for x=0:1:row-1 %traverse through all the pixel value
for y=0:2:col-1
gred=redcov(1+x,1+y:2+y)
gred=double(gred);
dred=gred(1,2)-gred(1,1); %d=difference between 2 pixel
dred=redcov(1+x,2+y)-redcov(1+x,1+y);
dabsred= abs(dred); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsred >= lb(i)&& dabsred <= ub(i))
wjred=ub(i)-lb(i)+1;
tired=log2(wjred);
end
end
ttred=tired+tixred;
if tired+tixred < lengthmessred
redmessbindata=redmessbinstream(1+tnred:tired+tixred)
tnred=tired+tixred;
tixred=tnred;
%convert bitstream to decimal
redmessdecdata=bin2dec(redmessbindata)
dxred=redmessdecdata+lb(tired-1);
%calculate m
mred=abs(dxred-dabsred);
dabsred;
[pxred,pyred]=newpixel(gred(1,1),gred(1,2),dabsred,
dxred,mred)
pixelred=[pixelred; pxred pyred]
matrixdatared={(redmessbindata)};
matrixdataxred=[matrixdataxred; matrixdatared];
else
redmessbindata=redmessbinstream(1+tnred:lengthmessred)
redmessdecdata=bin2dec(redmessbindata)
58
Lanjutan
dxred=redmessdecdata+lb(tired-1);
%calculate m
mred=abs(dxred-dabsred);
mred/2;
[pxred,pyred]=newpixel(gred(1,1),gred(1,2),dabsred,
dxred, mred)
pixelred=[pixelred; pxred pyred]
matrixdatared={(redmessbindata)}
matrixdataxred=[matrixdataxred; matrixdatared]
break, end
end %endif
if ttred>=lengthmessred break, end
end %endfor col
%end %endfor row
%mencari selisih dua nilai pixel (desimal) terdekat
for x=0:1:row-1 %traverse through all the pixel value
for y=0:2:col-1
ggreen=greencov(1+x,1+y:2+y);
ggreen=double(ggreen);
dgreen=ggreen(1,2)-ggreen(1,1);
dgreen=greencov(1+x,2+y)-greencov(1+x,1+y);
dabsgreen= abs(dgreen); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsgreen >= lb(i)&& dabsgreen <= ub(i))
wjgreen=ub(i)-lb(i)+1;
tigreen=log2(wjgreen);
end
end
ttgreen=tigreen+tixgreen;
if tigreen+tixgreen<lengthmessgreen
greenmessbindata=greenmessbinstream(1+tngreen:tigreen+tixgreen)
tngreen=tigreen+tixgreen;
tixgreen=tngreen;
%convert bitstream to decimal
greenmessdecdata=bin2dec(greenmessbindata);
dxgreen=greenmessdecdata+lb(tigreen-1);
%calculate m
mgreen=abs(dxgreen-dabsgreen);
[pxgreen,pygreen]=newpixel(ggreen(1,1),ggreen(1,2),dabsgreen
,dxgreen,mgreen);
pixelgreen=[pixelgreen; pxgreen pygreen];
matrixdatagreen={(greenmessbindata)};
matrixdataxgreen=[matrixdataxgreen; matrixdatagreen];
else
greenmessbindata=greenmessbinstream(1+tngreen:lengthmessgreen)
greenmessdecdata=bin2dec(greenmessbindata);
dxgreen=greenmessdecdata+lb(tigreen-1);
%calculate m
mgreen=abs(dxgreen-dabsgreen);
[pxgreen,pygreen]=newpixel(ggreen(1,1),ggreen(1,2),dabsgreen
,dxgreen,mgreen);
pixelgreen=[pixelgreen; pxgreen pygreen];
matrixdatagreen={(greenmessbindata)};
matrixdataxgreen=[matrixdataxgreen; matrixdatagreen];
break, end
59
Lanjutan
end %endif
if ttgreen>=lengthmessgreen break, end
end %endfor col
end %endfor row
%mencari selisih dua nilai pixel (desimal) terdekat
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gblue=bluecov(1+x,1+y:2+y)
gblue=double(gblue);
dblue=gblue(1,2)-gblue(1,1); %d=difference between 2 pixel
dblue=bluecov(1+x,2+y)-bluecov(1+x,1+y);
dabsblue= abs(dblue); %absolute value to make 0<=d<=255
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dabsblue >= lb(i)&& dabsblue <= ub(i))
wjblue=ub(i)-lb(i)+1;
tiblue=log2(wjblue);
end
end
ttblue=tiblue+tixblue;
if tiblue+tixblue < lengthmessblue
bluemessbindata=bluemessbinstream(1+tnblue:tiblue+tixblue)
tnblue=tiblue+tixblue;
tixblue=tnblue;
%convert bitstream to decimal
bluemessdecdata=bin2dec(bluemessbindata) ;
dxblue=bluemessdecdata+lb(tiblue-1);
%calculate m
mblue=abs(dxblue-dabsblue);
[pxblue,pyblue]=newpixel(gblue(1,1),gblue(1,2),dabsblue,dxbl
ue,mblue)
pixelblue=[pixelblue; pxblue pyblue];
matrixdatablue={(bluemessbindata)};
matrixdataxblue=[matrixdataxblue; matrixdatablue];
else
bluemessbindata=bluemessbinstream(1+tnblue:lengthmessblue)
%tnblue=tiblue+tixblue
%convert bitstream to decimal
bluemessdecdata=bin2dec(bluemessbindata);
dxblue=bluemessdecdata+lb(tiblue-1);
%calculate m
mblue=abs(dxblue-dabsblue);
[pxblue,pyblue]=newpixel(gblue(1,1),gblue(1,2),dabsblue,dxbl
ue,mblue);
pixelblue=[pixelblue; pxblue pyblue];
matrixdatablue={(bluemessbindata)};
matrixdataxblue=[matrixdataxblue; matrixdatablue];
break, end
end %endif
if ttblue>=lengthmessblue break, end
end %endfor col
end %endfor row
%liat bitstream data pesan red
matrixpesanred=strvcat(matrixdataxred);
[mred,nred]=size(matrixpesanred);
60
Lanjutan
sizebitpesanred=mred*nred;
matrixpesanredt=matrixpesanred'; %tranpose matrix
streampesanred=reshape(matrixpesanredt,1,sizebitpesanred);
streampesanred_pj=regexprep(streampesanred,'[^\w'']',''); %hapus
nill value
%build matrix stego, mess embed
jmlelemenpxpyred=prod(size(pixelred)) ;
jmlelemenredcov=prod(size(redcov));
vektorpixelred=reshape(pixelred.',1,[]); %matrix jadi vektor
pjvektorpxpyred = length(vektorpixelred);
redcovt = redcov';
redcovt(1:pjvektorpxpyred) = vektorpixelred;
newredcov = redcovt';
stegred=newredcov;
%liat bitstream data pesan green
matrixpesangreen=strvcat(matrixdataxgreen);
[mgreen,ngreen]=size(matrixpesangreen);
sizebitpesangreen=mgreen*ngreen;
matrixpesangreent=matrixpesangreen'; %tranpose matrix
streampesangreen=reshape(matrixpesangreent,1,sizebitpesangreen);
streampesangreen_pj=regexprep(streampesangreen,'[^\w'']','');
%hapus nill value
%build matrix stego, mess embed
jmlelemenpxpygreen=prod(size(pixelgreen)) ;
jmlelemengreencov=prod(size(greencov));
vektorpixelgreen=reshape(pixelgreen.',1,[]);%matrix jadi vektor
pjvektorpxpygreen = length(vektorpixelgreen);
greencovt = greencov';
greencovt(1:pjvektorpxpygreen) = vektorpixelgreen;
newgreencov = greencovt';
steggreen=newgreencov;
%liat bitstream data pesan blue
matrixpesanblue=strvcat(matrixdataxblue);
[mblue,nblue]=size(matrixpesanblue);
sizebitpesanblue=mblue*nblue;
matrixpesanbluet=matrixpesanblue'; %tranpose matrix
streampesanblue=reshape(matrixpesanbluet,1,sizebitpesanblue);
streampesanblue_pj=regexprep(streampesanblue,'[^\w'']',''); %hapus
nill value
%build matrix stego, mess embed
jmlelemenpxpyblue=prod(size(pixelblue)) ;
jmlelemenbluecov=prod(size(bluecov));
vektorpixelblue=reshape(pixelblue.',1,[]); %matrix jadi vektor
pjvektorpxpyblue = length(vektorpixelblue);
bluecovt = bluecov';
bluecovt(1:pjvektorpxpyblue) = vektorpixelblue;
newbluecov = bluecovt';
stegblue=newbluecov;
%SHOW dan PSNR
uint8red = uint8(newredcov);
61
Lanjutan
uint8green = uint8(newgreencov);
uint8blue = uint8(newbluecov);
stego(:,:,1) = uint8red;
stego(:,:,2) = uint8green;
stego(:,:,3) = uint8blue;
%figure(3), imshow(stego);title('stego');
imwrite(stego,'stegokutext.bmp');
%figure(3), imshow('stegoku.bmp');title('stego');
%hitung PSNR
PSNR=psnr(cov,stego)
bitspace=bitspacered+bitspacegreen+bitspaceblue;
dayatampung=bitspace/3
Ekstraksi pesan image
rowredmess=rowpesan;
rowgreenmess=rowpesan;
rowbluemess=rowpesan;
colredmess=colpesan;
colgreenmess=colpesan;
colbluemess=colpesan;
%inisialisasi variabel red
tred=[];
wjred=0;
tired=0;
tixred=0;
tnred=0;
pixelred=[];
pxred=[];
pyred=[];
matrixdatared=[];
matrixdataxred=[];
tmessred=[];
ttred=0;
%inisialisasi variabel green
tgreen=[];
wjgreen=0;
tigreen=0;
tixgreen=0;
tngreen=0;
pixelgreen=[];
pxgreen=[];
pygreen=[];
matrixdatagreen=[];
matrixdataxgreen=[];
tmessgreen=[];
ttgreen=0;
%inisialisasi variabel blue
tblue=[];
wjblue=0;
62
Lanjutan
tiblue=0;
tixblue=0;
tnblue=0;
pixelblue=[];
pxblue=[];
pyblue=[];
matrixdatablue=[];
matrixdataxblue=[];
tmessblue=[];
ttblue=0;
%tabel jangkauan
lb=[0 8 16 32 64 128]; %lowerbound
ub=[7 15 31 63 127 255]; %upperbound
bitditampung=[3 3 4 5 6 7];
%open cover image files
[row,col,layer]=size(cov);
cov=double(cov);
%memecah nilai R G B cover
redcov=cov(:,:,1);
redcov=double(redcov);
[rowred,colred]=size(redcov);
greencov=cov(:,:,2);
greencov=double(greencov);
[rowgreen,colgreen]=size(greencov);
bluecov=cov(:,:,3);
bluecov=double(bluecov);
[rowblue,colblue]=size(bluecov);
%ekstraksi
stegred = redcov;
[row,col]=size(stegred);
stegred=double(stegred);
bitpesanred=[];
bitstreampesanred=[];
lengthmessred= rowpesan*colpesan*8;
%mencari selisih dua nilai pixel
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gred=stegred(1+x,1+y:2+y);
gred=double(gred);
dxred=gred(1,2)-gred(1,1) ; %d=difference between 2 pixel
dxred=stegred(1+x,2+y)-stegred(1+x,1+y);
dxabsred=abs(dxred); %absolute value selisih 2 pixel
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dxabsred >= lb(i)&& dxabsred <= ub(i))
wjred=ub(i)-lb(i)+1;
tistegored=log2(wjred);
pesandesred=dxabsred-lb(i);
63
Lanjutan
%konversi pesandes to biner
bitpesanred= {dec2bin(pesandesred,tistegored)};
end
end %endfor
bitstreampesanred=[bitstreampesanred; bitpesanred]; %masih string
matrixbitpesanred=strvcat(bitstreampesanred);
streammatrixbitpesanred=reshape(matrixbitpesanred,1,[]);
streammatrixbitpesanred_pjred=regexprep(streammatrixbitpesanred,'[
^\w'']',''); %hapus nill value
pjstreammatrixbitpesanred=length(streammatrixbitpesanred_pjred);
if pjstreammatrixbitpesanred >= lengthmessred
break,end
end %endfor
if pjstreammatrixbitpesanred >= lengthmessred
break, end
end %endfor
matrixbitpesanredt=matrixbitpesanred';
streampesanred=reshape(matrixbitpesanredt,1,[]);
streampesan_pjred=regexprep(streampesanred,'[^\w'']','');
streampesan1red=streampesan_pjred(1:lengthmessred);
streampesan2red=reshape(streampesan1red,8,[]);
streampesanred_ok=streampesan2red';
pesanrahasiared_str=mat2str(streampesanred_ok);
pesanrahasiared=bin2dec(pesanrahasiared_str);
pesanrahasiared=reshape(pesanrahasiared,rowredmess,colredmess);
%ekstrak
steggreen = greencov;
[row,col]=size(steggreen);
steggreen=double(steggreen);
bitpesangreen=[];
bitstreampesangreen=[];
lengthmessgreen=rowpesan*colpesan*8;
%mencari selisih dua nilai pixel
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
ggreen=steggreen(1+x,1+y:2+y);
ggreen=double(ggreen);
dxgreen=ggreen(1,2)-ggreen(1,1);
dxgreen=steggreen(1+x,2+y)-steggreen(1+x,1+y);
dxabsgreen=abs(dxgreen); %absolute value selisih 2 pixel
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dxabsgreen >= lb(i)&& dxabsgreen <= ub(i))
wjgreen=ub(i)-lb(i)+1;
tistegogreen=log2(wjgreen);
pesandesgreen=dxabsgreen-lb(i);
%konversi pesandes to biner
bitpesangreen = {dec2bin(pesandesgreen,tistegogreen)};
end %endif
end %endfor
bitstreampesangreen=[bitstreampesangreen; bitpesangreen];
matrixbitpesangreen=strvcat(bitstreampesangreen);
streammatrixbitpesangreen=reshape(matrixbitpesangreen,1,[]);
64
Lanjutan
streammatrixbitpesangreen_pjgreen=regexprep(streammatrixbitpesangr
een,'[^\w'']',''); %hapus nill value
pjstreammatrixbitpesangreen=length(streammatrixbitpesangreen_pjgre
en);
if pjstreammatrixbitpesangreen>= lengthmessgreen
break,end
end %endfor
if pjstreammatrixbitpesangreen >= lengthmessgreen
break, end
end %endfor
matrixbitpesantgreen=matrixbitpesangreen'; %tranpose matrix
streampesangreen=reshape(matrixbitpesantgreen,1,[]);
streampesan_pjgreen=regexprep(streampesangreen,'[^\w'']','');
%get matrix pesan
streampesan1green=streampesan_pjgreen(1:lengthmessgreen);
streampesan2green=reshape(streampesan1green,8,[]);
streampesangreen_ok=streampesan2green';
pesanrahasiagreen_str=mat2str(streampesangreen_ok);
pesanrahasiagreen=bin2dec(pesanrahasiagreen_str);
pesanrahasiagreen=reshape(pesanrahasiagreen,rowgreenmess,colgreenm
ess);
%ekstrak blue
stegblue = bluecov;
[row,col]=size(stegblue);
stegblue=double(stegblue);
bitpesanblue=[];
bitstreampesanblue=[];
lengthmessblue=rowpesan*colpesan*8;
%mencari selisih dua nilai pixel
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gblue=stegblue(1+x,1+y:2+y);
gblue=double(gblue);
dxblue=gblue(1,2)-gblue(1,1) ;
dxblue=stegblue(1+x,2+y)-stegblue(1+x,1+y);
dxabsblue=abs(dxblue); %absolute value selisih 2 pixel
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dxabsblue >= lb(i)&& dxabsblue <= ub(i))
wjblue=ub(i)-lb(i)+1;
tistegoblue=log2(wjblue);
%menghitung selisih dx dengan lb(i)
pesandesblue=dxabsblue-lb(i);
%konversi pesandes to biner
bitpesanblue = {dec2bin(pesandesblue,tistegoblue)};
end
end %endfor
bitstreampesanblue=[bitstreampesanblue; bitpesanblue]; %masih
string;
matrixbitpesanblue=strvcat(bitstreampesanblue);
streammatrixbitpesanblue=reshape(matrixbitpesanblue,1,[]);
streammatrixbitpesanblue_pj=regexprep(streammatrixbitpesanblue,'[^
\w'']','');
65
Lanjutan
pjstreammatrixbitpesanblue=length(streammatrixbitpesanblue_pj);
if pjstreammatrixbitpesanblue >= lengthmessblue
break, end
end %endfor
if pjstreammatrixbitpesanblue >= lengthmessblue
break, end
end %endfor
matrixbitpesantblue=matrixbitpesanblue'; %tranpose matrix
streampesanblue=reshape(matrixbitpesantblue,1,[]);
streampesan_pjblue=regexprep(streampesanblue,'[^\w'']','') ;%hapus
nill value
%get matrix pesan
streampesan1blue=streampesan_pjblue(1:lengthmessblue);
streampesan2blue=reshape(streampesan1blue,8,[]);
streampesanblue_ok=streampesan2blue';
pesanrahasiablue_str=mat2str(streampesanblue_ok);
pesanrahasiablue=bin2dec(pesanrahasiablue_str);
pesanrahasiablue=reshape(pesanrahasiablue,rowbluemess,colbluemess)
;
uint8pesanred = uint8(pesanrahasiared);
uint8pesangreen = uint8(pesanrahasiagreen);
uint8pesanblue = uint8(pesanrahasiablue);
pesan(:,:,1) = uint8pesanred;
pesan(:,:,2) = uint8pesangreen;
pesan(:,:,3) = uint8pesanblue;
imwrite(pesan, 'pesanku.bmp');
set(imshow(pesan));
Ekstraksi pesan teks
panjangbitpesan=input('input massage length:');
pjtextr=round(panjangbitpesan/3);
pjtextg=round(panjangbitpesan/3);
pjtextb=panjangbitpesan-(pjtextr+pjtextg);
%tabel jangkauan
lb=[0 8 16 32 64 128]; %lowerbound
ub=[7 15 31 63 127 255]; %upperbound
bitditampung=[3 3 4 5 6 7];
[row,col,layer]=size(cov);
cov=double(cov);
%memecah nilai R G B cover
redcov=cov(:,:,1);
redcov=double(redcov);
[rowred,colred]=size(redcov);
greencov=cov(:,:,2);
greencov=double(greencov);
[rowgreen,colgreen]=size(greencov);
66
Lanjutan
bluecov=cov(:,:,3);
bluecov=double(bluecov);
[rowblue,colblue]=size(bluecov);
%ekstraksi
stegred = redcov;
[row,col]=size(stegred);
stegred=double(stegred);
bitpesanred=[];
bitstreampesanred=[];
%mencari selisih dua nilai pixel
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gred=stegred(1+x,1+y:2+y);
gred=double(gred);
dxred=gred(1,2)-gred(1,1) ; %d=difference between 2 pixel
dxred=stegred(1+x,2+y)-stegred(1+x,1+y);
dxabsred=abs(dxred); %absolute value selisih 2 pixel
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dxabsred >= lb(i)&& dxabsred <= ub(i))
wjred=ub(i)-lb(i)+1;
tistegored=log2(wjred);
%menghitung selisih dx dengan lb(i)
pesandesred=dxabsred-lb(i);
%konversi pesandes to biner
bitpesanred = {dec2bin(pesandesred,tistegored)};
end %endif
end %endfor
bitstreampesanred=[bitstreampesanred; bitpesanred]; %masih string
matrixbitpesanred=strvcat(bitstreampesanred);
streammatrixbitpesanred=reshape(matrixbitpesanred,1,[]);
streammatrixbitpesanred_pjred=regexprep(streammatrixbitpesanred,'[
^\w'']',''); %hapus nill value
pjstreammatrixbitpesanred=length(streammatrixbitpesanred_pjred);
if pjstreammatrixbitpesanred >= pjtextr
break, end
end %endfor
if pjstreammatrixbitpesanred >= pjtextr
break, end
end %endfor
matrixbitpesanredt=matrixbitpesanred';
streampesanred=reshape(matrixbitpesanredt,1,[]);
streampesan_pjred=regexprep(streampesanred,'[^\w'']','');
streampesanred=streampesan_pjred(1:pjtextr); %get stream pesan red
%ekstrak green
steggreen = greencov;
[row,col]=size(steggreen);
steggreen=double(steggreen);
bitpesangreen=[];
bitstreampesangreen=[];
67
Lanjutan
%mencari selisih dua nilai pixel
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
ggreen=steggreen(1+x,1+y:2+y);
ggreen=double(ggreen);
dxgreen=ggreen(1,2)-ggreen(1,1) ;
dxgreen=steggreen(1+x,2+y)-steggreen(1+x,1+y);
dxabsgreen=abs(dxgreen); %absolute value selisih 2 pixel
%menentukan lebar jangkauan dap sehingga diketahui ti
for i=1:1:6
if(dxabsgreen >= lb(i)&& dxabsgreen <= ub(i))
wjgreen=ub(i)-lb(i)+1;
tistegogreen=log2(wjgreen);
%menghitung selisih dx dengan lb(i)
pesandesgreen=dxabsgreen-lb(i);
%konversi pesandes to biner
bitpesangreen = {dec2bin(pesandesgreen,tistegogreen)};
end
end %endfor
bitstreampesangreen=[bitstreampesangreen; bitpesangreen]; %masih
string;
matrixbitpesangreen=strvcat(bitstreampesangreen);
streammatrixbitpesangreen=reshape(matrixbitpesangreen,1,[]);
streammatrixbitpesangreen_pjgreen=regexprep(streammatrixbitpesangr
een,'[^\w'']',''); %hapus nill value
pjstreammatrixbitpesangreen=length(streammatrixbitpesangreen_pjgre
en);
if pjstreammatrixbitpesangreen >= pjtextg
break, end
end %endfor
if pjstreammatrixbitpesangreen >= pjtextg
break, end
end %endfor
matrixbitpesantgreen=matrixbitpesangreen'; %tranpose matrix
streampesangreen=reshape(matrixbitpesantgreen,1,[]);
streampesan_pjgreen=regexprep(streampesangreen,'[^\w'']','');
streampesangreen=streampesan_pjgreen(1:pjtextg) ;
%ekstrakblue
stegblue = bluecov;
[row,col]=size(stegblue);
stegblue=double(stegblue);
bitpesanblue=[];
bitstreampesanblue=[];
%mencari selisih dua nilai pixel
for x=0:1:row-1 %traverse through all the pixel value on
for y=0:2:col-1
gblue=stegblue(1+x,1+y:2+y);
gblue=double(gblue);
dxblue=gblue(1,2)-gblue(1,1) ;
dxblue=stegblue(1+x,2+y)-stegblue(1+x,1+y);
dxabsblue=abs(dxblue); %absolute value selisih 2 pixel
%menentukan lebar jangkauan dap sehingga diketahui ti
68
Lanjutan
for i=1:1:6
if(dxabsblue >= lb(i)&& dxabsblue <= ub(i))
wjblue=ub(i)-lb(i)+1;
tistegoblue=log2(wjblue);
%menghitung selisih dx dengan lb(i)
pesandesblue=dxabsblue-lb(i);
%konversi pesandes to biner
bitpesanblue = {dec2bin(pesandesblue,tistegoblue)};
end
end %endfor
bitstreampesanblue=[bitstreampesanblue; bitpesanblue];
matrixbitpesanblue=strvcat(bitstreampesanblue);
streammatrixbitpesanblue=reshape(matrixbitpesanblue,1,[]);
streammatrixbitpesanblue_pj=regexprep(streammatrixbitpesanblue,'[^
\w'']','');
pjstreammatrixbitpesanblue=length(streammatrixbitpesanblue_pj);
if pjstreammatrixbitpesanblue >= pjtextb
break, end
end %endfor
if pjstreammatrixbitpesanblue >= pjtextb
break, end
end %endfor
matrixbitpesantblue=matrixbitpesanblue'; %tranpose matrix
streampesanblue=reshape(matrixbitpesantblue,1,[]);
streampesan_pjblue=regexprep(streampesanblue,'[^\w'']','');
streampesanblue=streampesan_pjblue(1:pjtextb);
pesanstream=[streampesanred,streampesangreen, streampesanblue];
%get stream pesan RGB
%Reconstruct binary matrix
[dnk, sizebindat] = size(pesanstream);
for i=1:(sizebindat/7)
bintemp(i,:) = pesanstream((i-1)*7+1:i*7);
end
binmat=bintemp;
decstream=bin2dec(binmat);
decvec = decstream';
text=char(decvec)
save -ascii myfile.txt text
Fungsi PSNR
function p = psnr(x,y)
%Copyright (c) 2004 Gabriel Peyr
x=double(x);
y=double(y);
d = mean( mean( (x(:)-y(:)).^2 ) );
m1 = max( abs(x(:)) );
m2 = max( abs(y(:)) );
m = max(m1,m2);
p = 10*log10( m^2/d );
Fungsi Newpixel
function [px,py]=newpixel_bu(x,y,dabs,dx,m)
69
Lanjutan
%newpixelred>=gred(1,2)&&dxred>dabsred
if x>=y&dx>dabs;
px=x+ceil(m/2);
py=y-floor(m/2);
elseif x<y&dx>dabs;
px=x-floor(m/2);
py=y+ceil(m/2);
elseif x>=y&dx<=dabs;
px=x-ceil(m/2);
py=y+floor(m/2);
else x<y&dx<=dabs;
px=x+ceil(m/2);
py=y-floor(m/2);
end