1 Modul 06 Kompresi dan Dekompresi Yusep Rosmansyah, Ph.D. M. Rizki Nugraha, M.T. Chessa Nur Triejunita, S.T. Sistem dan Teknologi Informasi STEI ITB 06.01 Kompresi Lossless II3150 Sistem Multimedia Program Studi Sistem dan Teknologi Informasi
2 Run Length Encoding Kompresi Lossless Huffman Coding Arithmetic Coding Lempel-Ziv-Welch
3 Run Length Encoding (RLE) RLE merupakan algoritma kompresi data sederhana Data disusun beserta dengan jumlahnya Sangat cocok jika ada data-data yang berdekatan nilainya sama
4 Run Length Encoding (RLE) Mengurangi redudansi data dengan mengganti pengulangan karakter secara berturut-turut dalam suatu string dengan dua entitas, yaitu angka jumlah pengulangan suatu karakter dan karakter itu sendiri Contoh: BBBBEEEEEEEECCCCDAAAAA dapat direpresentasikan dengan: 4B8E4C1D5A
5 Run Length Encoding (RLE) Jika diasumsikan 1 byte per karakter, maka BBBBEEEEEEEECCCCDAAAAA adalah 22 byte, dan 4B8E4C1D5A adalah 10 byte
6 Contoh RLE 1 1 2 1 1 1 1 1 3 4 4 4 4 1 1 3 3 3 5 1 1 1 1 3 3 Susunan bilangan pada tabel adalah: 121111134444113335111133 = 24 byte
7 Contoh RLE 1 Dihitung jumlah kemunculan data: (1,1) (2,1) (1,5) (3,1) (4,4) (1,2) (3,3) (5,1) (1,4) (3,2) Data kompresi: 1 1 2 1 1 5 3 1 4 4 1 2 3 3 5 1 1 4 3 2 = 20 byte
8 Contoh RLE 2 Data asli sebagai berikut: WWWWWWWWWWWWKWWWWWWWWWWWWKKKW WWWWWWWWWWWWWWWWWWWWWWWKWWWW WWWWWWWWWW Ada 67 karakter
9 Contoh RLE 2 Data disusun dengan algoritma RLE: 12W1K12W3K24W1K14W Ada 18 karakter
10 Huffman Coding Pengkodean karakter berdasarkan frekuensi kemunculan karakter tersebut Karakter kemudian disusun menjadi pohon biner Karakter yang sering muncul terletak dekat dengan akar sedangkan karakter yang jarang muncul terletak jauh dari akar Dengan demikian, karakter yang sering muncul memiliki kode yang pendek sedangkan yang jarang muncul memiliki kode yang panjang
11 Huffman Coding 1 Frekuensi karakter dari string yang akan dikompres dianalisa terlebih dahulu Selanjutnya dibuat pohon Huffman 2 Frekuensi terkecil dikerjakan terlebih dahulu dan diletakkan ke dalam leaf Leaf-leaf dikombinasikan dan dijumlahkan probabilitasnya atau frekuensinya menjadi root di atasnya
12 Contoh Huffman Misalkan ada string: AAAABBDCCAAAEEEBBBCDDAABCCDAAA = 30 byte = 30 x 8 = 240 bit Hitung frekuensi setiap karakter: Karakter Frekuensi Probabilitas A 12 12/30 B 6 6/30 C 5 5/30 D 4 4/30 E 3 3/30
13 Contoh Huffman (2) String terdiri atas 5 karakter yaitu A, B, C, D dan E Setiap karakter menjadi Subtree yang terpisah
14 Contoh Huffman (3) Subtree untuk D dan E mempunyai frekuensi yang paling kecil, maka keduanya digabung
15 Contoh Huffman (4) Subtree untuk B dan C mempunyai frekuensi yang paling kecil, sehingga mereka digabungkan
16 Contoh Huffman (5) Subtree untuk {B, C} dan {D, E} mempunyai frekuensi terkecil, kemudian digabungkan:
17 Contoh Huffman (6) Hasil akhir :
18 Contoh Huffman (7) Untuk mengkodekan karakter, setiap cabang kiri diberi nilai 0 dan setiap cabang kanan diberi nilai 1 Maka: A dikodekan 1 B dikodekan 000
19 Contoh Huffman (8) Jumlah bit yang diperlukan dengan kompresi Huffman menjadi: 12 + 18 + 15 + 12 + 9 = 66 bit Karakter Frekuensi Kode Panjang Kode Jumlah bit=frekuensi x panjang kode A 12 1 1 12 B 6 000 3 18 C 5 001 3 15 D 4 010 3 12 E 3 011 3 9
20 Huffman Decoding A A A A B B D C C 1 1 1 1 000 000 010 001 001 Menggunakan LUT (Look Up Table), jika diterima bit: 1 A 0 ada 4 kemungkinan, lihat bit kedua bit kedua 0 ada dua kemungkinan, lihat bit ketiga bit ketiga 0 yakin bahwa karakter adalah B
21 Arithmetic Coding 1 Memetakan seluruh pesan ke dalam bilangan asli antara 0 dan 1 2 Selang tersebut memiliki jumlah bilangan asli yang tidak terbatas sehingga memungkinkan untuk encoding pesan apapun 3 Arithmeic compression memungkinkan melakukan encoding pesan tanpa meng-assign bilangan biner tetap pada setiap karakter
22 D = Batas atas (UB) Batas bawah (LB) UB = LB + D x P(x), dimana P(x) adalah probabilitas dari karakter Range karakter [R(x)] = LB : UB = LB : LB + D x P(x) Nilai tag = nilai untuk melakukan decoding
23 Contoh Arithmetic Coding Encoding Pesan MURINU Total karakter : 6 Hitung probalibitas Karakter Probabilitas P(x) U 2/6 0,33 R 1/6 0,17 N 1/6 0,17 M 1/6 0,17 I 1/6 0,17
24 MURINU 1 0,68 U R 0,34 0,2856 U R D = UB LB = 0,34 0,17 = 0,17 R(I) = LB : LB + D x P(I) = 0,17 : 0,17 + 0,17 x 0,17 = 0,17 : 0,1989 R(M) = LB : LB + D x P(M) = 0,1989 : 0,1989 + 0,17 x 0,17 = 0,1989 : 0,2278 0,51 0,34 N 0,256 7 0,2278 N R(N) = LB : LB + D x P(N) = 0,2278 : 0,2278 + 0,17 x 0,17 = 0,2278 : 0,2567 0,17 M I 0,1989 M I R(R) = LB : LB + D x P(R) = 0,2567 : 0,2567 + 0,17 x 0,17 = 0,2567 : 0,2856 0 0,17
25 1 0 0,17 I 0,34 M 0,51 0,68 R U MURINU 0,34 0,17 0,1989 I 0,2278 M 0,2567 N 0,2856 U 0,2856 I M 0,313344 N 0,322592 R U 0,322592 0,313344 I 0,31648832 M N 0,31963264 R U 0,31806048 0,31491616 0,31361127 I 0,31387854 M N R U 0,31414581 0,34 0,304096 0,294848 0,31491616 R N 0,31414581 0,31392398 I 0,31396942 M N 0,3140603 R U 0,31401486 0,31387854 0,31441308 0,313344
26 0,3140603 < U < 0,31414581 Nilai tag untuk decoding : 0,31414581 + 0,3140603 2 = 0,31410306
27 Arithmetic Coding - Decoding Diketahui: Nilai tag = 0,31410306 Banyak karakter = 6 Nilai Probabilitas Karakter Karakter Probabilitas P(x) U 0,33 R 0,17 N 0,17 M 0,17 I 0,17
28 1 0 0,17 I 0,34 M 0,51 0,68 R U Nilai tag = 0,31410306 0,34 0,17 0,1989 I 0,2278 M 0,2567 N 0,2856 U 0,2856 I M 0,313344 N 0,322592 R U 0,322592 0,313344 I 0,31648832 M N 0,31963264 R U 0,31806048 0,31491616 0,31361127 I 0,31387854 M N R U 0,31414581 0,34 0,304096 0,294848 0,31491616 R N 0,31414581 0,31392398 I 0,31396942 M N 0,3140603 R U 0,31401486 0,31387854 0,31441308 0,313344
29 Kompresi Lossless Lempel-Ziv-Welch
30 Lempel-Ziv-Welch 1 Dibuat oleh Abraham Lempel, Jacob Ziv dan Terry Welch 2 Mensubstitusi kumpulan karakter dengan suatu kode 3 Melakukan kompresi dengan menggunakan kamus Fragmen-fragmen text digantikan dengan indeks yang diperoleh dari sebuah kamus
31 Algoritma Kompresi LZW 1. Inisialisasi kamus 2. P karakter pertama dalam stream karakter 3. C karakter berikutnya dalam stream karakter 4. IF string (P+C) terdapat dalam kamus THEN P P+C ELSE Cetak indeks string P Tambahkan string (P+C) ke dalam kamus dan berikan indeks berikutnya P C 5. IF NOT EOF THEN GOTO 2 ELSE Cetak indeks string P STOP
32 Initial Dictionary
33 Algoritma Dekompresi LZW 1. Kamus diinisialisasi dengan semua karakter dasar yang ada 2. CW Input pertama 3. Lihat kamus dan simpan string dari kode tersebut (string CW) ke output 4. C karakter pertama dalam string CW
34 Algoritma Dekompresi LZW 5. PW CW; CW indeks berikutnya dalam input 6. IF string CW terdapat dalam kamus THEN 1) Simpan string CW ke output 2) P string PW 3) C karakter pertama dari string CW 4) Tambahkan string (P+C) ke dalam kamus ELSE 1) Output string S string PW + C ke stream karakter 2) P string PW 3) C karakter pertama dari string S 4) Tambahkan string (P+C) ke dalam kamus 7. Kembali ke langkah 5
35 LZW Contoh 1 (1) (Kompresi) Input : ABABBABCAB Initial dictionary A = 1, B = 2, C = 3 Input = P NxCh = C Output Add to Dictionary Index Index String A B 1 4 AB B A 2 5 BA A B AB B 4 6 ABB B A BA B 5 7 BAB B C 2 8 BC C A 3 9 CA A B AB EOF 4 Output: 1 2 4 5 2 3 4
36 LZW Contoh 1 (2) (Dekompresi) Input : 1 2 4 5 2 3 4 Initial dictionary PW String 1 = A, 2 = B, 3 = C Add to CW P C Output Dictionary Index String Index String NULL 1 A A A A 2 B A B B 4 AB B 4 AB B A AB 5 BA AB 5 BA AB B BA 6 ABB BA 2 B BA B B 7 BAB B 3 C B C C 8 BC C 4 AB C A AB 9 CA AB EOF Output: A B AB BA B C AB
37 LZW Contoh 2 (1) (Kompresi) Input : ITETEBEBE Initial dictionary Input = P NxCh = C A=1,..., Z=26, (B=2, E=5, I=9, T=20) Output Add to Dictionary Index Index String I T 9 27 IT T E 20 28 TE E T 5 29 ET T E TE B 28 30 TEB B E 2 31 BE E B 5 32 EB B E BE EOF 31 Output: 9 20 5 28 2 5 31
38 LZW Contoh 2 (2) (Dekompresi) Input : 9 20 5 28 2 5 31 Initial dictionary PW String A=1,..., Z=26, (B=2, E=5, I=9, T=20) Add to CW P C Output Dictionary Index String Index String NULL 9 I I I I 20 T I T T 27 IT T 5 E T E E 28 TE E 28 TE E T TE 29 ET TE 2 B TE B B 30 TEB B 5 E B E E 31 BE E 31 BE E B BE 32 EB BE EOF Output: I T E TE B E BE
39 LZW SOAL 1 (1) (Kompresi) Buatlah kompresi dan dekompresi LZW Input : LOSSLESSLOSSLESS Initial dictionary A=1,, Z=26 Input = P NxCh = C Output Add to Dictionary Index Index String L O 12 27 LO
40 LZW SOAL 1 (2) (Kompresi) Input = P NxCh = C Output Add to Dictionary Index Code String Output:
41 LZW SOAL 1 (3) (Dekompresi) Input : 12 15 19 19 12 5 29 27 33 32 19 Initial dictionary A=1,, Z=26 PW String Add to CW P C Output Dictionary Index String Index String NULL 12 L L L
42 LZW SOAL 1 (4) (Dekompresi) PW String CW Add to Dictionary P C Output Index String Index String Output:
43 JAWABAN LZW SOAL 1 (1) (Kompresi) Input : LOSSLESSLOSSLESS Initial dictionary A=1,, Z=26 Input = P NxCh = C Output Add to Dictionary Index Index String L O 12 27 LO O S 15 28 OS S S 19 29 SS S L 19 30 SL L E 12 31 LE E S 5 32 ES S S SS L 29 33 SSL L O LO S 27 34 LOS
44 JAWABAN LZW SOAL 1 (2) (Kompresi) Input = P S SS NxCh = C S L Output Add to Dictionary Index Code String SSL E 33 35 SSLE E S ES S 32 36 ESS S EOF 19 Output: 12 15 19 19 12 5 29 27 33 32 19
45 JAWABAN SOAL 1 (3) (Dekompresi) Input : 12 15 19 19 12 5 29 27 33 32 19 Initial dictionary A=1,, Z=26 PW String Add to CW P C Output Dictionary Index String Index String NULL 12 L L L L 15 O L O O 27 LO O 19 S O S S 28 OS S 19 S S S S 29 SS S 12 L S L L 30 SL L 5 E L E E 31 LE E 29 SS E S SS 32 ES SS 27 LO SS L LO 33 SSL
46 JAWBAN LZW SOAL 1 (4) (Dekompresi) PW String CW P C Output Add to Dictionary Index String Index String SS 33 SSL SS S SSL 34 SSS SSL 32 ES SSL E ES 35 SSLE ES 19 S ES S S 36 ESS S EOF Output: L O S S L E SS LO SSL ES S