Anda di halaman 1dari 19

Pengolahan Citra Menggunakan Matlab

Oleh :

Putu Sintia Susiani Pande (1304405018)

JURUSAN TEKNIK ELEKTRO DAN KOMPUTER


FAKULTAS TEKNIK UNIVERSITAS UDAYANA
BUKIT-JIMBARAN
2015
ALGORITMA HUFFMAN

1.1 Pengertian Metode Huffman

Huffman adalah algoritma yang dipakai untuk mengurangi kehilangan data


pada kompresi. Pada bagian ini dianjurkan untuk menggunakan table variable-
length code untuk encoding sebuah sumber data symbol (seperti sebuah karakter
pada file) di mana table variable-length code sudah dapat memperkirakan setiap
nilai kemungkinan dari sebuah sumber data simbol. Ini dikembangkan oleh David
A. Huffman ketika beliau sedang mengambil Ph.D. di MIT, dan menerbitkan
sebuah makalah pada tahun 1952 “A Method for the Construction of Minimum-
Redundancy Codes." Huffman menjadi seorang anggota fakultas MIT setelah
kelulusan dan kemudian menjadi anggota pendiri Bagian Ilmu Pengetahuan
Komputer di Universitas California, Santa Cruz. Huffman coding digunakan
secara spesifik untuk memilih gambaran untuk setiap symbol data, dan
menghasilkan kode pada prefix-free code (kadang-kadang disebut dengan "prefix
codes") (yang adalah, string bit yang menggambarkan suatu lambang khusus yang
tidak pernah digambarkan oleh lambang-lambang lain mana pun) yang
menggambarkan karakter yang biasa digunakan menjadi sebuah string dari sebuah
bit yang lebih pendek.

1.2 Simulasi

Coding :

%===================================================
%Putu sintia susiani pande-1304405018
%===================================================

%clearing all variableas and screen


clc;
clear all;
close all;

%Reading image
a=imread('sintia.jpg');
figure(1);
imshow(a),title('Original Image');
pause (0.1);

%converting an image to grayscale


I=rgb2gray(a);
imwrite(I,'gray.jpg');
figure(2);
imshow(I),title('Grayscale Image');
pause (0.1);

%size of the image


[m,n]=size(I);
Totalcount=m*n;

%variables using to find the probability


cnt=1;
sigma=0;

%computing the cumulative probability.


for i=0:255
k=I==i;
count(cnt)=sum(k(:))

%pro array is having the probabilities


pro(cnt)=count(cnt)/Totalcount;
sigma=sigma+pro(cnt);
cumpro(cnt)=sigma;
cnt=cnt+1;
end;

%Symbols for an image


symbols = [0:255];

%Huffman code Dictionary


dict = huffmandict(symbols,pro);

%function which converts array to vector


vec_size = 1;
for p = 1:m
for q = 1:n
newvec(vec_size) = I(p,q);
vec_size = vec_size+1;
end
end

%Huffman Encodig
hcode = huffmanenco(newvec,dict);

%Huffman Decoding
dhsig1 = huffmandeco(hcode,dict);

%convertign dhsig1 double to dhsig uint8


dhsig = uint8(dhsig1);

%vector to array conversion


dec_row=sqrt(length(dhsig));
dec_col=dec_row;

%variables using to convert vector 2 array


arr_row = 1;
arr_col = 1;
vec_si = 1;

for x = 1:m
for y = 1:n
back(x,y)=dhsig(vec_si);
arr_col = arr_col+1;
vec_si = vec_si + 1;
end
arr_row = arr_row+1;
end

%converting 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);
Hasil Command Window :

count =

Columns 1 through 8

0 2 2 2 7 6 5 4

Columns 9 through 16

7 3 12 27 35 50 70 122

Columns 17 through 24

135 151 130 130 125 142 149 162

Columns 25 through 32

154 150 172 175 163 196 199 222

Columns 33 through 40

233 260 256 270 279 328 326 314

Columns 41 through 48

324 272 326 317 308 282 308 288

Columns 49 through 56

296 283 279 255 255 275 249 258

Columns 57 through 64

253 273 278 253 269 273 252 221

Columns 65 through 72

