PEMANFAATAN FILTERISASI UNTUK MENINGKATKAN · kecil hanya memiliki daya tampung yang sedikit. ......

99
i

Transcript of PEMANFAATAN FILTERISASI UNTUK MENINGKATKAN · kecil hanya memiliki daya tampung yang sedikit. ......

i

i

PEMANFAATAN FILTERISASI UNTUK MENINGKATKAN

DAYA TAMPUNG PESAN PADA STEGANOGRAFI

PIXEL VALUE DIFFERENCES (PVD)

MUHAMAD AZHARI

SEKOLAH PASCA SARJANA

INSTITUT PERTANIAN BOGOR

BOGOR

2012

ii

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

iv

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

vi

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

x

Penguji Luar Komisi pada Ujian Tesis : Endang Purnama Giri S.Kom, M.Kom.

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:

xii

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.

46

LAMPIRAN

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

70

Lampiran 2 Hasil percobaan cover Airplane.bmp (256x256 piksel)

71

Lampiran 3 Hasil percobaan cover Baboon.bmp (256x256 piksel)

72

Lampiran 4 Hasil percobaan cover Fractal1.bmp (256x256 piksel)

73

Lampiran 5 Hasil percobaan cover Pepper.bmp (256x256 piksel)

74

Lampiran 6 Hasil percobaan cover Airplane2.bmp (512x512)

75

Lampiran 7 Hasil percobaan cover Baboon2.bmp (512x512)

76

Lampiran 8 Hasil percobaan cover Fractal2.bmp (512x512 piksel)

77

Lampiran 9 Hasil percobaan cover Pepper2.bmp (512x512 piksel)