OLEH :
PEBRI YENI SAMOSIR
(1404405097)
A. PENDAHULUAN
Perkembangan teknologi informasi dan telekomunikasi yang pesat telah
menjadi peran yang sangat penting untuk pertukaran informasi yang cepat.
Kecepatan pengiriman informasi dalam bentuk perpaduan teks, suara dan gambar
secara real-time akan menjadi bagian utama dalam pertukaran informasi.
Kecepatan pengiriman ini sangat bergantung kepada ukuran dari informasi
tersebut Salah satu solusi untuk masalah di atas adalah dengan melakukan
pemampatan (kompresi) data teks, suara, dan citra sebelum ditransmisikan dan
kemudian penerima akan merekonstruksinya kembali menjadi data aslinya
(dekompresi). Kompresi adalah proses pengubahan sekumpulan data menjadi
bentuk kode dengan tujuan untuk menghemat kebutuhan tempat penyimpanan
data dan waktu untuk transmisi data. Jika data tersebut hendak dipergunakan
kembali, maka harus dilakukan dekompresi, yaitu pengubahan kode-kode menjadi
data awal.
Saat ini, telah banyak tersedia algoritma untuk melakukan kompresi, antara
lain : Huffman, LIFO, LZHUF, LZ77 dan variannya (LZ78, LZW, GZIP),
Dynamic Markov Compression (DMC), Block Sorting Lossless, Run-Length,
Shannon-Fano, Arithmetic, PPM (Prediction by Partial Matching), BurrowsWheeler Block Sorting, dan Half Byte. Namun, ada beberapa faktor yang dijadikan
pertimbangan dalam memilih algoritma yang akan digunakan dalam kompresi
data, yaitu :
1. Sumber daya yang dibutuhkan (Memori, kecepatan PC),
2. Kecepatan kompresi,
3. Ukuran hasil kompresi dan besarnya redudansi,
4. Ketepatan hasil dekompresi,
5. Kompleksitas algoritma.
1.1.2
sudah berubah menjadi kode bit sebagai data hasil kompresi. Contoh
teknik kompresi dengan menggunakan metode Huffman pada file teks.
Misalkan sebuah file teks yang isinya AAAABBBCCCCCD. File ini
memiliki ukuran 13 byte atau satu karakter sama dengan 1 byte.
b.
c.
d.
Mengganti data yang ada dengan kode bit berdasarkan pohon biner yang
dibuat. Penggantian karakter menjadi kode biner, dilihat dari node yang
paling atas atau disebut node akar :
A = 01, B = 001, C = 1, D = 000
Selanjutnya berdasarkan pada kode biner masing-masing karakter ini,
semua
karakter
dalam
file
dapat
diganti
menjadi:
01010101001001001111110001111111, karena angka 0 dan angka 1
mewakili 1 bit, sehingga data bit di atas terdiri dari 32 bit atau 4 byte (1
byte = 8 bit)
e.
Simbol
A
B
C
D
E
Kemuncula
n
15
7
6
6
5
Kode
0
100
101
110
111
Tabel 2. Jumlah Bit yang Dibutuhkan untuk Menyimpan Informasi dengan Algoritma Huffman
Simbol
A
B
C
D
E
Total
Kemuncula
n
15
7
6
6
5
39
Ukuran
Huffman
1
3
3
3
3
Jumlah bit
Huffman
1 x 15 = 15
3 x 7 = 21
3 x 6 = 18
3 x 6 = 18
3 x 5 = 15
87 bit
1.1.3
citra, namun pada saat rekonstruksi diharapkan tidak satu pun data citra yang
hilang.
Berdasarkan pada landasan pikiran di atas serta hasil yang diperoleh dari
metode Huffman dimana teks hasil dekompresi yang diperoleh 100% sama
dengan teks aslinya.
Secara fisis, sebuah citra adalah merupakan representasi objek-objek baik
dalam
keadaan
diam atau bergerak pada suatu suport fisik seperti kertas, monitor
init_str
= sorted_str;
init_prob
prob_dist;
atau
lainnya. =Secara
matematis, sebuah citra dinyatakan sebagai sebuah fungsi
matematis dua dimensi 2D f(x,y) atau tiga dimensi 3D f(x,y,z). Dimana x dan y
sorted_prob = prob_dist;
menyatakan
rear = 1; posisi koordinat 2D, sedang f menyatakan nilai intensitas
while (length(sorted_prob)
> 1)
(kecerahan)
atau menyatakan warna
pada setiap posis x,y. Sebuah citra digital
dalam [sorted_prob,indeces]
sebuah komputer dinyatakan
dalam bentuk matrik 2D, dimana elemen
= sort(sorted_prob,'ascend');
matrikssorted_str
disebut pixel
dan nilai dari setiap elemen matriksnya menyatakan
= sorted_str(indeces);
new_node
=
strcat(sorted_str(2),sorted_str(1));
intensitas atau warna.
new_prob = sum(sorted_prob(1:2));
Setiap
data yang telah mengalami kompresi, tentu harus dapat
sorted_str = sorted_str(3:length(sorted_str));
merekonstruksi
kembali
data tersebut sesuai dengan aslinya. Merekonstruksi data
sorted_prob
= sorted_prob(3:length(sorted_prob));
sorted_str
=
[sorted_str,
new_node];
lebih dikenal sebagai metode dekompresi
data. Metode dekompresi Huffman
sorted_prob = [sorted_prob, new_prob];
dapat digunakan
untuk
mengembalikan
data
kode
biner menjadi file teks.
newq_str(rear) = new_node;
newq_prob(rear) = new_prob;
rear = rear
1;
1.2 Simulasi
Pohan+ Huffman
Menggunakan Matlab
end
1.2.1 Syntax Matlab untuk Simulasi Pohon Biner Huffman
tree = [newq_str,init_str];
% Pebri Yeni
Samosir
tree_prob
= [newq_prob,
init_prob];
% 1404405097
% Teknik Elektro dan Komputer
[sorted_tree_prob,indeces]
= sort(tree_prob,'descend');
clc;
sorted_tree
= tree(indeces);
clear all;
close all;
parent(1) = 0;
num_children = 2;
my_str
'Sinyal';
for
i = =2:length(sorted_tree)
auto_prob
= 1;
me = sorted_tree{i};
count = 1;
if (auto_prob
== =
1)sorted_tree{i-count};
parent_maybe
diff = strfind(parent_maybe,me);
prob_dist
= double(my_str);
while
(isempty(diff))
else
count = count + 1;
parent_maybe = sorted_tree{i-count};
diff = =strfind(parent_maybe,me);
prob_dist
[20 19 30 40 50];
end end
parent(i)
= i - count;
num_bits
= ceil(log2(length(prob_dist)))
end
disp('Character Probability:');
for i = 1:length(prob_dist)
display(strcat(my_str(i),' --> ',num2str(prob_dist(i))));
treeplot(parent);
end
title(strcat('Huffman
Coding Tree - "',my_str,'"'));
total = sum(prob_dist)
display(sorted_tree)
for i = 1:length(my_str)
display(sorted_tree_prob)
sorted_str{i} = my_str(i);
end
[xs,ys,h,s]
= treelayout(parent);
init_str = sorted_str;
text(xs,ys,sorted_tree);
for i = 2:length(sorted_tree)
my_x = xs(i);
my_x = xs(i);
my_y = ys(i);
parent_x = xs(parent(i));
parent_y = ys(parent(i));
mid_x = (my_x + parent_x)/2;
mid_y = (my_y + parent_y)/2;
end
for i = 1:length(sorted_tree)
code{i} = '';
index = i;
p = parent(index);
while(p ~= 0)
w = num2str(weight(index));
code{i} = strcat(w,code{i});
index = parent(index);
p = parent(index);
end
end
codeBook = [sorted_tree', code']
1.2.2
Flowchart
Berikut merupakan flowchart dari realisasi sebuah simulasi kompresi dan
dekompresi citra dengan metode Huffman menggunakan software Matlab.
1.3.2
%===================================================
% PEBRI YENI SAMOSIR
% 1404405097
% TEKNIK ELEKTRO dan KOMPUTER
%===================================================
%clearing all variableas and screen
clc;
clear all;
close all;
%Reading image
a=imread('d:/new folder/Bong.jpg');
figure(1);
imshow(a),title('Original Image');
pause (0.1);
vec_size = 1;
for
p = 1:m an image to grayscale
%converting
for
q = 1:n
I=rgb2gray(a);
newvec(vec_size)
= I(p,q);
imwrite(I,'gray.jpg');
vec_size
= vec_size+1;
figure(2);
end
imshow(I),title('Grayscale Image');
end
pause (0.1);
%Huffman
%size of Encodig
the image
hcode
= huffmanenco(newvec,dict);
[m,n]=size(I);
Totalcount=m*n;
%Huffman Decoding
dhsig1
= huffmandeco(hcode,dict);
%variables
using to find the probability
cnt=1;
%convertign
dhsig1 double to dhsig uint8
sigma=0;
dhsig = uint8(dhsig1);
%computing the cumulative probability.
%vector
to array conversion
for i=0:255
dec_row=sqrt(length(dhsig));
k=I==i;
dec_col=dec_row;
count(cnt)=sum(k(:))
%variables
to convert
vector 2 array
%pro array using
is having
the probabilities
arr_row
= 1;
pro(cnt)=count(cnt)/Totalcount;
arr_col
= 1;
sigma=sigma+pro(cnt);
vec_si
=
1;
cumpro(cnt)=sigma;
cnt=cnt+1;
end;
for x = 1:m
%Symbols
for an image
for
y = 1:n
symbols = [0:255];
back(x,y)=dhsig(vec_si);
arr_col = arr_col+1;
vec_si
= vec_si
+ 1;
%Huffman
code Dictionary
end
dict = huffmandict(symbols,pro);
arr_row = arr_row+1;
end
%function which converts array to vector
%converting
for p = 1:m image from grayscale to rgb
[deco, map] = gray2ind(back,256);
RGB = ind2rgb(deco,map);
imwrite(RGB,'rgb.jpg');
figure(3);
imshow (RGB),title('Huffman Image');
pause (0.1);
1.3.3
Berdasarkan gambar 6 dapat dlihat gambar atau citra yang akan dikompresi.
Dimana ukuran (size) gambar original tersebut 16,957 bytes dengan dimensi 574 x
495 pixels. Tampilan citra true color 24 bit citra dikonversi terlebih dahulu
menjadi citra grayscale 8 bit, selanjutnya citra disimpan kedalam file dokumen
untuk dilakukan proses kompresi dengan metode Huffman.
Berdasarkan gambar 7 dapat dlihat gambar atau citra yang sudah diubah
(transformasi) dari RGB ke ruang warna grayscale. Dimana ukuran (size) gambar
grayscale tersebut 15,136 bytes dengan dimensi 574 x 495 pixels. Kemudian
dilakukan kompresi dengan metode Huffman. Terlebih dahulu dihitung
frekuensi dari tiap nilai keabuan untuk setiap baris sampai setinggi citra dan
setiap kolom sampai setinggi citra. Sehingga akan diperoleh frekuensi setiap
nilai keabuan (piksel). Setiap nilai piksel merupakan sebuah simpul yang
mempunyai data nilai keabuan dan jumlah frekuensi. Dari simpul-simpul
tersebut, cari simpul yang memiliki jumlah frekuensi terkecil pertama.
Kemudian cari simpul yang mempunyai jumlah frekuensi terkecil kedua. Dari
kedua simpul tadi jumlahkan frekuensinya. Hasil penjumlahan dari kedua
simpul tadi menjadi sebuah simpul baru yang memiliki dua cabang kedua
simpul tadi. Simpul yang memiliki jumlah frekuensi terkecil pertama menjadi
cabang kiri dan simpul yang memiliki jumlah frekuensi terkecil kedua menjadi
cabang kanan. Simpul baru ini selanjutnya dimasukkan daftar dalam beserta
kedua cabang untuk dilakukan pencarian frekuensi terkecil, dan pembuatan
simpul baru. Proses ini berlanjut sampai semua simpul telah masuk ke dalam
pohon dan frekuensi akar (root) dari pohon akan merupakan hasil penjumlahan
semua frekuensi yang ada. Setelah terbentuk pohon Huffman dilakukan
penelusuran terhadap pohon Huffman dengan memberikan kode 0untuk
setiap cabang kiri dan 1 untuk setiap cabang kanan. Kemudian dilakukan
penelusuran pada pohon Huffman. Dimulai dari akar, penelusuran menurun
didapatkan simpul tanpa cabang (daun). Begitu didapatkan daun, maka nilai
piksel dimasukkan dalam tabel beserta angka-angka bit (0 atau 1) dari
cabang-cabang yang dilalui untuk sampai pada daun ini. Maka diperoleh kode
Huffman dari masing-masing nilai kebuan. Setiap nilai kebauan yang memiliki
frekuensi dalam jumlah besar akan dikodekan dengan jumlah bit yang lebih
sedikit. Sedangkan nilai keabuan yang memiliki jumlah frekuensi sedikit akan
dikodekan dengan jumlah bit yang lebih panjang. Kode Huffman dari masingmasing nilai keabuan tersebut disimpan dalam memori komputer. Kode-kode
Huffman tersebut harus disimpan ke dalam memori komputer untuk
mempermudah dalam proses dekompresi. Proses perhitungan hasil kompresi
dengan cara mengalikan panjang kode dengan jumlah frekuensi setiap nilai
keabuan.
1.4 Kesimpulan
Berdasarkan hasil dan analisis simulasi yang telah dilakukan maka dapat
diambil beberapa kesimpulan, sebagai berikut :
1. Metoda Huffman dapat diterapkan untuk kompresi data citra, tidak hanya untuk
kompresi file teks. Huffman merupakan algoritma yang dipakai untuk
mengurangi kehilangan data pada kompresi.
2. Citra hasil kompresi memiliki ukuran (size) yang lebih kecil dari citra aslinya.
Sehingga dapat menghemat memori penyimpanan. Namun proses kompresi
tidak mempengaruhi dimensi citra tersebut.
3. Resolusi citra dengan jumlah warna yang sama tidak banyak mempengaruhi nilai
rasio kompresi.
4. Jika data hendak dipergunakan kembali, maka harus dilakukan dekompresi, yaitu
pengubahan kode-kode menjadi data awal. Sama halnya dengan
mengdekompresi suatu citra (image).
5. Kualitas citra hasil dekompresi, baik untuk sekali iterasi maupun untuk dua
kali iterasi sama dengan citra aslinya. Hal ini terjadi karena data warna
atau derajat keabuan (piksel citra) hanya dikodekan dalam bentuk kode
pohon biner Huffman dan rekonstruksi datanya (dekompresi) hanya tinggal
mengonversikan kode pohon biner Huffman menjadi data aslinya.
6. Teknik kompresi citra dengan metode Huffman pada citra grayscale 8 bit
dilakukan dengan pembuatan pohon Huffman berdasarkan frekuensi
kemunculan nilai piksel. Pohon Huffman akan menghasilkan kode biner
yang disimpan dalam tabel Huffman tiap 8 bit.
7. Kode biner yang dihasilkan dari Metode Huffman adalah setiap nilai piksel yang
mempunyai frekuensi terbesar mempunyai jumlah bit yang pendek
sedangkan nilai piksel yang mempunyai frekuensi kecil mempunyai bit
yang lebih panjang.
REFERENSI
[1]
[2]
[3]
[4]
[5]