263 234 221 253 240 228 205 221

Columns 73 through 80

244 205 228 193 182 167 192 157

Columns 81 through 88

167 179 163 147 177 159 151 152

Columns 89 through 96
134 140 130 158 147 174 150 149

Columns 97 through 104

129 130 124 155 140 157 140 173

Columns 105 through 112

138 144 124 151 132 176 153 143

Columns 113 through 120

128 119 126 103 120 125 114 126

Columns 121 through 128

112 122 124 113 108 113 118 86

Columns 129 through 136

90 100 113 130 111 110 110 103

Columns 137 through 144

104 90 96 106 101 91 107 118

Columns 145 through 152

104 100 94 100 99 99 113 96

Columns 153 through 160

90 117 101 101 88 87 93 103

Columns 161 through 168

105 81 108 94 83 103 85 88

Columns 169 through 176

91 82 80 87 86 95 90 89

Columns 177 through 184

100 99 89 80 68 67 54 74

Columns 185 through 192

60 62 45 52 45 54 49 38
Columns 193 through 200

40 52 53 36 48 39 35 40

Columns 201 through 208

37 31 34 35 34 36 24 31

Columns 209 through 216

31 36 30 18 23 20 24 27

Columns 217 through 224

22 19 17 23 15 30 21 12

Columns 225 through 232

15 22 17 22 19 22 12 13

Columns 233 through 240

13 18 12 19 18 20 20 22

Columns 241 through 248

11 23 18 17 20 21 13 12

Columns 249 through 256

24 31 31 35 39 50 296 456
Tampilan Citra :

Gambar asli dimensi 150x200 ukuran 8,34 kb

Gambar greyscale dimensi 150x200 ukuran 6,79 kb

Gambar hasil kompresi dimensi 150x200 ukuran 7,25 kb


1.3 Flowchart

Mulai

Masukkan Citra

Menentukan Ukuran
Citra

Menentukan Luas Citra


(pixel)

Mengubah Nilai Unik


Manjadi Baris

Menentukan Nilai
Simbol

Menghitung Nilai
Simbol

Merekontruksi Citra

Merubah Citra ke RGB

Menyimpan Hasil

Selesai
ALGORITMA ARITMATIKA

2.1 Pengertian Metode Aritmatika

Kode aritmatik adalah generalisasi dari kode Huffman. Pengkodean


aritmatik melibatkan kode nonblok tanpa korespondensi satu ke satu antara
symbol sumber dan kata kode pada kode Huffman. Sebuah urutan seluruh
simbol sumber dengan panjang terbatas diberikan sebuah kata kode aritmatika
tunggal yang mendefinisikan interval bilangan real antara 0 dan 1. Bila jumlah
simbol dalam urutan meningkat, maka interval yang digunakan untuk mewakili
menjadi lebih kecil. Prinsip pengkodean didasarkan pada asumsi bahwa setiap
urutan simbol dapat membantu mengurangi ukuran interval sesuai dengan
probabilitas.

2.2 Simulasi

Coding :

%===================================================
%Putu sintia susiani pande-1304405018
%===================================================

clc;
clear all;
close all;

%Arithmatic Coding
prompt='Masukkan Huruf = ';
str=input(prompt,'s');
arith=str;
len=size(str);
le=len(2);
count=[];
disp('Arithmatic Encoding Started');
for i=1:le-1
count(i)=1;
for j=i+1:le
if str(i)==str(j)
str(j)=0;
count(i)=count(i)+1;
end
end
end
if(str(le)~=0)
count(le)=1;
end
j=1;
%------------Transmitter part--------------------
for i=1:le
if(str(i)~=0)
new(j)=str(i);
p(j)=count(i)/le;
if(j>1)
ar(j)=ar(j-1)+p(j);
else
ar(j)=p(j);
end
disp(['Probability for ',str(i),' is ',num2str(p(j))]);
j=j+1;
end
end
larith=size(new);
l=[];u=[];
l(1)=0;
u(1)=ar(1);
for i=2:le
for j=1:larith(2)
if(arith(i)==new(j))
l(i)=l(i-1)+(u(i-1)-l(i-1))*(ar(j)-p(j));
u(i)=l(i-1)+(u(i-1)-l(i-1))*ar(j);
end
end
end
tag=(l(i)+u(i))/2;
disp(['The tag is ',num2str(tag)]);

