PERANCANGAN PROGRAM
3.1. Gambaran Umum Perancangan
Secara umum, program aplikasi fractal compression terdiri dari dua proses utama yaitu proses kompresi dan proses dekompresi. Algoritma QPIFS yang digunakan pada proses kompresi adalah sebagai berikut :
1. create domain
2. for i = 1 to total range do steps (3), (4), (5), and (6) 3. if range blok > tolerance then quadtree down 4. else
5. transform from domain to range, while distance (domain, range)<=rms) 6. save best transform
7. end
Rms (root mean square) digunakan untuk menentukan jarak antara blok domain dan blok range, sedangkan tolerance digunakan untuk menentukan batas keseragaman pixel yang diterima pada tiap blok range.
Berikut ini tahap-tahap yang dilakukan pada proses kompresi :
1. Pembacaan file gambar untuk memeriksa apakah bit-bit data dapat dibaca 2. Alokasi memori untuk proses dan penyimpanan data domain sesuai
3. Gambar dibagi secara rekursif untuk memudahkan proses encoding dengan membagi menjadi empat kuadran melalui fungsi quadtree. 4. Dilakukan proses quadtree hingga level enam, dengan asumsi pada level
tersebut blok range sudah cukup kecil.
5. Keempat kuandran diurutkan dari yang paling cerah, kemudian dilakukan transformasi pada masing-masing kuadran. Proses ini berulang untuk setiap kuadran dimulai dari level terdalam di kuadran NW (northwest) hingga kuadran SE (southeast).
6. Hasil dari setiap transformasi tersebut kemudian dibandingkan dengan domain. Jika nilai perbandingan tersebut mendekati nilai perhitungan rms, maka transformasi dan posisi domain akan ditulis ke dalam file FIC. 7. Tahap lima dan enam akan berulang untuk seluruh range yang ada dalam
gambar hingga diperoleh kumpulan transformasi terbaik
Tahap-tahap proses dekompresi :
1. Pembacaan transformasi yang disimpan pada file FIC.
2. Penerapan transformasi pada domain yang dilakukan secara rekursif mulai dari kuadran terdalam hingga seluruh daerah gambar tertutup oleh pixel hasil transformasi
3. Langkah terakhir adalah penghalusan gambar dengan membuat nilai rata-rata dari dua pixel yang berdekatan pada setiap transformasi.
Gambaran yang lebih jelas tentang jalannya program dapat dilihat pada diagram alir berikut :
Gambar 3.2 Diagram alir proses dekompresi
3.2. Modul-modul Perancangan
Proses kompresi dan dekompresi tersebut di atas akan dijabarkan secara lebih mendetil dengan pseudocode, begitu juga fungsi-fungsi atau prosedur-prosedur yang ada.
3.2.1. Modul Utama
Modul Frac
Fungsi : Merupakan modul utama yang didalamnya terdapat modul-modul untuk proses kompresi dan dekompresi. Modul ini juga akan menginisialisasi parameter yang digunakan saat pemanggilan kedua proses tersebut. Nilai parameter yang digunakan pada perancangan ini sesuai dengan nilai yang digunakan oleh Yuval Fisher yaitu, nilai toleransi jarak domain dan range adalah delapan, dengan asumsi pada nilai tersebut perbedaan pixel tidak signifikan, nilai kedalaman maksimal adalah enam, dengan asumsi pada level tersebut pixel yang terdapat pada blok tersebut sudah cukup seragam. Matriks transformasi yang digunakan dalam perancangan ini berupa matriks 2 x 24 sebagai berikut, 7 0 1 6 13 2 3 12 15 8 9 14 6 1 0 7 19 4 5 18 21 10 11 20 12 3 2 13 18 5 4 19 23 16 17 22 14 9 8 15 20 11 10 21 22 17 16 23
Sedangkan matriks rotasi yang digunakan adalah matriks 2 x 8 berikut,
5 0 4 3 7 2 6 1 1 6 0 5 3 4 2 7
8 nilai tersebut menunjukkan rotasi yang mungkin dilakukan pada sebuah blok dengan melakukan isometri sebagai berikut :
1. identitas (tanpa rotasi)
3. refleksi orthogonal terhadap sumbu tengah horosontal blok 4. refleksi orthogonal terhadap diagonal pertama
5. refleksi orthogonal terhadap diadonal kedua 6. rotasi pada pusat blok sebesar 90o
7. rotasi pada pusat blok sebesar 1800 8. rotasi pada pusat blok sebesar -900
Modul yang dipanggil : -
3.2.2. Modul Proses Compression Modul Compress
Fungsi : Melakukan proses kompresi. Pseudocode :
Begin
Read the size of Raw file
Call compute sum to compute the sum of pixel values in domain Call partition image function
Close file
free memory allocated to domain free memory allocated to image End
Modul Compute Sums
Fungsi : Mengalokasikan memori untuk jumlah domain, memanggil modul Classify, membentuk domain dan menyimpan posisi domain ke dalam data domain.
Pseudocode : Begin
allocate memory for number of horizontal domain & vertical domain allocate memory for the size of horizontal domain & vertical domain for (i=0; i<2; ++i)
for (j=0; j<2; ++j)
for (k=i; k<hsize-i; k += 2) for (l=j; l<vsize-j; l += 2)
domimage = m_image[l][k] + m_image[l+1][k+1] + m_image[l][k+1] + m_image[l+1][k]
Compute the number of bits needed to store the domain data For i = 1 to total domain
Begin
Call the Classify function to sort the domain quadrant order Store the position of domain
End End
Modul yang dipanggil : Classify.
Modul Partition Image
Fungsi : Membagi gambar menjadi bagian-bagian kecil, memanggil fungsi quadtree untuk encoding
Pseudocode : Begin
Call Quadtree function
If horizontal size != image size Then call Partition image function If vertical size != image size Then call Partition image function End
Modul yang dipanggil : Partition Image, Quadtree.
Modul Quadtree
Fungsi : Melakukan proses encoding, mencari transformasi terbaik, mencari domain terbaik, menghitung rms. Menyimpan hasil transformasi terbaik, faktor skala terbaik (ialpha) dan offset domain terbaik (ibeta) dalam satu file FIC.
Pseudocode : Begin
For quadtree depth = 1 to 6 Begin
x=x & y=y to x=xsize/2 & y= ysize/2 Quadtree quadrant depth+1 If x/2 & y/2 != 0 then
x=xsize/2 & y=y Quadtree quadrant depth+1 If x/2 & y/2 != 0 then
x=0 & y= ysize/2 Quadtree quadrant depth+1 If x/2 & y/2 != 0 then
x=xsize/2 & y=ysize/2 Quadtree quadrant depth+1 End
Return;
Call the Classify function For all domain block
Transform domain to range
Symmetrize operation = apply rotation matrix to domain block Best rms = 10,000,000,000
rms = Compare(domain,range) ; If (rms < best_rms) Then
best transform =transform
best_domain offset =domain offset best rms = rms
best symetrize operation = symetrize operation best domain = domain
End if End for
If (best_rms > tolerance & depth < 4) Then Begin
If x/2 & y/2 != 0 then
x=x & y=y to x=xsize/2 & y= ysize/2 Quadtree quadrant depth+1 If x/2 & y/2 != 0 then
x=xsize/2 & y=y Quadtree quadrant depth+1 If x/2 & y/2 != 0 then
x=0 & y= ysize/2 Quadtree quadrant depth+1 If x/2 & y/2 != 0 then
x=xsize/2 & y=ysize/2 Quadtree quadrant depth+1 End
Else
Pack(best transform, best domain offset, best symmetrize operation,best domain);
End if End
Modul yang dipanggil : Compare, Classify, Quadtree.
Modul Classify Quadrant
Fungsi : Menghitung nilai rata-rata pixel pada range atau domain, mengurutkan pixel berdasarkan tingkat kecerahan.
Begin
If range area Then Begin
For quadrant NW to SE Do
Call the average1 function to compute the average value of each quadrant End
Else Begin
For quadrant NW to SE Do
Call the average function to compute the average value of each quadrant End
End if
Repeat until NW < NE < SW < SE If sum i < sum i+1 then swap position End
Modul yang dipanggil : Average.
Modul Average
Fungsi : Menghitung nilai rata-rata pixel dalam satu kuadran Pseudocode :
Begin
For (j=y; j<y+ysize; ++j)
pixel = domain image[j][i]; sum = sum + pixel;
sum2 = sum2 + pixel*pixel; Return sum & sum2
End
Modul yang dipanggil : -.
Modul Average1
Fungsi : Menghitung nilai rata-rata pixel dalam satu kuadran Pseudocode :
Begin
For (i=x; i<x+xsize; ++i) For (j=y; j<y+ysize; ++j) pixel = range image[j][i]; sum = sum + pixel;
sum2 = sum2 + pixel*pixel; Return sum & sum2
End
Modul Compare
Fungsi : Menghitung nilai rms untuk membandingkan domain dan range. Rms dihitung dengan, Rms =
∑
[
−]
y x y x domain y x range , 2 ) , ( ) , ( . Pseudocode : Beginpialpha = 0.5 + (alpha + 1)/(2.0 x 1) x (scaling bits) if (pialpha < 0) pialpha = 0
if (pialpha >= scaling bits) pialpha = scaling bits-1
alpha = pialpha/ scaling bits x 2.0 x max scale – max scale beta = (sum – alpha x domain sum) / w2
if (alpha > 0.0) beta = beta + alpha x 256
best beta = 0.5 + beta/(1.0+ absolute alpha) x 256 x offset bits-1 if (best beta< 0) best beta = 0;
if (best beta>= 1) best beta = offset bits-1
beta =best beta/offset bits-1 x 1.0+absolute alpha x256 if (alpha > 0.0) beta = beta – alpha x 256
Rms = 2 ) 2 2 ( ) 2 2 ( 2 2 w rsum w sum dom rdsum sum dom sum +α×α× − × + ×β× +β× β× − × Return rms End
3.2.3. Modul Proses Decompression
Modul Decompress
Fungsi : Melakukan proses dekompresi, membaca file FIC , menginisialisasi gambar awal berupa gambar berwarna hitam dan memanggil fungsi-fungsi yang mendukung proses tersebut.
Pseudocode : Begin
Open FIC file Unpack byte; Allocate memory Clear memory buffer Initialize dummy image
Call Read transformation function For i = 1 to total transformation do Begin
Call the Apply Transformations function End
Call the Smooth Image function End
Smooth Image.
Modul Read Transformation
Fungsi : Membaca transformasi pada file FIC Pseudocode :
Begin
If depth < 6 then Begin
From x=0 & y=0 Quadtree (x/2, y/2) depth+1
From x=x+xsize/2 & y=0 Quadtree (x/2, y/2)depth+1 From x=0 & y= y+ysize/2 Quadtree (x/2, y/2) depth+1 From x=xsize/2 &y=ysize/2 Quadtree (x/2,y/2)depth+1 return;
End
If depth < 4 & Unpack = true Then Begin
Read_Transformations(atx,aty, xsize/2, ysize/2, depth+1);
Read_Transformations(atx+xsize/2,aty, xsize/2, ysize/2, depth+1); Read_Transformations(atx,aty+ysize/2, xsize/2, ysize/2, depth+1); Read_Transformations(atx+xsize/2,aty+ysize/2,xsize/2,ysize/2,depth+1); End
m_trans = next transformation
best transformation = Unpack (transformation bit); best domain offset = Unpack (offset bit);
m_trans->scale = transformation; m_trans->offset = domain offset; End if
End
Modul yang dipanggil : Read Transformation.
Modul Apply Transformation
Fungsi : Menerapkan transformasi pada pixel hingga terbentuk sebuah gambar. Pseudocode :
Begin
m_trans = &m_transformations; While (next transformation != NULL) Begin
m_trans = next transformation;
imageDummy= m_trans->scale*pixel + m_trans->offset paint transformed pixel to screen
End
tempimage = m_image; m_image = m_imageDummy;
m_imageDummy = tempimage; End
Modul yang dipanggil : -.
Modul Smooth Image
Fungsi : menghitung nilai rata-rata dari batasan transformasi untuk memperhalus gambar hasil dekompresi.
Pseudocode : Begin
m_trans = &m_transformations; While (m_trans->next != NULL) Begin
m_trans = m_trans->next; For for i = 1 to image size Do
average = pixel of sum 1) (i pixel i pixel + + End End
Modul yang dipanggil : -.
Layar utama
Beri nama file output Beri nama file
output
Pilih file untuk didekompresi Pilih file untuk
dikompresi Exit Gambar proses kompresi Gambar hasil dekompresi Klik arrow down
open file dialog
Klik arrow down open file dialog
Klik arrow down save file dialog
Klik OK proses kompresi
Klik OK proses dekompresi Klik arrow down
open file dialog
Klik close keluar dari program
kompresi dekompresi Klik compression Klik decompression
Gambar 3.3 STD Rancangan Program
3.4. Rancangan Layar
Gambar 3.4 Rancangan layar utama
3.4.2. Open .raw , .dat dan.FIC
Gambar 3.5 Rancangan layar open .raw, .dat dan .FIC
Gambar 3.6 Rancangan layar Save As .FIC
3.4.4. Image Viewer