TUGAS AKHIR
KOMPRESI CITRA DIGITAL MENGGUNAKAN TRANSFORMASI WAVELET Diajukan Untuk Memenuhi Salah Satu Syarat Guna Menyelesaikan Pendidikan Program Strata Satu Jurusan Teknik Elektro Fakultas Teknologi Industri
Disusun oleh :
NAMA NIM
: FITRI HARIYADI : 01402-041
JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNOLOGI INDUSTRI UNIVERSITAS MERCU BUANA JAKARTA 2009
i
JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNOLOGI INDUSTRI UNIVERSITAS MERCU BUANA
LEMBAR PENGESAHAN
Judul
:
Nama NIM Peminatan Jurusan
: : : :
Kompresi Citra Digital Menggunakan Transformasi Wavelet FITRI HARIYADI 01402-041 Telekomunikasi Teknik Elektro
Mengetahui
Ketua Jurusan Teknik Elektro
Pembimbing
Ir. Yudhi Gunardhi MT
Dr.-Ing. Mudrik Alaydrus
ii
ABSTRAK
Teknik kompresi adalah teknik yang bertujuan mengurangi ukuran data tanpa kehilangan informasi yang dikandungnya. Berdasarkan kehilangan data dalam proses kompresi, teknik ini dibagi dalam teknik kompresi lossless dan teknik kompresi lossy. Penerapan teknik kompresi yang dibahas dalam tulisan ini ditekankan pada kompresi citra.
Kompresi Citra adalah aplikasi pengurangan data yang dilakukan terhadap citra digital dengan tujuan untuk mengurangi redundansi dari data-data yang terdapat dalam citra. Pada tugas akhir ini dibuat program untuk mengkompresi citra Lena dengan transformasi wavelet menggunakan perangkat lunak MATLAB ver 6.5.
iii
KATA PENGANTAR Assalamu’alaikum warahmatullahi wabarakatuh Bismillahirrahmanirrahim Alhamdulillahirobbil ‘alamiin, puji syukur penulis panjatkan atas kehadirat ALLAH SWT yang telah melimpahkan rahmat-Nya sehingga penulis dapat menyelesaikan tugas akhir yang berjudul “Kompresi Citra Digital Menggunakan Transformasi Wavelet”. Tak lupa pula shalawat serta salam untuk junjungan kita Nabi besar Muhammad SAW, yang telah menunjukkan jalan yang lurus untuk seluruh umatnya. Tugas akhir ini tidak akan mungkin bisa terselesaikan tanpa bantuan dari berbagai pihak, diantaranya dalam memberikan bimbingan, dorongan moril, serta materil. Oleh karena itu, penulis ingin menyampaikan terima kasih yang sebesar – besarnya kepada : 1. ALLAH SWT yang telah memberikan segala nikmat, baik nikmat iman dan islam, serta nikmat sehat wal afiat. 2. Kedua Orangtuaku. Bapak dan Ibu, yang terus memberikan semangat, nasehat untuk selalu sabar dan mendo’akan ku sehingga dapat menyelesaikan Tugas Akhir ini. 3. Dr.-Ing Mudrik Alaydrus Selaku dosen pembimbing yang telah banyak menyempatkan waktu, pikiran serta dukungan moril sehingga penulis dapat menyelesaikan tugas akhir ini. 4. Bapak Dudi Nugroho dosen Peminatan Telekomunikasi yang telah memberikan masukan kepada penulis dalam menyelesaikan tugas akhir ini.
iv
5. Ir. Yudhi Gunardi MT Selaku Ketua jurusan Teknik Elektro, Fakultas Teknologi Industri, Universitas Mercu Buana. 6. Seluruh dosen Teknik Elektro dan staf pegawai FTI Universitas Mercu Buana Jakarta, yang telah mendidik dan memberikan bimbingannya baik dalam kegiatan perkuliahan maupun dalam kegiatan lainnya. 7. Untuk Bapak Mario Teguh. Yang memberikan inspirasi dan semangat kepada penulis dalam acara nya yang Super. Salam Super. 8. Untuk Hatiku tersayang, yang selalu menemani dan memberikan semangat kepada penulis dalam menyelesaikan tugas akhir ini. 9. Kakak Ipar dan kakak – kakak aku Khaerul Syah, Yanni Laksana, Faradilla yang telah memberikan doa, motivasi dan dorongannya kepada penulis untuk selalu sabar dalam menyelesaikan tugas akhir. 10. Keponakan - keponakan aku yang lucu Alifia Puteri Makhaeli, Wahyuni Ika Pratiwi, Devan Khananda Elfarizi. 11. Toto Raharjo, Wage Resmiarto, Ahmad Firmansyah, Firman Suryadi, Ahmad Fauzi, Kustian, Nahor, Getek dan semua teman-teman seperjuanganku, khususnya angkatan 2002 Teknik Elektro yang tidak bisa saya sebutkan satu per satu. 12. Teman – teman dan staf pengajar di tempat Kursus B. Inggris PEC Villa Tomang Kutabumi. (Mr.Bee, Mr. Wani, Mr. Jo, Mr. Fendi, Mr. Day). Thanks for all. 13. Serta seluruh semua pihak yang telah membantu kepada penulis, yang tidak bisa disebutkan satu per satu sehingga tugas akhir ini dapat terselesaikan, terima kasih.
v
Penulis menyadari bahwa dalam penulisan tugas akhir ini masih jauh dari kesempurnaan. Oleh karena itu, penulis sangat mengharapkan kritik dan saran yang membangun dari pembaca untuk perbaikan tugas akhir ini. Penulis berharap semoga tugas akhir ini dapat bermanfaat bagi pembaca. Akhir kata, mudah – mudahan apa yang telah kita kerjakan mendapat Ridho dari Allah SWT. Amin.. Wassalamu’alaikum Warahmatullahi Wabarakatuh.
Jakarta, April 2009
Penulis
vi
DAFTAR ISI
HALAMAN JUDUL...................................................................................
i
LEMBAR PENGESAHAN..........................................................................
ii
ABSTRAK…………………………………………………………...........
iii
KATA PENGANTAR.................................................................................
iv
DAFTAR ISI................................................................................................
vii
DAFTAR GAMBAR……………………………………………................
ix
BAB I
BAB II
PENDAHULUAN 1.1 Latar Belakang…………………………………………....
1
1.2 Tujuan Penulisan…………………………………………
2
1.3 Pembatasan Masalah……………………………………...
2
1.4 Sistematika Penulisan……………………………………..
2
TEORI DASAR 2.1 Pendahuluan..........……………………………………….
3
2.2 Pengolahan Citra Digital….…………………………….
3
2.3 Kompresi Citra……………....……………………………..
4
2.3.1 Resolusi………......……………………………….....
6
2.3.2 Kedalaman Bit............................................................
6
2.3.3 Konsep Redundansi....................................................
6
2.3.3.1 Subsampling..…………………………........
7
2.3.3.2 Pengurangan Kedalaman Bit.........................
7
2.3.3.3 Transformation Coding..................................
7
2.4 JPEG 2000………………………………………….……
8
2.5 Kriteria Pemampatan Citra...................................................
8
2.6 Jenis Pemampatan Citra.......................................................
9
2.7 Filtering...............................................................................
10
2.7.1 Low Pass Filter............................................................
11
2.7.3 High Pass Filter.............................................................
12
vii
BAB III
BAB IV
2.8 Pengukuran error kompresi citra............................................
12
2.9 Matlab.....................................................................................
13
PERANCANGAN KOMPRESI CITRA 3.1 Transformasi Wavelet……………………………………….
16
3.1.1 Perbandingan dengan Transformasi Fourier…….……
16
3.1.2 Transformasi Wavelet Kontinu...................................
17
3.1.3 Transformasi Wavelet Diskrit.....................................
17
3.2 Proses Dekomposisi................................................................
18
3.3 Proses Kuantisasi...................................................................
19
3.4 Proses Rekonstruksi...............................................................
20
3.5 Irreversible Component Transformation (ICT)......................
22
3.6 Flowchart diagram Sistem.....................................................
25
ANALISA 4.1 Analisa Proses Dekomposisi………………………………..
27
4.2 Analisa Perbandingan Jenis – jenis Wavelet…………..........
30
4.3 Analisa Wavelet dalam Citra Lena........................................
35
4.3.1 Proses rgb2yuv.............................................................
35
4.3.2 Proses dwt....................................................................
37
4.3.3 Proses Kuantisasi.........................................................
39
4.3.4 Proses yuv2rgb.............................................................
41
KESIMPULAN..........................................................................
44
DAFTAR PUSTAKA........................................................................................
45
BAB V
LAMPIRAN A LAMPIRAN B
viii
DAFTAR GAMBAR
Gambar 2.1. Hasil LPF untuk gambar kucing dan komputer
11
Gambar 2.2. Hasil HPF untuk gambar kucing dan komputer
12
Gambar 2.3. Tampilan Umum Matlab
14
Gambar 3.1. Pengelompokkan dalam DWT
18
Gambar 3.2. Subbidang Citra Dekomposisi satu kali menggunakan db4
19
Gambar 3.3. Penggalan Koefisien – koefisien Bidang LL
20
Gambar 3.4. Penggalan Koefisien – koefisien Bidang LL Terkuantisasi 4
20
Gambar 3.5. Rekonstruksi Subbidang Citra LL dari Subbidang Citra
21
Gambar 3.6. Haar Scaling Function dan Haar Wavelet Function
24
Gambar 3.7. Flowchart Diagram Sistem
26
Gambar 4.1. Citra Lena dalam Gambar Monokrom
27
Gambar 4.2. Citra Lena dengan Dekomposisi Level satu
28
Gambar 4.3. Citra Lena dengan Dekomposisi Level dua
29
Gambar 4.4. Citra Lena dengan Dekomposisi Level tiga
30
Gambar 4.5. Tampilan Matlab dalam Jenis – jenis Wavelet
31
Gambar 4.6. Citra Lena pada Dekomposisi level 3 dengan Wavelet Haar
31
Gambar 4.7. Citra Lena pada Dekomposisi level 3 dengan Wavelet Daubechies 2
32
Gambar 4.8. Citra Lena pada Dekomposisi level 3 dengan Wavelet Daubechies 4
32
Gambar 4.9. Citra Lena pada Dekomposisi level 3 dengan Wavelet Symlets 2
33
Gambar 4.10. Citra Lena pada Dekomposisi level 3 dengan Wavelet Symlets 4
33
Gambar 4.11. Citra Lena pada Dekomposisi level 3 dengan Wavelet Coiflets 2
34
Gambar 4.12. Citra Lena pada Dekomposisi level 3 dengan Wavelet Coiflets 4
34
Gambar 4.13. Citra Lena dalam Gambar Berwarna
ix
35
Gambar 4.14. Citra Lena dengan Proses rgb2yuv
37
Gambar 4.15. Citra Lena dengan Proses dwt
39
Gambar 4.16 Citra Lena dengan Proses Kuantisasi
41
Gambar 4.17. Citra Lena asli 256 kB dan Citra Terkompresi 192 kB menggunakan Wavelet Haar Dengan dekomposisi Level 2
42
Gambar 4.18. Citra Lena asli 256 kB dan Citra Terkompresi 128 kB menggunakan Wavelet Haar Dengan dekomposisi Level 3
x
43
BAB I
PENDAHULUAN
1.1
Latar Belakang
Komunikasi merupakan salah satu kebutuhan yang sangat penting dalam kehidupan masyarakat sejak zaman dahulu hingga zaman modern saat ini. Komunikasi menjadi sangat penting karena manusia sebagai makhluk sosial tidak dapat hidup sendiri dan memerlukan interaksi dengan sesamanya dan dengan lingkungan sekitarnya. Komunikasi dapat diartikan sebagai transfer informasi dari satu tempat ke tempat lain dengan menggunakan suatu sistem komunikasi. Informasi yang dikirimkan adalah berupa data yang dapat berbentuk suara, teks, atau citra (images). Untuk mentransfer atau mengirimkan data yang berbentuk citra diperlukan bandwidth yang sangat lebar, akibatnya diperlukan frekunsi carrier yang lebar. Di dunia ini frekuensi adalah salah satu sumber daya yang sangat penting yang tidak dapat diperbaharui dan sangat terbatas, karena hal tersebut maka pemakaian frekuensi carrier harus sekecil atau sehemat dan seefisien mungkin. Agar pemakaian frekuensi hemat dan efisien maka dalam mengirimkan data citra diperlukan kompresi. Kompresi adalah memperkecil ukuran suatu data dimana dengan pengompresian suatu data maka akan menghemat penggunaan frekuensi. Selain itu dengan mengkompresi data maka waktu untuk pengiriman data akan lebih cepat dan lebih aman karena data yang dikompresi akan sulit dikenali. Selain hal tersebut kalau data citra dalam ukuran kecil waktu download-nya juga lebih cepat. Supaya pengiriman dapat dilakukan lebih cepat maka citra tersebut harus diperkecil ukurannya. Banyak cara untuk memperkecil ukuran, salah satunya adalah kompresi citra. Pada tugas akhir ini kompresi citra akan dilakukan dengan menggunakan transformasi wavelet.
1
1.2
Tujuan Penulisan Didalam tugas akhir ini penulis mempunyai tujuan untuk membuat software untuk
mengkompresi citra dengan menggunakan transformasi wavelet.
1.3
Pembatasan Masalah Dalam tugas akhir ini, pembahasan masalah hanya dibatasi dalam metoda
pengkompresian citra menggunakan transformasi wavelet dengan menggunakan perangkat lunak (software) Matlab.
1.4
Sistematika Penulisan Dalam penulisan tugas akhir ini, sistematika penulisan yang digunakan sebagai
berikut:
BAB I
PENDAHULUAN Bab ini memberikan penjelasan mengenai latar belakang, tujuan penulisan, pembatasan masalah, dan sistematika penulisan tugas akhir.
BAB II
TEORI DASAR Bab ini menjelaskan mengenai teori-teori yang digunakan dalam tugas akhir ini, yaitu pengkompresian data menggunakan metoda dari transformasi wavelet.
BAB III
PERANCANGAN KOMPRESI CITRA Bab ini membahas mengenai perancangan kompresi citra menggunakan transformasi wavelet.
BAB IV
ANALISA SISTEM Bab ini membahas perangkat lunak yang digunakan dan kebutuhan program
untuk
mengkompresi citra / image dengan
transformasi
wavelet. BAB V
KESIMPULAN Bab ini merupakan bab penutup di mana akan diberikan kesimpulankesimpulan yang dapat diambil dari pembuatan tugas akhir ini
2
BAB II TEORI DASAR
2.1 Pendahuluan Pemampatan (kompresi) merupakan suatu proses pengubahan lambang masukan ke dalam sandi keluaran yang dikehendaki. Jika penempatan efektif, maka hasil berkas keluarannya akan lebih kecil dari berkas aslinya. Sehingga kompresi adalah suatu teknik yang digunakan untuk memperkecil ukuran berkas masukan sehingga dapat dimuat dalam media penyimpanan. Dengan teknik kompresi diharapkan : 1. Menghemat ruang Penyimpanan, misalnya harddisk. 2. Menghemat waktu akses CPU (Central Processing Unit). Jika menggunakan jaringan komputer, data yang telah dikompresi tidak memerlukan waktu yang banyak untuk dikirimkan sehingga menghemat rentang waktu pengiriman.
2.2 Pengolahan Citra Digital Citra digital dapat didefinisikan sebagai fungsi dua variabel, f(x,y), dimana x dan y adalah koordinat spasial dan nilai f(x,y) adalah intensitas citra pada koordinat tersebut. Teknologi dasar untuk menciptakan dan menampilkan warna pada citra digital berdasarkan pada penelitian bahwa sebuah warna merupakan kombinasi dari tiga warna dasar, yaitu merah, hijau, dan biru (Red, Green, Blue - RGB).
3
Sebuah citra diubah ke bentuk digital agar dapat disimpan dalam memori komputer atau media lain. Proses mengubah citra ke bentuk digital bisa dilakukan dengan beberapa perangkat, misalnya scanner, kamera digital, dan handycam. Ketika sebuah citra sudah diubah ke dalam bentuk digital (selanjutnya disebut citra digital), bermacammacam proses pengolahan citra dapat diperlakukan terhadap citra tersebut.
2.3 Kompresi Citra Kompresi citra bertujuan untuk meminimalkan jumlah bit yang diperlukan untuk merepresentasikan citra. sehingga ukuran citra tersebut menjadi lebih kecil dan waktu pengiriman citra menjadi lebih cepat. Citra yang belum dikompres disebut citra mentah (raw image). Sementara citra hasil kompresi disebut citra terkompresi (compressed image). Kompresi citra dikembangkan untuk memudahkan penyimpanan dan pengiriman citra. Teknik kompresi yang ada sekarang memungkinkan citra dikompresi sehingga ukurannya menjadi jauh lebih kecil daripada ukuran asli. Ada dua tipe utama kompresi data, yaitu kompresi tipe lossless dan kompresi tipe lossy : 1. Metode lossless. Metode lossless selalu menghasilkan citra hasil penirmampatan yang tepat sama dengan citra semula, pixel per pixel. Tidak ada informasi yang hilang akibat pemampatan. Tetapi nisbah (ratio) pemampatan citra metode lossless sangat rendah. Contoh metode lossless adalah metode Huffman. Metode lossless cocok untuk memampatkan citra yang mengandung informasi penting yang tidak boleh rusak akibat pemampatan. Misalnya memampatkan gambar hasil diagnosis medis.
4
2. Metode lossy Metode lossy menghasilkan citra hasil pemampatan yang hampir sama dengan citra semula. Ada informasi yang hilang akibat pemampatan, tetapi dapat ditolerir oleh persepsi mata. Mata tidak dapat membedakan perubahan kecil pada gambar. Metode pemampatan lossy menghasilkan nisbah pemampatan yang tinggi daripada metode lossless. Ada dua proses utama dalam persoalan pemampatan citra : 1. Pemampatan citra (image compression). Pada proses ini, citra dalam representasi tidak mampat dikodekan dengan representasi yang meminimumkan kebutuhan memori. Citra dengan format bitmap pada umumnya tidak dalam bentuk mampat. Citra yang sudah dimampatkan disimpan ke dalam arsip dengan format tertentu. Kita mengenal format JPEG dan GIF sebagai format citra yang sudah dimampatkan.
2. Penirmampatan citra (image decompression). Pada proses ini, citra yang sudah dimampatkan harus dapat dikembalikan lagi (decoding) menjadi representasi yang tidak mampat. Proses ini diperlukan jika citra tersebut ditampilkan ke layer atau disimpan ke dalam arsip dengan format tidak mampat. Dengan kata lain, penirmampatan citra mengembalikan citra yang termampatkan menjadi data bitmap.
Parameter-parameter citra yang penting dalam proses kompresi diantaranya adalah sebagai berikut :
5
2.3.1 Resolusi Resolusi citra menyatakan ukuran panjang kali lebar dari sebuah citra. Resolusi citra biasanya dinyatakan dalam satuan piksel. Semakin tinggi resolusi sebuah citra, semakin baik kualitas citra tersebut. Namun, tingginya resolusi menyebabkan semakin banyaknya jumlah bit yang diperlukan untuk menyimpan dan mentransmisikan data citra tersebut.
2.3.2 Kedalaman Bit Kedalaman bit menyatakan jumlah bit yang diperlukan untuk merepresentasikan tiap piksel citra pada sebuah frame. Kedalaman bit biasanya dinyatakan dalam satuan bit/ piksel. Semakin banyak jumlah bit yang digunakan untuk merepresentasikan sebuah citra, maka semakin baik kualitas citra tersebut.
2.3.3
Konsep Redundansi Redundansi merupakan suatu keadaan dimana representasi suatu elemen data
tidak bernilai signifikan dalam merepresentasikan keseluruhan data. Keadaan ini menyebabkan data keseluruhan dapat direpresentasikan secara lebih kompak dengan cara menghilangkan representasi dari sebuah elemen data yang redundan. Redundansi yang terdapat pada citra statik adalah redundansi spasial. Metode kompresi citra berdasarkan redundansi spasial diantaranya adalah sebagai berikut:
6
2.3.3.1 Subsampling Subsampling merupakan metode kompresi dengan mengurangi jumlah piksel yang diperlukan untuk merepresentasikan suatu citra. Subsampling dapat dilakukan dengan dua cara. Cara pertama adalah mengambil piksel-piksel tertentu dari citra, misal piksel-piksel pada baris dan kolom saja. Cara kedua adalah dengan mengambil rata – rata dari kelompok piksel dan menggunakan nilai tersebut sebagai ganti nilai kelompok piksel ini. Cara ini lebih kompleks, tetapi menghasilkan kualitas yang lebih baik. Subsampling sebanding dengan pengurangan resolusi.
2.3.3.2 Pengurangan Kedalaman Bit Metode ini dilakukan dengan mengurangi jumlah bit yang digunakan untuk merepresentasikan suatu piksel. Misalnya dengan mengurangi kedalaman bit dari 16 bit/ piksel menjadi 8 bit/piksel. Metode ini mengurangi kualitas citra.
2.3.3.3 Transformation Coding Transformation coding merupakan transformasi data dari domain ruang ke domain frekuensi.Cara ini menghasilkan data yang lebih mudah diproses untuk kompresi lebih lanjut. Transformasi yang populer digunakan antara lain Discrete Cosine Transform (DCT) yang diadopsi dalam standar kompresi JPEG dan Discrete Wavelet Transform (DWT) yang digunakan dalam kompresi JPEG 2000. Sekarang ini, kompresi citra yang sering digunakan adalah JPEG. JPEG dikembangkan oleh Joint Photographic Expert Group pada akhir tahun 80an dan kemudian dikenal karena teknik kompresi-nya yang bagus. Kompresi JPEG berdasarkan
7
pada Discrete Cosine Transform. Pada tahun 1997, komite JPEG memutuskan untuk mengembangkan standar baru untuk kompresi citra. Sejak saat itulah JPEG-2000 mulai dikembangkan.
2.4 JPEG-2000 JPEG-2000 merupakan pengkodean citra baru yang dikembangkan oleh ITU (International Telecomunication Union) dan ISO (International Organization for Standardization). JPEG 2000 menawarkan beberapa kelebihan dibandingkan JPEG. Satu kelebihan utama dari JPEG 2000 adalah mendukung kompresi lossless dan lossy pada file yang sama. Beberapa keunggulan JPEG 2000 adalah sebagai berikut : - Mendukung kompresi lossless dan lossy - Memiliki performance yang bagus pada kompresi dengan bit rate rendah - Memiliki kebutuhan memori yang kecil.
2.5 Kriteria Pemampatan citra Saat ini sudah banyak ditemukan metode-metode pemampatan citra. Kriteria yang digunakan dalam mengukur metode pemampatan citra adalah : 1. Waktu pemampatan dan penirmampatan (decompression). Waktu pemampatan citra dan penirmampatannya sebaiknya cepat. 2. Kebutuhan memori. Memori yang dibutuhkan untuk merepresentasikan citra seharusnya berkurang secara berarti. Ada metode yang berhasil memampatkan dengan persentase yang besar, ada pula yang kecil.
8
3. Kualitas pemampatan (fidelity). Informasi yang hilang akibat pemampatan seharusnya seminimal mungkin sehingga kualitas hasil pemampatan tetap dipertahankan. Kualitas sebuah citra bersifat subyektif dan relative, bergantung pada pengamatan orang yang menilainya. 4. Format keluaran Format citra hasil pemampatan sebaiknya cocok untuk pengiriman dan penyimpanan data. Pembacaan citra tergantung pada bagaimana citra tersebut direpresentasikan.
2.6 Jenis Pemampatan Citra Ada empat pendekatan yang digunakan dalam pemampatan citra : 1. Pendekatan Statistik Pemampatan citra didasarkan pada frekuensi kemunculan derajat keabuan pixel di dalam seluruh bagian gambar. Contoh metode : Huffman Coding. 2. Pendekatan ruang Pemampatan citra didasarkan pada hubungan spasial antara pixel-pixel di dalam suatu kelompok yang memiliki derajat keabuan yang sama di dalam suatu daerah di dalam gambar. Contoh metode : Run-Length Encoding. 3. Pendekatan Kuantisasi Pemampatan citra dilakukan dengan mengurangi jumlah derajat keabuan yang tersedia. Contoh metode : metode pemampatan kuantisasi.
9
4. Pendekatan fractal Pemampatan citra didasarkan pada kenyataan bahwa kemiripan bagian-bagian di dalam dapat dieksploitasi dengan suatu matriks transformasi. Contoh metode : Fractal Image Compression.
2.7 Filtering Filtering adalah suatu proses dimana diambil sebagian sinyal dari frekwensi tertentu, dan membuang sinyal pada frekwensi yang lain. Filtering pada citra juga menggunakan prinsip yang sama, yaitu mengambil fungsi citra pada frekwensi-frekwensi tertentu dan membuang fungsi citra pada frekwensi-frekwensi tertentu. Dari sifat-sifat citra pada bidang frekwensi, maka prinsip-prinsip filtering dapat dikembangkan adalah sebagai berikut: (1) Bila ingin mempertahankan gradiasi atau banyaknya level warna pada suatu citra, maka yang dipertahankan adalah frekwensi rendah dan frekwensi tinggi dapat dibuang atau dinamakan dengan Low Pass Filter. Hal ini banyak digunakan untuk reduksi noise dan proses blur. (2) Bila ingin mendapatkan threshold atau citra biner yang menunjukkan bentuk suatu gambar maka frekwensi tinggi dipertahankan dan frekwensi rendah dibuang atau dinamakan dengan High Pass Filter. Hal ini banyak digunakan untuk menentukan garis tepi (edge) atau sketsa dari citra. (3) Bila ingin mempertahankan gradiasi dan bentuk, dengan tetap mengurangi banyaknya bidang frekwensi (bandwidth) dan membuang sinyal yang tidak perlu maka frekwensi rendah dan frekwensi tinggi dipertahankan, sedangkan frekwensi
10
tengahan dibuang atau dinamakan dengan Band Stop Filter. Teknik yang dikembangkan dengan menggunakan Wavelet Transform yang banyak digunakan untuk kompresi, restorasi dan denoising.
2.7.1 Low Pass Filter Low pass filter adalah proses filter yang mengambil citra dengan gradiasi intensitas yang halus dan perbedaan intensitas yang tinggi akan dikurangi atau dibuang. Ciri-ciri dari fungsi low-pass filter adalah sebagai berikut:
∑∑ H (i, j ) = 1 j
i
Gambar 2.1 Hasil LPF untuk gambar kucing dan komputer
Dari kedua hasil di atas dapat dilihat bahwa Low Pass Filter menyebabkan gambar menjadi lebih halus dan lebih blur.
11
2.7.2 High Pass Filter High pass filter adalah proses filter yang mengambil citra dengan gradiasi intensitas yang tinggi dan perbedaan intensitas yang rendah akan dikurangi atau dibuang. Ciri-ciri dari fungsi low-pass filter adalah sebagai berikut :
∑∑ H (i, j ) = 0 j
i
Gambar 2.2 Hasil HPF untuk gambar kucing dan komputer Dari kedua hasil di atas dapat dilihat bahwa High Pass Filter menyebabkan gambar hanya diambil atau ditampilkan pada daerah-daerah yang berbeda misalkan pada tepi-tepi gambar. Pada gambar kucing perbedaan yang muncul tidak begitu jelas karena gambarnya mempunyai gradiasi yang tinggi (halus), sedangkan pada gambar komputer tepi-tepi gambar tampak jelas karena perbedaannya tinggi.
2.8 Pengukuran error kompresi citra Dalam kompresi image terdapat suatu standar pengukuran error kompresi yaitu MSE (Mean Square Error) dan PSNR (Peak Signal to Noise Ratio) : - MSE (Mean Square Error), yaitu sigma dari jumlah error antara citra hasil kompresi dan citra asli.
MSE =
1 MN
M
N
∑∑[ I ( x, y) − I '( x, y)]
2
y =1 x =1
12
Dimana: I(x,y) adalah nilai pixel di citra asli I’(x,y) adalah nilai pixel pada citra hasil kompresi M,N adalah dimensi image
- Peak Signal to Noise Ratio (PSNR), yaitu untuk menghitung peak error. 255 PSNR = 20 * log MSE
Nilai MSE yang rendah akan lebih baik, sedangkan nilai PSNR yang tinggi akan lebih baik.
2.9 Matlab
Matlab adalah sebuah bahasa (pemrograman) dengan unjuk kerja tinggi (highperformance) untuk komputasi teknis, yang mengintegrasikan komputasi, visualisasi, dan pemrograman di dalam lingkungan yang mudah penggunaannya dalam memecahkan persoalan dengan solusinya yang dinyatakan dengan notasi matematik. Penggunaan MATLAB, yaitu : · Matematika dan komputasi · Pengembangan algoritma · Pemodelan, simulasi dan pembuatan ‘prototipe’ · Analisis data, eksplorasi dan visualisasi · Grafik untuk sains dan teknik · Pengembangan aplikasi, termasuk pembuatan antarmuka grafis untuk pengguna (Graphical User Interface)
13
Tampilan Matlab secara umum dapat dilihat di gambar 2.3 :
Gambar 2.3 Tampilan Umum Matlab
MATLAB adalah sebuah sistem interaktif yang menggunakan elemen data dasarnya adalah array yang tidak membutuhkan dimensi. Hal ini mempermudah untuk menyelesaikan masalah komputasi, terutama yang menyangkut matriks dan vektor.
Nama Matlab merupakan singkatan dari ‘matrix laboratory’. Fitur – fitur MATLAB untuk penyelesaian spesifik disebut ‘toolboxes’. ‘Toolboxes’ adalah koleksi komprehensif dari fungsi – fungsi MATLAB (M-files) yang memperlebar lingkungan MATLAB dalam menyelesaikan kelas – kelas tertentu dari permasalahan. Beberapa
14
‘toolbox’ yang tersedia meliputi bidang : pengolahan sinyal, sistem kendali, jaringan syaraf (neural network), logika ‘fuzzy’, wavelet, simulasi dan lain sebagainya.
15
BAB III PERANCANGAN KOMPRESI CITRA Pada bab ini akan dijelaskan yang berhubungan tentang Transformasi Wavelet, Proses dekomposisi, Proses Rekonstruksi.
3.1 Transformasi Wavelet
Teori wavelet adalah suatu konsep yang relatif baru dikembangkan. Kata “Wavelet” sendiri diberikan oleh Jean Morlet dan Alex Grossmann diawal tahun 1980an, dan berasal dari bahasa Prancis, “ondelette” yang berarti gelombang kecil. Kata “onde” yang berarti gelombang kemudian diterjemahkan ke bahasa Inggris menjadi “wave”, lalu digabung dengan kata aslinya sehingga terbentuk kata baru “wavelet”. Transformasi wavelet dibagi menjadi dua bagian besar, yaitu transformasi wavelet kontinu (TWK) dan transformasi wavelet diskrit (TWD). 3.1.1 Perbandingan dengan Transformasi Fourier
Sampai sekarang transformasi Fourier mungkin masih menjadi transformasi yang paling populer di area proses sinyal digital (PSD). Transformasi Fourier memberitahu kita informasi frekuensi dari sebuah sinyal, tapi tidak informasi waktu (kita tidak dapat tahu di mana frekuensi itu terjadi). Karena itulah transformasi Fourier hanya cocok untuk sinyal stationari (sinyal yang informasi frekuensinya tidak berubah menurut waktu). Untuk menganalisa sinyal yang frekuensinya bervariasi di dalam waktu, diperlukan suatu transformasi yang dapat memberikan resolusi frekuensi dan waktu disaat yang bersamaan, biasa disebut analisis multi resolusi (AMR). AMR dirancang untuk memberikan resolusi waktu yang baik dan resolusi frekuensi yang buruk pada frekuensi tinggi suatu sinyal, serta resolusi frekuensi yang baik dan resolusi waktu yang buruk pada frekuensi rendah suatu sinyal. Pendekatan ini sangat berguna untuk menganalisa sinyal dalam aplikasi-aplikasi praktis yang memang memiliki lebih banyak frekuensi rendah.
16
Transformasi wavelet adalah suatu AMR yang dapat merepresentasikan informasi waktu dan frekuensi suatu sinyal dengan baik. Transformasi wavelet menggunakan sebuah jendela modulasi yang fleksibel, ini yang paling membedakannya dengan transformasi Fourier waktu-singkat (STFT), yang merupakan pengembangan dari transformasi Fourier. STFT menggunakan jendela modulasi yang besarnya tetap, ini menyebabkan dilema karena jendela yang sempit akan memberikan resolusi frekuensi yang buruk dan sebaliknya jendela yang lebar akan menyebabkan resolusi waktu yang buruk. 3.1.2 Transformasi Wavelet Kontinu
Cara kerja transformasi wavelet kontinu (TWK) adalah dengan menghitung konvolusi sebuah sinyal dengan sebuah jendela modulasi pada setiap waktu dengan setiap skala yang diinginkan. Jendela modulasi yang mempunyai skala fleksibel inilah yang biasa disebut induk wavelet atau fungsi dasar wavelet. Dalam transformasi wavelet digunakan istilah translasi dan skala, karena istilah waktu dan frekuensi sudah digunakan oleh transformasi Fourier. Translasi adalah lokasi jendela modulasi saat digeser sepanjang sinyal, berhubungan dengan informasi waktu. Skala behubungan dengan frekuensi, skala tinggi (frekuensi rendah) berhubungan dengan informasi global dari sebuah sinyal, sedangkan skala rendah (frekuensi tinggi) berhubungan dengan informasi detil. 3.1.3 Transformasi Wavelet Diskrit
Dibandingkan dengan TWK, transformasi wavelet diskrit (TWD) dianggap relatif lebih mudah pengimplementasiannya. Prinsip dasar dari TWD adalah bagaimana cara mendapatkan representasi waktu dan skala dari sebuah sinyal menggunakan teknik pemfilteran digital dan operasi sub-sampling. Transformasi wavelet diskrit secara umum merupakan dekomposisi citra pada frekuensi subband citra tersebut. Komponen subband transformasi wavelet dihasilkan dengan cara penurunan level dekomposisi. Implementasi transformasi wavelet diskrit
17
dapat dilakukan dengan cara melewatkan sinyal melalui sebuah tapis lolos rendah (low pass filter/LPF) dan tapis lolos tinggi (high pass filter/HPF) dan melakukan downsampling pada keluaran masing masing filter. Pada transformasi wavelet, dilakukan penyaringan data menjadi low pass dan high pass. Low pass merepresentasikan bagian penting dari data dalam resolusi yang rendah, sedangkan high pass menyatakan detail dari data yang ditransformasikan. Pada JPEG2000, dilakukan DWT dua dimensi, yaitu DWT terhadap baris (horizontal), dan terhadap kolom (vertikal). Suatu tahapan DWT dua dimensi akan menghasilkan empat buah kuadran, yaitu: LL: sub-kelompok low dari hasil transformasi pada baris dan kolom. HL: sub-kelompok high dari hasil transformasi pada baris, dan sub-kelompok low dari transformasi kolomnya. LH: sub-kelompok low dari hasil transformasi pada baris, dan sub-kelompok high dari transformasi kolomnya. HH: sub-kelompok high dari hasil transformasi baris dan kolom.
Gambar 3.1 Pengelompokkan dalam DWT 3.2 Proses Dekomposisi
Proses ini sama artinya dengan pengalih ragaman wavelet 2 dimensi atas suatu citra. Dekomposisi dapat dilakukan berulang kali pada setiap subbidang citra. Pada subbagian ini akan diillustrasikan secara implementatif dekomposisi citra Lenna. Gambar 3.1 merupakan dekomposisi citra asli satu kali. Label yang diberikan pada setiap subbidang citra merupakan urutan penggunaan tapis pada tiap baris dan kolom secara bertahap. Misalnya subbidang citra dengan label LH menyatakan penerapan tapis 18
lowpass L pada baris dan penggunaan tapis highpass H pada kolom citra asli. Demikian juga dengan subbidang citra dengan label HL. Ini menunjukkan bahwa tapis highpass H dan tapis lowpass L dipakai untuk mengkonvolusi baris dan kolom citra asli berturutturut
Gambar 3.2. Subbidang Citra Dekomposisi Satu Kali Menggunakan db4 3.3 Proses Kuantisasi
Jika Gambar 3.2 diperhatikan, akan terlihat jelas wama hitam mendominasi subbidang citra LH, HL dan HH. Dalam citra skala abu-abu, wama hitam berkaitan dengan nilai yang mendekati atau sama dengan nol sedangkan warna putih berkaitan dengan nilai yang mendekati atau sama dengan nilai tertinggi (255). Perlu diketahui bahwa dalam pengolahan citra digital, koefisien-koefisien subbidang citra yang bemilai negatif akan diabsolutkan dan koefisien-koefisien yang bernilai di atas 255 akan bemilai tetap 255. Dengan pendekatan ini dapat ditarik pemyataan bahwa koefisien-koefisien pada subbidang citra LH, HL dan HH didominasi dengan nilai-nilai yang hampir atau sama dengan nol. Berikut ini adalah penggalan koefisien-koefisien subbidang citra LH dan hasil kuantisasinya untuk memperkuat pernyataan diatas.
19
Gambar 3.3. Penggalan Koefisien-Koefisien Bidang LL
Gambar 3.4. Penggalan Koefisien-Koefisien Bidang LL Terkuantisasi 4
3.4 Proses Rekonstruksi
Rekonstruksi merupakan proses kebalikan dari dekomposisi. Rekonstruksi melibatkan operator upsampling dan konvolusi. Kolom dan baris citra terkuantisasi di upsampling dan dikonvolusi secara bertahap. Jika kedalaman dekomposisi dua, maka dapat diberikan pernyataan dan tahapan-tahapan dalam merekonstruksi suatu citra sebagai berikut :
Masing-masing kolom dan baris dari subbidang citra LLLL, LLLH, LLHL dan LLHH
terkuantisasi diupsampling dan dikonvolusi secara bergantian untuk menghasilkan subbidang citra LL.
20
Masing-masing kolom dan baris dari subbidang citra LHLL, LHLH, LHHL dan
LHHH terkuantisasi diupsampling dan dikonvolusi secara bergantian untuk menghasilkan subbidang citra LH.
Masing-masing kolom dan baris dari subbidang citra HLLL, HLLH, HLHL dan
HLHH terkuantisasi diupsampling dan dikonvolusi secara bergantian untuk menghasilkan subbidang citra HL.
Masing-masing kolom dan baris dari subbidang citra HHLL, HHLH, HHHL dan
HHHH
terkuantisasi
diupsampling
dan
dikonvolusi
secara
bergantian
untuk
menghasilkan subbidang citra HH.
Masing-masing kolom dan baris dari subbidang citra LL, LH, HL dan HH
terkuantisasi diupsampling dan dikonvolusi secara bergantian untuk menghasilkan subbidang citra terekonstruksi.
Ilustrasi rekonstruksi subbidang citra LL dari subbidang citra LLLL, LLLH, LLHL dan LLHH terkuantisasi dengan threshold 20 dapat disajikan di bawah ini.
Gambar 3.5. Rekonstruksi Subbidang Citra LL Dari Subbidang Citra LLLL, LLLH,
LLHL dan LLHH Terkuantisasi Dengan Threshold 20
21
3.5 Irreversible Component Transformation (ICT)
Irreversible
Component
Transformation
(ICT)
merupakan
transformasi
komponen untuk tipe kompresi lossy. Sedangkan pada kompresi lossless, transformasi yang dilakukan disebut dengan Reversible Component Transformation (RCT). Dalam ICT ini, akan dilakukan transformasi dari format RCB menjadi Luminance (Y), dan Chrominnce (Cr dan Cb).
Berikut ini adalah program dalam Matlab Untuk Haar Scaling function dan Haar Wavelet Function :
[Lo_D, Hi_D, Lo_R, Hi_R] = wfilters('haar')
Lo_D =
0.7071 0.7071
Hi_D =
-0.7071 0.7071
Lo_R =
0.7071 0.7071
Hi_R =
0.7071 -0.7071
22
>> waveinfo('haar');
HAARINFO Information on Haar wavelet.
Haar Wavelet
General characteristics: Compactly supported wavelet, the oldest and the simplest wavelet.
scaling function phi = 1 on [0 1] and 0 otherwise. wavelet function psi = 1 on [0 0.5[, = -1 on [0.5 1] and 0 otherwise.
Family
Haar
Short name
haar
Examples
haar is the same as db1
Orthogonal
yes
Biorthogonal
yes
Compact support
yes
DWT
possible
CWT
possible
Support width
1
Filters length
2
Regularity
haar is not continuous
Symmetry
yes
Number of vanishing moments for psi
1
23
Reference: I. Daubechies, Ten lectures on wavelets, CBMS, SIAM, 61, 1994, 194-202.
>> [phi, psi,xval] = wavefun('haar',10); >> xaxis = zeros(size(xval)); >> subplot(121); plot(xval, phi, 'k', xval, xaxis, '--k'); >> axis([0 1 -1.5 1.5]); axis square; >> title('Haar Scaling Function'); >> subplot(122); plot(xval, psi, 'k', xval, xaxis, '--k'); >> axis([0 1 -1.5 1.5]); axis square; >> title('Haar Wavelet Function');
Gambar 3.6. Gambar Haar Scaling function dan Haar Wavelet Function
24
3.6 Flow Chart Diagram Sistem
Pada
Diagram Flow Chart ini akan dijelaskan bagaimana Proses Citra asli
dikompresi sehingga menjadi citra yang terkompres. Pertama – tama yang harus dilakukan adalah membuka Program Matlab, kemudian mengambil citra yang ingin diproses dari data yang tersimpan dalam memori komputer dan menampilkannya dalam Figure Matlab. Lalu setelah citra ditampilkan dalam Matlab maka akan diproses menggunakan proses rgb2yuv. Pada Proses rgb2yuv, citra yang terdiri dari warna rgb ditransformasikan dalam bentuk YUV dimana Y adalah luminance (Brightness), U adalah Chrominance (Cblue) dan V adalah Chrominance (Cred). Dalam hal ini hanya Y saja yang diproses sedangkan U dan V disimpan untuk nantinya akan digabungkan kembali pada proses yuv2rgb. Hal ini dimaksudkan untuk memudahkan kompresi. Proses selanjutnya adalah DWT (Discreate Wavelet Transform). dwt akan mencari frekuensi nilai pixel masing-masing, menggabungkannya menjadi satu dan mengelompokkannya sebagai berikut: Dimana LL : Low Low Frequency (most importance) HL : High Low Frequency (lesser importance) LH : Low High Frequency (more lesser importance) HH : High High Frequency (most less importance). Proses selanjutnya adalah Kuantisasi dimana pixel akan dikodekan yang diambil dari proses dwt. Kemudian setelah dikodekan dengan proses kuantisasi maka dilakukan proses yuv2rgb dimana Proses ini akan menggabungkan U dan V yang tadi disimpan dengan Y yang telah diproses dengan dwt dan kuantisasi. Maka akan didapat Citra yang terkompresi.
25
START
Implementasi MATLAB
Ambil data Image
Proses Kompresi dari Data Image
Hasil Image setelah Dikompresi
END
Gambar 3.7 Flow Chart Proses Kompresi
26
BAB IV
ANALISA
Pada bab ini akan membahas tentang dekomposisi level 1 sampai dekomposisi level 3. Langkah-langkah proses kompresi citra dan apa saja yang diperlukan pada proses kompresi citra. Proses kompresi citra ini meliputi : proses rgb2yuv, proses DWT, proses kuantisasi dan proses yuv2rgb.
4.1 Analisa Proses Dekomposisi
Dekomposisi dapat dilakukan berulang kali pada setiap subbidang citra. Pada subbagian ini akan diillustrasikan secara dekomposisi citra Lena dari level 1 sampai level 3.
Gambar 4.1. Citra Lena dalam Gambar Monokrom (hitam Putih)
27
Gambar 4.2. Citra Lena dengan Dekomposisi Level satu
28
Gambar 4.3. Citra Lena dengan Dekomposisi Level dua
29
Gambar 4.4. Citra Lena dengan Dekomposisi Level tiga
4.2 Analisa Perbandingan Jenis – jenis Wavelet
Dalam hal ini akan ditampilkan hasil gambar rekonstruksi (kanan bagian bawah) setelah proses dekomposisi level 3 pada citra Lena Monokrom. Berikut adalah Tampilan Matlab dalam Jenis – jenis Wavelet yang digunakan ( Haar, db2, db4, sym2, sym4, coif2,coif4 )
30
Gambar 4.5. Tampilan Matlab dalam Jenis – jenis Wavelet
Gambar 4.6. Citra Lena pada dekomposisi level 3 dengan Wavelet Haar
31
Gambar 4.7. Citra Lena pada dekomposisi level 3 dengan Wavelet Daubechies 2
Gambar 4.8. Citra Lena pada dekomposisi level 3 dengan Wavelet Daubechies 4
32
Gambar 4.9. Citra Lena pada dekomposisi level 3 dengan Wavelet Symlets 2
Gambar 4.10. Citra Lena pada dekomposisi level 3 dengan Wavelet Symlets 4
33
Gambar 4.11. Citra Lena pada dekomposisi level 3 dengan Wavelet Coiflets 2
Gambar 4.12. Citra Lena pada dekomposisi level 3 dengan Wavelet Coiflets 4
34
4.3 Analisa Wavelet dalam Citra Lena
Adapun langkah – langkah dalam analisa ini terdiri dari proses rgb2yuv, dwt, kuantisasi, dan proses yuv2rgb :
Gambar 4.13. Citra Lena dalam Gambar Berwarna
4.3.1 Proses rgb2yuv
Pada Proses rgb2yuv, citra lena yang terdiri dari warna rgb di transformasikan dalam bentuk yuv dimana y adalah luminance (Brightness), u adalah Chrominance (Cblue) dan v adalah Chrominance (Cred). Dalam hal ini hanya y saja yang diproses sedangkan u dan v disimpan untuk nantinya akan digabungkan kembali setelah proses dwt. Hal ini dimaksudkan untuk memudahkan kompresi.
Langkah – langkah Proses rgb2yuv pada Matlab : case 'rgb2yuv' [M,N,c]=size(citra_asli);
35
if c==1 yuv = citra_asli; else R=citra_asli(:,:,1); G=citra_asli(:,:,2); B=citra_asli(:,:,3); [Y,U,V]=rgb2yuv(R,G,B); subplot(221), imshow(citra_asli); subplot(222), imshow(Y); subplot(223), imshow(U); subplot(224), imshow(V); yuv(:,:,1)=Y; yuv(:,:,2)=U; yuv(:,:,3)=V;
end
36
Gambar 4.14 Citra Lena dengan Proses rgb2yuv
4.3.2 Proses dwt
Langkah - langkah Proses dwt pada Matlab :
case 'dwt'
[citra_dwt,Yi,data,ukuran]=wav_decomp(yuv(:,:,1),lev_dek,wname);
Yr=wav_rec(citra_dwt,ukuran,lev_dek,wname);
Y=Yr; U=yuv(:,:,2); V=yuv(:,:,3); rgb=yuv2rgb(Y,U,V,'YUV444_8');
37
ukuran gcf; axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); axes(axes1);
subplot(221); imshow(citra_asli); % Yf=fft2(yuv(:,:,1)); % YF=Yf/max(max(Yf))*255; subplot(222); imshow(Yr,[]); subplot(223); % max(max(YF)) imshow(Yi,[]); subplot(224); imshow(uint8(rgb),[]); axes(axes1);
subplot(221); imshow(citra_asli); % Yf=fft2(yuv(:,:,1)); % YF=Yf/max(max(Yf))*255; subplot(222); imshow(Yr,[]); subplot(223); % max(max(YF)) imshow(Yi,[]); subplot(224);
38
imshow(uint8(rgb),[]);
Gambar 4.15. Citra Lena dengan Proses dwt
4.3.3 Proses Kuantisasi
Langkah – langkah Proses Kuantisasi pada Matlab :
case 'kuantisasi' subplot(221);cla; subplot(222);cla; subplot(223);cla; subplot(224);cla;
%citra_dwt [M,N]=size(citra_dwt); for i=1:lev_dek,
39
delta = dwt_quantize(i); if i==1, P = ukuran(i,1); L = ukuran(i,2); for j=1:M, for k=1:N, if (j>P || k>L) c_dwt_q(j,k) = sign(citra_dwt(j,k)).*abs(citra_dwt(j,k))./delta; else end end end else P = ukuran(i-1,1); L = ukuran(i-1,2); for j=1:P, for k=1:L, c_dwt_q(j,k) = sign(citra_dwt(j,k)).*abs(citra_dwt(j,k))./delta; end end end end
40
Gambar 4.16. Citra Lena dengan proses kuantisasi
4.3.4 Proses yuv2rgb
Setelah Proses ini maka U dan V dikembalikan lagi dengan Program di bawah ini maka akan didapat Gambar Terkompresi :
case 'yuv2rgb' figure, Y=yuv(:,:,1); U=yuv(:,:,2); V=yuv(:,:,3);
rgb=yuv2rgb(Y,U,V,'YUV444_8','BT709_l'); imshow(rgb);
41
case 'rgb2yuv' figure, % Y diambil dari proses IDWT rgb=yuv2rgb(Y,U,V,'YUV444_8','BT709_l');
Gambar 4.17. Citra Lena asli 256 kB ( Kanan ) dan Citra Terkompresi 192 kB ( Kiri )
menggunakan Wavelet Haar Dengan dekomposisi Level 2
42
Gambar 4.18. Citra Lena asli 256 kB ( Kiri ) dan Citra Terkompresi 128 kB ( Kanan )
menggunakan Wavelet Haar Dengan dekomposisi Level 3
43
BAB V KESIMPULAN Dari pembahasan yang telah diuraikan diatas dan dari analisa yang sudah dilakukan, maka didapat suatu kesimpulan : 1. Pada citra Lena dalam bentuk Citra Monokrom ( Citra hitam putih ) dilakukan dekomposisi dari level 1 sampai level 3. Didapatkan hasil kompresi lebih baik dengan menggunakan Wavelet Haar dibandingkan dengan menggunakan Wavelet yang lainnya ( Daubechies 2 (db2), Daubechies 4 (db4), Symlets 2 (sym2),
Symlets 4 (sym4), Coiflets 2 (coif2), Coiflets 4 (coif4). 2. Pada citra Lena Berwarna pada ukuran 256 kB dikompresi menjadi 192 kB. Hasil kompresi nya dapat sedikit lebih baik dengan memori yang lebih kecil. Tetapi pada ukuran 128 kB hasil kompresi gambarnya kurang begitu baik.
44
DAFTAR PUSTAKA
1. Munir, Rinaldi. 2004. Pengolahan Citra Digital dengan Pendekatan Algoritmik. Penerbit Informatika, Bandung 2. Wijaya, Marvin & Agus Prijono. 2007. Pengolahan Citra Digital Menggunakan Matlab Image Processing Toolbox. Penerbit Informatika, Bandung 3. http://www.mathtools.net /MATLAB/Image_Processing 4. http://fajri.freebsd.or.id/tugas_akhir/bab2.pdf Dari mesin pencari www.google.com 5. http://lecturer.ukdw.ac.id/anton/download/multimedia7.pdf Dari mesin pencari www.google.com
45
LAMPIRAN A Listing Program Citra Monokrom dan Level Dekomposisi Dengan Matlab
function allaboutdsp(action) global b c citra_asli citra_dwt totalFrames statusAxHndl pmedia fmedia pwater fwater hbtnsound file_input path htitle hpop1 hlabel hlabel2 hpop2 hlevel hlvldek lev_dek data tipe_wav hbtnopen hbtn haxes1 haxes2 hlist hdwt hidwt hinsert hedpswd hedit1 hscale wname hmenu watermark; if nargin<1, action='start'; end; switch(action) case 'start' clf % initial btnleft=0.76; btnbot=0.1; btnwidth=0.21; btnheight=0.05; set(gcf,... 'Name','SISTEM KOMPRESI CITRA JPEG2000',... 'NumberTitle','off',... 'MenuBar','none',... 'Color',[0.8313725490196078 0.8156862745098039 0.7843137254901961],... 'Units','normalized'); b = uimenu('Parent',gcf, ... 'Label','File', ... 'Tag','Helpuimenu1'); c = uimenu('Parent',b, ... 'Callback','kompresi_citra(''baca_citra'')', ... 'Label','Buka File', ... 'Tag','Buka'); c = uimenu('Parent',b, ... 'Callback','kompresi_citra(''tampilkan'')', ... 'Label','Tampilkan Citra', ... 'Tag','tampil'); c = uimenu('Parent',b, ... 'Callback','close', ... 'Label','Keluar', ... 'Tag','keluar');
b = uimenu('Parent',gcf, ... 'Label','Manipulasi', ... 'Tag','&Menu1'); c = uimenu('Parent',b, ... 'Label','Kompresi JPEG', ... 'Callback','kompresi_citra(''JPEG'')',... 'Tag','editprogram'); c = uimenu('Parent',b, ... 'Label','Kompresi JPEG2000', ... 'Callback','kompresi_citra(''JPEG2000'')',... 'Tag','editprogram'); c = uimenu('Parent',b, ... 'Label','Properti', ... 'Callback','kompresi_citra(''properti'')',... 'Tag','editprogram'); b = uimenu('Parent',gcf, ... 'Label','Edit', ... 'Tag','&Menu1'); c = uimenu('Parent',b, ... 'Label','Edit Program', ... 'Callback','edit(''kompresi_citra.m'')',... 'Tag','editprogram'); b = uimenu('Parent',gcf, ... 'Label','Help', ... 'Tag','help'); c = uimenu('Parent',b, ... 'Callback','kompresi_citra(''aboutus'')', ... 'Label','Tentang Kami', ... 'Tag','aboutus'); hlabel=uicontrol('Parent',gcf,... 'Style','Text',... 'BackgroundColor',[0.8313725490196078 0.8156862745098039 0.7843137254901961],... 'Units','normalized',... 'Position',[0.9 0.9 0.15 0.05],... 'Visible','Off',... 'HorizontalAlignment','left',... 'String','Wavelet'); hpop2=uicontrol('Parent',gcf,... 'Style','Popupmenu',... 'Units','normalized',... 'Visible','Off',... 'Position',[0.9 0.83 0.09 0.05],... 'Value',1,... 'String','Haar |db2 |db4 |sym2 |sym4 |coif2 |coif4');
hlabel2=uicontrol('Parent',gcf,... 'Style','Text',... 'BackgroundColor',[0.8313725490196078 0.8156862745098039 0.7843137254901961],... 'Units','normalized',... 'Position',[0.9 0.76 0.15 0.05],... 'Visible','Off',... 'HorizontalAlignment','left',... 'String','Level'); hlvldek=uicontrol('Parent',gcf,... 'Style','Edit',... 'Units','normalized',... 'Visible','Off',... 'Position',[.9 .69 .09 .05],... 'String',1); hbtn=uicontrol('Parent',gcf,... 'Style','Pushbutton',... 'Units','normalized',... 'Visible','Off',... 'BackgroundColor',[0.8313725490196078 0.8156862745098039 0.7843137254901961],... 'Position',[0.9 0.62 0.09 0.05],... 'Fontname','Wingdings',... 'Callback','kompresi_citra(''simpan'')',... 'TooltipString','Klik disini untuk Menyimpan Setting Properti',... 'String','4'); %tombol watermark axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); y=imread('kde3blue.jpg'); %y=imread('default_gears.jpg'); axes(axes1) imagesc(y), axis off; case 'baca_citra' [filename, pathname]=uigetfile('*.bmp', 'Buka File Gambar'); if isequal(filename,0)|isequal(pathname,0) disp('File not found') else letakfile=strcat(pathname,filename); disp(letakfile);
[citra_asli,map]=imread(letakfile); size(citra_asli) citra_asli(1:8,1:8,:) imshow(citra_asli); end set(hlabel,'Visible','Off'); set(hpop2,'Visible','Off'); set(hbtn,'Visible','Off'); case 'tampilkan' imshow(citra_asli); case 'properti' cla; set(hlabel,'Visible','On'); set(hpop2,'Visible','On'); set(hbtn,'Visible','On'); set(hlvldek,'Visible','On'); set(hlabel2,'Visible','On'); case 'simpan' modes=get(hpop2,'Value'); if modes==1, wname='Haar' elseif modes==2, wname='db2' elseif modes==3, wname='db4' elseif modes==4, wname='sym2' elseif modes==5, wname='sym4' elseif modes==6, wname='coif2' else wname='coif4' end lev_dek=str2num(get(hlvldek,'string')) set(hlabel,'Visible','Off'); set(hpop2,'Visible','Off'); set(hbtn,'Visible','Off'); set(hlvldek,'Visible','Off'); set(hlabel2,'Visible','Off'); case 'JPEG'
% Proses DCT case 'JPEG2000' % Proses DWT [M,N,c]=size(citra_asli)
if c==1 % monochrom [citra_dwt,Yi,data,ukuran]=wav_decomp(citra_asli,lev_dek,wname);
Yr=wav_rec(citra_dwt,ukuran,lev_dek,wname);
else % berwarna R=citra_asli(:,:,1); G=citra_asli(:,:,2); B=citra_asli(:,:,3);
end
gcf; axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); axes(axes1); subplot(221); imshow(citra_asli); Yf=fft2(citra_asli); YF=Yf/max(max(Yf))*255; subplot(222); imshow(abs(YF)); subplot(223); max(max(YF)) imshow(Yi,[]); subplot(224);
imshow(uint8(Yr),[]); % citra_asli(1:8,1:8,:) % Yr(1:8,1:8,:) case 'dwt_transform' case 'aboutus' % me=textread('aboutme.txt','%s','delimiter','\n','whitespace',''); % set(haxes1,'Visible','Off'); % set(hlist,'Visible','On','String',char(me')); % y=imread('Elin_Smile.jpg'); % axes(haxes2) % imshow(y),title('Smile, You are on Candit Camera.');
case 'close' close; end
LAMPIRAN B Listing Program Kompresi Citra Lena Dengan Matlab
function allaboutdsp(action) global b c citra_asli citra_dwt c_dwt_q c_dwt_deq Yr Yi data ukuran yuv totalFrames statusAxHndl pmedia fmedia pwater fwater hbtnsound file_input path htitle hpop1 hlabel hlabel2 hpop2 hlevel hlvldek lev_dek data tipe_wav hbtnopen hbtn haxes1 haxes2 hlist hdwt hidwt hinsert hedpswd hedit1 hscale wname hmenu watermark; if nargin<1, action='start'; end; switch(action) case 'start' clf % initial btnleft=0.76; btnbot=0.1; btnwidth=0.21; btnheight=0.05; set(gcf,... 'Name','SISTEM KOMPRESI CITRA JPEG2000',... 'NumberTitle','off',... 'MenuBar','none',... 'Color',[0.8313725490196078 0.8156862745098039 0.7843137254901961],... 'Units','normalized'); b = uimenu('Parent',gcf, ... 'Label','File', ... 'Tag','Helpuimenu1'); c = uimenu('Parent',b, ... 'Callback','kompresi_citra(''baca_citra'')', ... 'Label','Buka File', ... 'Tag','Buka'); c = uimenu('Parent',b, ... 'Callback','kompresi_citra(''tampilkan'')', ... 'Label','Tampilkan Citra', ... 'Tag','tampil'); c = uimenu('Parent',b, ... 'Callback','close', ... 'Label','Keluar', ... 'Tag','keluar');
b = uimenu('Parent',gcf, ... 'Label','Proses', ... 'Tag','&Menu1'); c = uimenu('Parent',b, ... 'Label','Encoder', ... 'Tag','editprogram'); d = uimenu('Parent',c, ... 'Label','RGB 2 YUV', ... 'Callback','kompresi_citra(''rgb2yuv'')',... 'Tag','editprogram'); d = uimenu('Parent',c, ... 'Label','DWT', ... 'Callback','kompresi_citra(''dwt'')',... 'Tag','editprogram'); d = uimenu('Parent',c, ... 'Label','Quantisasi', ... 'Callback','kompresi_citra(''kuantisasi'')',... 'Tag','editprogram'); d = uimenu('Parent',c, ... 'Label','Entropy Coding', ... 'Callback','kompresi_citra(''entropy'')',... 'Tag','editprogram'); c = uimenu('Parent',b, ... 'Label','Decoder', ... 'Tag','editprogram'); d = uimenu('Parent',c, ... 'Label','Decoding Entropy', ... 'Callback','kompresi_citra(''de_entropy'')',... 'Tag','editprogram'); d = uimenu('Parent',c, ... 'Label','Dekuantisasi', ... 'Callback','kompresi_citra(''dekuantisasi'')',... 'Tag','editprogram'); d = uimenu('Parent',c, ... 'Label','IDWT', ... 'Callback','kompresi_citra(''idwt'')',... 'Tag','editprogram'); d = uimenu('Parent',c, ... 'Label','YUV 2 RGB', ... 'Callback','kompresi_citra(''yuv2rgb'')',... 'Tag','editprogram'); c = uimenu('Parent',b, ... 'Label','Properti', ... 'Callback','kompresi_citra(''properti'')',... 'Tag','editprogram'); b = uimenu('Parent',gcf, ...
'Label','Edit', ... 'Tag','&Menu1'); c = uimenu('Parent',b, ... 'Label','Edit Program', ... 'Callback','edit(''kompresi_citra.m'')',... 'Tag','editprogram'); b = uimenu('Parent',gcf, ... 'Label','Help', ... 'Tag','help'); c = uimenu('Parent',b, ... 'Callback','kompresi_citra(''aboutus'')', ... 'Label','Tentang Kami', ... 'Tag','aboutus'); hlabel=uicontrol('Parent',gcf,... 'Style','Text',... 'BackgroundColor',[0.8313725490196078 0.8156862745098039 0.7843137254901961],... 'Units','normalized',... 'Position',[0.9 0.9 0.15 0.05],... 'Visible','Off',... 'HorizontalAlignment','left',... 'String','Wavelet'); hpop2=uicontrol('Parent',gcf,... 'Style','Popupmenu',... 'Units','normalized',... 'Visible','Off',... 'Position',[0.9 0.83 0.09 0.05],... 'Value',1,... 'String','Haar |db2 |db4 |sym2 |sym4 |coif2 |coif4'); hlabel2=uicontrol('Parent',gcf,... 'Style','Text',... 'BackgroundColor',[0.8313725490196078 0.8156862745098039 0.7843137254901961],... 'Units','normalized',... 'Position',[0.9 0.76 0.15 0.05],... 'Visible','Off',... 'HorizontalAlignment','left',... 'String','Level'); hlvldek=uicontrol('Parent',gcf,... 'Style','Edit',... 'Units','normalized',... 'Visible','Off',... 'Position',[.9 .69 .09 .05],... 'String',1); hbtn=uicontrol('Parent',gcf,...
'Style','Pushbutton',... 'Units','normalized',... 'Visible','Off',... 'BackgroundColor',[0.8313725490196078 0.8156862745098039 0.7843137254901961],... 'Position',[0.9 0.62 0.09 0.05],... 'Fontname','Wingdings',... 'Callback','kompresi_citra(''simpan'')',... 'TooltipString','Klik disini untuk Menyimpan Setting Properti',... 'String','4'); %tombol watermark axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); y=imread('kde3blue.jpg'); %y=imread('default_gears.jpg'); axes(axes1) imagesc(y), axis off; case 'baca_citra' [filename, pathname]=uigetfile('*.bmp', 'Buka File Gambar'); if isequal(filename,0)|isequal(pathname,0) disp('File not found') else letakfile=strcat(pathname,filename); disp(letakfile); [citra_asli,map]=imread(letakfile); size(citra_asli) citra_asli(1:8,1:8,:) imshow(citra_asli); end set(hlabel,'Visible','Off'); set(hpop2,'Visible','Off'); set(hbtn,'Visible','Off'); case 'tampilkan' imshow(citra_asli); case 'properti' cla; set(hlabel,'Visible','On');
set(hpop2,'Visible','On'); set(hbtn,'Visible','On'); set(hlvldek,'Visible','On'); set(hlabel2,'Visible','On'); case 'simpan' modes=get(hpop2,'Value'); if modes==1, wname='Haar' elseif modes==2, wname='db2' elseif modes==3, wname='db4' elseif modes==4, wname='sym2' elseif modes==5, wname='sym4' elseif modes==6, wname='coif2' else wname='coif4' end lev_dek=str2num(get(hlvldek,'string')) set(hlabel,'Visible','Off'); set(hpop2,'Visible','Off'); set(hbtn,'Visible','Off'); set(hlvldek,'Visible','Off'); set(hlabel2,'Visible','Off'); case 'JPEG' % Proses DCT case 'rgb2yuv' [M,N,c]=size(citra_asli); if c==1 yuv = citra_asli; else R=citra_asli(:,:,1); G=citra_asli(:,:,2); B=citra_asli(:,:,3); [Y,U,V]=rgb2yuv(R,G,B); subplot(221), imshow(citra_asli); subplot(222), imshow(Y); subplot(223), imshow(U); subplot(224), imshow(V); yuv(:,:,1)=Y; yuv(:,:,2)=U; yuv(:,:,3)=V;
end case 'yuv2rgb' figure, Y=yuv(:,:,1); U=yuv(:,:,2); V=yuv(:,:,3); rgb=yuv2rgb(Y,U,V,'YUV444_8','BT709_l'); imshow(rgb); case 'rgb2yuv' figure, % Y diambil dari proses IDWT rgb=yuv2rgb(Y,U,V,'YUV444_8','BT709_l');
case 'dwt' [citra_dwt,Yi,data,ukuran]=wav_decomp(yuv(:,:,1),lev_dek,wname); Yr=wav_rec(citra_dwt,ukuran,lev_dek,wname); Y=Yr; U=yuv(:,:,2); V=yuv(:,:,3); rgb=yuv2rgb(Y,U,V,'YUV444_8'); ukuran gcf; axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); axes(axes1); subplot(221); imshow(citra_asli); % Yf=fft2(yuv(:,:,1)); % YF=Yf/max(max(Yf))*255; subplot(222); imshow(Yr,[]); subplot(223);
% max(max(YF)) imshow(Yi,[]); subplot(224); imshow(uint8(rgb),[]); case 'idwt' % citra_dwt diambil dari Dekuantisasi Yr=wav_rec(citra_dwt,ukuran,lev_dek,wname); case 'kuantisasi' subplot(221);cla; subplot(222);cla; subplot(223);cla; subplot(224);cla; %citra_dwt [M,N]=size(citra_dwt); for i=1:lev_dek, delta = dwt_quantize(i); if i==1, P = ukuran(i,1); L = ukuran(i,2); for j=1:M, for k=1:N, if (j>P || k>L) c_dwt_q(j,k) = sign(citra_dwt(j,k)).*abs(citra_dwt(j,k))./delta; else end end end else P = ukuran(i-1,1); L = ukuran(i-1,2); for j=1:P, for k=1:L, c_dwt_q(j,k) = sign(citra_dwt(j,k)).*abs(citra_dwt(j,k))./delta; end end end end axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,...
'XTick',[],... 'YTick',[]); axes(axes1); c_dwt_q imshow(c_dwt_q,[]); case 'dekuantisasi' subplot(221);cla; subplot(222);cla; subplot(223);cla; subplot(224);cla; %citra_dwt [M,N]=size(citra_q); for i=1:lev_dek, delta = dwt_quantize(i); if i==1, P = ukuran(i,1); L = ukuran(i,2); for j=1:M, for k=1:N, if (j>P || k>L) c_dwt_deq(j,k) = sign(citra_q(j,k)).*abs(citra_q(j,k)).*delta; else end end end else P = ukuran(i-1,1); L = ukuran(i-1,2); for j=1:P, for k=1:L, c_dwt_deq(j,k) = sign(citra_q(j,k)).*abs(citra_q(j,k)).*delta; end end end end axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); axes(axes1); c_dwt_q
imshow(c_dwt_q,[]); case 'entropy' lev_dek j=0; for i=lev_dek:-1:1, P = ukuran(i,1) L = ukuran(i,2) if i==lev_dek, E(1) = entropy(c_dwt_q(1:P,1:L)); c_dwt_q c_dwt_q(1:P,1:L) else E(2+j) = entropy(c_dwt_q(1:P,L+1:2*L)); E(3+j) = entropy(c_dwt_q(P+1:2*P,L+1:2*L)); E(4+j) = entropy(c_dwt_q(P+1:2*P,1:L)); end j=j+3; end axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); axes(axes1); bar(E) case 'de_entropy'
case 'semuanya' % Proses DWT [M,N,c]=size(citra_asli)
if c==1 % monochrom [citra_dwt,Yi,data,ukuran]=wav_decomp(citra_asli,lev_dek,wname); Yr=wav_rec(citra_dwt,ukuran,lev_dek,wname); gcf; axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',...
'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); axes(axes1); subplot(221); imshow(citra_asli); Yf=fft2(citra_asli); YF=Yf/max(max(Yf))*255; subplot(222); imshow(abs(YF)); subplot(223); max(max(YF)) imshow(Yi,[]); subplot(224); imshow(uint8(Yr),[]); else % berwarna R=citra_asli(:,:,1); G=citra_asli(:,:,2); B=citra_asli(:,:,3); yuv=rgb2yuv(citra_asli); [citra_dwt,Yi,data,ukuran]=wav_decomp(yuv(:,:,1),lev_dek,wname); Yr=wav_rec(citra_dwt,ukuran,lev_dek,wname); rgb_r(:,:,1)= Yr; rgb_r(:,:,2)= yuv(:,:,2); rgb_r(:,:,3)= yuv(:,:,3); gcf; axes1=axes('Position',[.00 .00 1.00 1.00],... 'Units','normalized',... 'Xcolor','black',... 'LineWidth',0.5,... 'XTick',[],... 'YTick',[]); axes(axes1); subplot(221); imshow(citra_asli); % Yf=fft2(yuv(:,:,1)); % YF=Yf/max(max(Yf))*255; subplot(222); imshow(yuv(:,:,1)); subplot(223); % max(max(YF))
imshow(Yi,[]); subplot(224); imshow(uint8(Yr),[]); end
% citra_asli(1:8,1:8,:) % Yr(1:8,1:8,:)
case 'aboutus' % me=textread('aboutme.txt','%s','delimiter','\n','whitespace',''); % set(haxes1,'Visible','Off'); % set(hlist,'Visible','On','String',char(me')); % y=imread('Elin_Smile.jpg'); % axes(haxes2) % imshow(y),title('Smile, You are on Candit Camera.');
case 'close' close; end