%----------------Reciever part--------------
disp('Arithmatic Decoding Started');
rec='a';
tagr=tag;
for i=1:le
for j=1:larith(2)
if(tagr<ar(j) && tagr>(ar(j)-p(j)))
rec(i)=new(j);
nm=j;
end
end
if(nm>1)
tagr=(tagr-ar(nm-1))/p(nm);
else
tagr=tagr/p(nm);
end
end

disp(['Recieved word is ',rec]);


if(rec==arith)
disp('Succesfully Recieved');
else
disp('Sorry not recieved successfully');
end
Hasil Command Window :
2.3 Flowchart

Mulai

Masukkan Huruf

Mengolah Huruf dengan


algoritma encoding

Mengolah Huruf dengan


algoritma decoding

Menampilkan
Hasil

Selesai
ALGORITMA LZW

3.1 Pengertian Metode Aritmatika

Algoritma LZW dikembangkan dari metode kompresi yang dibuat oleh


Ziv dan Lempel pada tahun 1977. algoritma ini melakukan kompresi dengan
menggunakandictionary. Pendekatan ini bersifat adaptif dan efektif. Prinsip
kompresi tercapai jika referensi dalam bentuk pointer dapat disimpan dalam
jumlah bit yang lebih sedikit dibandingkan string aslinya. The Lempel-Ziv (LZ)
metode kompresi adalah salah satu algoritma paling populer untuk penyimpanan
lossless. mengempis adalah variasi LZ yang dioptimalkan untuk kecepatan
dekompresi dan rasio kompresi, sehingga kompresi ini bisa lambat. Deflate
digunakan dalam PkZip , gzip dan PNG . LZW(Lempel-Ziv-Welch) digunakan
dalam gambar GIF.

3.2 Simulasi

Coding :

%===================================================
%Putu sintia susiani pande-1304405018
%===================================================
clc;
clear all;
close all;

% From the article referenced by the original authors


lzwInput = uint8('/WED/WE/WEE/WEB/WET');
[lzwOutput, lzwTable] = norm2lzw(lzwInput);
fprintf('\n');
fprintf('Input: ');
fprintf('%02x ', lzwInput);
fprintf('\n');
fprintf('Output: ');
fprintf('%04x ', lzwOutput);
fprintf('\n');
for ii = 257:length(lzwTable.codes)
fprintf('Code: %04x, LastCode %04x+%02x Length %3d\n', ii,
lzwTable.codes(ii).lastCode, lzwTable.codes(ii).c,
lzwTable.codes(ii).codeLength)
end;

% Tests the special decoder case


lzwInput = uint8('abcAAAzAAAAaAAAAAdAAAAAefAAAAAAAAAAAAAAacdc');
[lzwOutput, lzwTable] = norm2lzw(lzwInput);
fprintf('\n');
fprintf('Input: ');
fprintf('%02x ', lzwInput);
fprintf('\n');
fprintf('Output: ');
fprintf('%04x ', lzwOutput);
fprintf('\n');
for ii = 257:length(lzwTable.codes)
fprintf('Code: %04x, LastCode %04x+%02x Length %3d\n', ii,
lzwTable.codes(ii).lastCode, lzwTable.codes(ii).c,
lzwTable.codes(ii).codeLength)
end;

[lzwOutputd, lzwTabled] = lzw2norm(lzwOutput);


fprintf('\n');
fprintf('Input: ');
fprintf('%04x ', lzwOutput);
fprintf('\n');

fprintf('Output: ');
fprintf('%02x ', lzwOutputd);
fprintf('\n');

for ii = 257:length(lzwTabled.codes)
fprintf('Code: %04x, LastCode %04x+%02x Length %3d\n', ii,
lzwTabled.codes(ii).lastCode, lzwTabled.codes(ii).c,
lzwTabled.codes(ii).codeLength)
end;
Hasil Command Window :

Input: 2f 57 45 44 2f 57 45 2f 57 45 45 2f 57 45 42 2f 57 45 54

