Pemapatan citra JPeG dengan metode Huffman



Abstrak


Berkat kemajuan teknologi dan munculnya internet, file gambar telah menjadi salah satu yang paling umum jenis file yang akan digunakan dan dibagi hari ini. Tapi bersama dengan kenyamanan mereka, file gambar sering besar, membuat mereka sulit untuk menyimpan dan mengirim.

Sementara kompresi gambar tidak melibatkan penghapusan data gambar, tidak menimbulkan risiko ke foto kualitas secara keseluruhan. Demikian pula, gambar di internet telah dioptimalkan untuk kecepatan download lebih cepat ketika seorang peselancar tinjauan suatu halaman web, dan tidak harus dioptimalkan untuk mempertahankan kualitas gambar.


Ada beberapa teknik yang bisa digunakan diantaranya, lossy lossless, namun hanya lossless yang banyak di guanakn untuk citra, lossless mengurangi beberapa bagian dari image tanpa bisa di ketahui oleh kasat mata.


1. Introduction

Kompresi gambar adalah aplikasi kompresi data Akibatnya, tujuannya adalah untuk mengurangi redundansi dari data citra dalam rangka untuk dapat menyimpan atau mengirimkan data dalam bentuk yang efisien.

kompresi Gambar bisa lossy atau lossless kompresi Lossless lebih disukai untuk keperluan arsip dan sering untuk pencitraan medis, gambar teknis, clip art , atau komik. Hal ini karena metode kompresi lossy, terutama saat digunakan pada rendah laju bit , memperkenalkanar artefak kompresi. metode Lossy sangat cocok untuk citra natural seperti foto dalam aplikasi mana kecil (kadang-kadang tak terlihat) hilangnya kesetiaan dapat diterima untuk mencapai pengurangan substansial dalam bit rate. Kompresi lossy yang menghasilkan perbedaan tak terlihat bisa disebut visual lossless


1.1. Lossy 
Mengurangi ruang warna ke warna yang paling umum dalam gambar. Warna-warna yang dipilih akan ditentukan dalam palet warna dalam header dari gambar terkompresi. Setiap piksel referensi hanya indeks warna dalam palet warna. Metode ini dapat dikombinasikan dengan dithering untuk menghindari posterization
Chroma subsampling . Ini mengambil keuntungan dari fakta bahwa mata manusia perceives perubahan spasial kecerahan lebih tajam dibandingkan dengan warna, dengan rata-rata atau menjatuhkan beberapa informasi chrominance dalam gambar. 
Transform coding . Ini adalah metode yang paling umum digunakan. A -transform Fourier terkait seperti DCT atau transformasi wavelet diterapkan, diikuti oleh kuantisasi dan entropy coding

1.2. Lossless

Metode untuk kompresi gambar lossless adalah: 
Run-length encoding - digunakan sebagai metode standar dalam PCX dan sebagai salah satu kemungkinan di BMP , TGA , TIFF
Kamus adaptif algoritma seperti LZW - digunakan dalam GIF dan TIFF
Deflasi - yang digunakan di PNG , MNG , dan TIFF

Salah satu metode lossless adalah metode Huffman.
Metode Huffman merupakan salah satu teknik kompresi dengan cara melakukan
pengkodean dalam bentuk bit untuk mewakili data karakter. Cara kerja atau algoritma
metode ini adalah sebagai berikut :
  1. Menghitung banyaknya jenis karakter dan jumlah dari masing-masing karakteryang terdapat dalam sebuah file.
  2. Menyusun setiap jenis karakter dengan urutan jenis karakter yang jumlahnya paling sedikit ke yang jumlahnya paling banyak.
  3. Membuat pohon biner berdasarkan urutan karakter dari yang jumlahnya terkecil ke yang terbesar, dan memberi kode untuk tiap karakter.
  4. Mengganti data yang ada dengan kode bit berdasarkan pohon biner.
  5. Menyimpan jumlah bit untuk kode bit yang terbesar, jenis karakter yang diurutkan dari frekuensi keluarnya terbesar ke terkecil beserta data yang sudah berubah menjadi kode bit sebagai data hasil kompresi.