Output: 0030 0058 0046 0045 0101 0046 0105 0106 0102 0043 0105 0055

Code: 0101, LastCode 0030+57 Length 2

Code: 0102, LastCode 0058+45 Length 2

Code: 0103, LastCode 0046+44 Length 2

Code: 0104, LastCode 0045+2f Length 2

Code: 0105, LastCode 0101+45 Length 3

Code: 0106, LastCode 0046+2f Length 2

Code: 0107, LastCode 0105+45 Length 4

Code: 0108, LastCode 0106+57 Length 3

Code: 0109, LastCode 0102+42 Length 3

Code: 010a, LastCode 0043+2f Length 2

Code: 010b, LastCode 0105+54 Length 4

Input: 61 62 63 41 41 41 7a 41 41 41 41 61 41 41 41 41 41 64 41 41 41 41 41 65
66 41 41 41 41 41 41 41 41 41 41 41 41 41 41 61 63 64 63

Output: 0062 0063 0064 0042 0104 007b 0104 0104 0062 0107 0104 0065 010a
0042 0066 0067 010d 0111 0107 0062 0064 0065 0064

Code: 0101, LastCode 0062+62 Length 2

Code: 0102, LastCode 0063+63 Length 2

Code: 0103, LastCode 0064+41 Length 2

Code: 0104, LastCode 0042+41 Length 2

Code: 0105, LastCode 0104+7a Length 3

Code: 0106, LastCode 007b+41 Length 2

Code: 0107, LastCode 0104+41 Length 3


Code: 0108, LastCode 0104+61 Length 3

Code: 0109, LastCode 0062+41 Length 2

Code: 010a, LastCode 0107+41 Length 4

Code: 010b, LastCode 0104+64 Length 3

Code: 010c, LastCode 0065+41 Length 2

Code: 010d, LastCode 010a+41 Length 5

Code: 010e, LastCode 0042+65 Length 2

Code: 010f, LastCode 0066+66 Length 2

Code: 0110, LastCode 0067+41 Length 2

Code: 0111, LastCode 010d+41 Length 6

Code: 0112, LastCode 0111+41 Length 7

Code: 0113, LastCode 0107+61 Length 4

Code: 0114, LastCode 0062+63 Length 2

Code: 0115, LastCode 0064+64 Length 2

Code: 0116, LastCode 0065+63 Length 2

Input: 0062 0063 0064 0042 0104 007b 0104 0104 0062 0107 0104 0065 010a
0042 0066 0067 010d 0111 0107 0062 0064 0065 0064

Output: 61 62 63 41 41 41 7a 41 41 41 41 61 41 41 41 41 41 64 41 41 41 41 41 65
66 41 41 41 41 41 41 41 41 41 41 41 41 41 41 61 63 64 63

Code: 0101, LastCode 0062+62 Length 2

Code: 0102, LastCode 0063+63 Length 2

Code: 0103, LastCode 0064+41 Length 2

Code: 0104, LastCode 0042+41 Length 2

Code: 0105, LastCode 0104+7a Length 3

Code: 0106, LastCode 007b+41 Length 2


Code: 0107, LastCode 0104+41 Length 3

Code: 0108, LastCode 0104+61 Length 3

Code: 0109, LastCode 0062+41 Length 2

Code: 010a, LastCode 0107+41 Length 4

Code: 010b, LastCode 0104+64 Length 3

Code: 010c, LastCode 0065+41 Length 2

Code: 010d, LastCode 010a+41 Length 5

Code: 010e, LastCode 0042+65 Length 2

Code: 010f, LastCode 0066+66 Length 2

Code: 0110, LastCode 0067+41 Length 2

Code: 0111, LastCode 010d+41 Length 6

Code: 0112, LastCode 0111+41 Length 7

Code: 0113, LastCode 0107+61 Length 4

Code: 0114, LastCode 0062+63 Length 2

Code: 0115, LastCode 0064+64 Length 2

Code: 0116, LastCode 0065+63 Length 2


3.3 Flowchart

Mulai

Masukkan Simbol

Mengolah Huruf dengan


algoritma lzw

Menampilkan
Hasil

Selesai

Anda mungkin juga menyukai