Misalkan sebuah citra dinyatakan dalam bentuk matriks berikut :


100 100 100 100 100
100 200 200 200 100
250 100 200 100 250

Bila matriks ini mewakili sebuah citra gray-level berukuran 5x3 pixel, maka nilai elemen matriks (pixel) menyatakan tingkat keabuan citra. Tetapi bila matriks ini mewakili sebuah citra berwarna, maka nilai elemen matriks menyatakan warna. Setiap pixel dalam sebuah citra yang dikode dalam 8 bit, berarti citra tersebut memiliki 256 tingkat keabuan atau memiliki 256 warna.

Dengan mengambil contoh citra di atas dan dengan menggunakan metode Huffman, dikembangkan sebuah algoritma untuk mengkompres data citra sebagai berikut :

a. Buat data citra yang berupa matriks tersebut menjadi vektor, sehingga didapat
vektor [100,100,100,100,100,100,200,200,200,100,250,100,200,100,250]
Besarnya data citra = 15 byte

b. Baca vektor tersebut dan tentukan nilai warna yang ada serta frekuensi munculnya. Hasilnya adalah 100 = 9, 200 = 4, dan 250 = 2

c. Urutkan warna dari yang frekuensinya terkecil ke yang frekuensinya terbesar.
250,200,100

d. Membuat pohon biner berdasarkan urutan warna.

e. Mengganti data warna dengan kode bit berdasarkan pohon biner :
100 = “1” 200 = “01” 250 = 00

f. Mengganti data citra dengan kode bitnya, menjadi :

111111010101100101100.

g. Menyimpan lebar citra, tinggi citra, kode bit untuk warna yang terbesar frekuensi munculnya (“00” untuk contoh di atas), data warna yang terdapat di dalam citra dan data citra yang sudah dikodekan ke dalam file hasil kompresi. Untuk mengembalikan data citra terkompres menjadi data citra aslinya, diperlukan suatu algoritma dekompresi yang merupakan kebalikan dari algoritma kompresi. Berikut ini adalah langkah-langkah untuk mengembalikan data citra yang sudah dikodekan menjadi data citra semula adalah sebagai berikut :


a. Baca file hasil kompresi dan data-datanya dimasukkan ke variabel yang sesuai yaitu variabel ukuran citra, variabel kode bit data warna terakhir, variabel warna dan veriabel data kode.


b. Baca data kode bit per bit dari kiri ke kanan dan dicocokkan dengan data warna yang didapat. Bit hasil kompresi : 111111010101100101100 Bit pertama = “1”, karena nilainya “1” maka bit ini mewakili warna pertama dalam listing variabel warna yaitu warna 100. Kemudian bit berikutnya juga “1” berati mewakili warna 100, dan setrunya hingga bit ke 7 bernilai “0”. Karena bit ini bernilai “0” maka perlu dibandingkan dengan nilai kode biner data warna terakhir yaitu “00” dan karena “0” tidak sama dengan “00” maka dilakukan pembacaan berikutnya yaitu bit “1”. Karena bit berikutnya yang terbaca = “1” maka pembacaan kode selanjutnya dihentikan. Dengan demikian kode bit yang terbaca menjadi “01”, kode ini memiliki jumlah bit sebesar 2 bit dan dengan demikian kode ini mewakili warna pada urutan kedua dalam listing warna. Demikian seterusnya dilakukan konversi hingga data terakhir. Dari contoh di atas, hasil rekonstruksinya menjadi :

[100 100 100 100 100 100 200 200 200 100 250 100 200 100 250]


c. Rekonstruksi citra 2D dengan menggunakan data ukuran citra 5x3, berarti data pixel berbentuk 1D dipenggal menjadi 3 baris dan setiap barisnya berisi 5 pixel. Hasilnya menjadi :






2. HASIL

Rancangan awal dari aplikasi kompresi
Running aplikasi. 


nb: karena masih draft silahakan request yang maufile aslinya