Algoritma BWT (Berkeley Wavelet Transform)


Algoritma BWT (Berkeley Wavelet Transform) adalah salah satu algoritma yang dapat digunakan untuk melakukan kompresi sinyal ataupun gambar. Contoh yang dibahas kali ini adalah mengenai pengolahan file gambar.
Sama seperti algoritma transformasi wavelet sebelumnya, algoritma ini akan melakukan konversi data dari bentuk spasial menjadi bentuk frekuensi, kemudian melakukan pengolahan data frekuensi, dan dikonversi menjadi bentuk spasial menggunakan inversi metode yang bersangkutan.



Diketahui data awal adalah sebagai berikut. Dalam kasus ini akan digunakan gambar berwarna bertipe jpg dengan ukuran 128 x 128 pixel
lena


Langkah-langkah penggunaan algoritma ini adalah

1. Lakukan konversi ke dalam bentuk grayscale
Kemudian potong gambar tersebut agar berukuran persegi
Dan lakukan proses downsample kedalam ukuran kelipatan pangkat 3 yang paling mendekati ukuran semula

img = double(img);
img = mean(img,3);
ukuran = min(size(img));
img = img(1:ukuran,1:ukuran);
ukuranBaru = 3^floor(log(ukuran)/log(3));
img = imresize(img,ukuranBaru/ukuran);

2. Lakukan proses perhitungan dengan menggunakan metode BWT (Berkeley Wavelet Transform)
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 2a – 2b)

imgbwt = bwt(img);

Memasuki perhitungan pada fungsi BWT

2a. Hitung jumlah level dekomposisi yang akan dilakukan, yaitu pangkat dari ukuran gambar

jumlahLevel = log(ukuran)/log(3);

2b. Lakukan perulangan sebanyak jumlah level (poin 2b1 – 2b3)

for level = 1:jumlahLevel
. . .

2b1. Lakukan proses dekomposisi gambar pada level yang sedang terpilih
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 2b1a – 2b1c)

dekomposisiLevel = bwtPerLevel(img);

Memasuki perhitungan pada fungsi bwtPerLevel

2b1a. Hitung jumlah ukuran output dekomposisi pada level yang sedang terhitung

ukuranSisi = ukuran/3;

2b1b. Inisialisasi parameter orientasi untuk digunakan dalam proses filter
Orientasi yang digunakan adalah berukuran 3 x 3, dengan nilai sebagai berikut:
[ 90-odd 135-odd 45-even ]
[ 90-even 135-even 45-odd ]
[ DC 0-even 0 -odd ]

orientasi = [90  0; 135  0; 45 90; ...
             90 90; 135 90; 45  0; ...
             -1 -1;   0 90;  0  0];

2b1c. Lakukan perhitungan pada masing-masing orientasi tersebut (poin 2b1c1 – 2b1c2)

for i = 1:size(orientasi,1)
. . .

2b1c1. Hitung filter wavelet pada orientasi tersebut
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini

filterWavelet = buatWavelet(orientasi(i,1),orientasi(i,2));

* Gunakan fungsi ini untuk menghitung filter wavelet yang digunakan

function filterWavelet = buatWavelet(orientasi,fase)
filterWavelet = nan;

if (orientasi==-1)
    filterWavelet = ones(3,3)/sqrt(9);
    
elseif (orientasi==0)
    if (fase==0)
        filterWavelet = [-1 0 1; -1 0 1; -1 0 1]/sqrt(6);
    elseif (fase==90)
        filterWavelet = [-1 2 -1; -1 2 -1; -1 2 -1]/sqrt(18);
    end
    
elseif (orientasi==45)
    if (fase==0)
        filterWavelet = [-1 1 0; 1 0 -1; 0 -1 1]/sqrt(6);
    elseif (fase==90)
        filterWavelet = [-1 -1 2; -1 2 -1; 2 -1 -1]/sqrt(18);
    end
    
elseif (orientasi==90)
    if (fase==0)
        filterWavelet = [-1 -1 -1; 0 0 0; 1 1 1]/sqrt(6);
    elseif (fase==90)
        filterWavelet = [-1 -1 -1; 2 2 2; -1 -1 -1]/sqrt(18);
    end
    
elseif (orientasi==135)
    if (fase==0)
        filterWavelet = [0 -1 1; 1 0 -1; -1 1 0]/sqrt(6);
    elseif (fase==90)
        filterWavelet = [2 -1 -1; -1 2 -1; -1 -1 2]/sqrt(18);
    end
end

if (isnan(filterWavelet))
    disp('Parameter Wavelet tidak dikenali');
end

2b1c2. Lakukan proses filter menggunakan filter wavelet yang telah dihitung sebelumnya
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 2b1c2a – 2b1c2c)

outputDekomposisi(y*ukuranSisi+1:y*ukuranSisi+ukuranSisi,x*ukuranSisi+1:x*ukuranSisi+ukuranSisi) = prosesFilter(img,filterWavelet);

2b1c2a. Hitung jumlah ukuran output filter pada level yang sedang terhitung

ukuranSisi = ukuran/3;

2b1c2b. Lakukan perkalian setiap elemen gambar dengan filter wavelet

imgFilter = img .* repmat(filterWavelet,ukuranSisi,ukuranSisi);

2b1c2c. Hasil proses filter adalah penjumlahan nilai pada setiap indeks kelipatan 3 dari indeks terpilih

outputFilter = zeros(ukuranSisi);
for y = 1:3
  for x = 1:3
    outputFilter = outputFilter + imgFilter(y:3:end,x:3:end);
  end
end

2b2. Catat nilai dekomposisi tersebut ke dalam nilai output

ukuranDekomposisi = size(dekomposisiLevel,1);
outputDekomposisi(end-ukuranDekomposisi+1:end,1:ukuranDekomposisi) = dekomposisiLevel/((3^level)^2);

2b3. Jika ukuran dekomposisi lebih dari satu,
maka perkecil ukuran gambar menjadi 1/3 ukuran semula untuk digunakan pada perhitungan level berikutnya

if (ukuranDekomposisi>1)
	ukuranDekomposisi = ukuranDekomposisi/3;
	img = dekomposisiLevel(end-ukuranDekomposisi+1:end,1:ukuranDekomposisi);
end

3. Lakukan proses perhitungan dengan menggunakan metode Inversi BWT
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 3a – 3b)

imgibwt = ibwt(imgbwt);

Memasuki proses pada fungsi IBWT

3a. Hitung jumlah level dekomposisi yang akan dilakukan, yaitu pangkat dari ukuran gambar

jumlahLevel = log(ukuran)/log(3);

3b. Lakukan perulangan sebanyak jumlah level (poin 3b1 – 3b4)

for level = 1:jumlahLevel
. . .

3b1. Hitung ukuran sisi yang digunakan dalam perhitungan level ini
Kemudian simpan gambar input sebagai output dekomposisi sementara
Dan kosongkan semua nilai awal pada output yang akan dihitung

ukuranSisi = size(imgbwt,1);
outputDekomposisi = imgbwt;

if (ukuranSisi>3)
	outputDekomposisi(end-ukuranSisi/3+1:end,1:ukuranSisi/3) = 0;
end

3b2. Lakukan proses dekomposisi gambar pada level yang sedang terpilih
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 3b2a – 3b2c)

dekomposisiLevel = ibwtPerLevel(outputDekomposisi)/ukuran*ukuranSisi*((3^level)^2);

Memasuki perhitungan pada fungsi ibwtPerLevel

3b2a. Hitung jumlah ukuran output gambar pada level yang sedang terhitung

ukuranSisi = ukuran/3;

3b2b. Inisialisasi parameter orientasi untuk digunakan dalam proses filter
Orientasi yang digunakan adalah berukuran 3 x 3, dengan nilai sebagai berikut:
[ 90-odd 135-odd 45-even ]
[ 90-even 135-even 45-odd ]
[ DC 0-even 0 -odd ]

orientasi = [90  0; 135  0; 45 90; ...
             90 90; 135 90; 45  0; ...
             -1 -1;   0 90;  0  0];

3b2c. Lakukan perhitungan pada masing-masing orientasi tersebut (poin 3b2c1 – 3b2c2)

for i = 1:size(orientasi,1)
. . .

3b2c1. Hitung filter wavelet pada orientasi tersebut
Penjelasan tentang fungsi ini sudah dijelaskan pada perhitungan sebelumnya

[~, idxMinimal] = min(jarakEuclidean);

3b2c2. Lakukan proses rekonstruksi gambar menggunakan filter wavelet yang telah dihitung sebelumnya
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 3b2c2a – 3b2c2c)

img = img + rekonstruksiGambar(outputDekomposisi(y*ukuranSisi+1:y*ukuranSisi+ukuranSisi,x*ukuranSisi+1:x*ukuranSisi+ukuranSisi),filterWavelet);

Memasuki perhitungan pada fungsi rekonstruksiGambar

3b2c2a. Hitung jumlah ukuran output gambar pada level yang sedang terhitung

ukuran = ukuranGambar(1);

3b2c2b. Lakukan proses upsample koefisien dekomposisi dengan ukuran skala 3 kali ukuran semula

idx = ceil((1:3*ukuran)/3);
koefisienDekomposisi = koefisienDekomposisi(idx,idx);

3b2c2c. Lakukan perkalian setiap elemen gambar dengan koefisien dekomposisi

img = koefisienDekomposisi .* repmat(filterWavelet,ukuran,ukuran);

3b3. Lakukan proses upsample dengan ukuran skala ukuran gambar / ukuran sisi

idx = ceil((1:ukuran)*ukuranSisi/ukuran);
imgibwt = imgibwt + dekomposisiLevel(idx,idx);

3b4. Jika ukuran sisi lebih dari satu,
maka perkecil ukuran gambar menjadi 1/3 ukuran semula untuk digunakan pada perhitungan level berikutnya

if (ukuranSisi>1)
	imgbwt = imgbwt(end-ukuranSisi/3+1:end,1:ukuranSisi/3);
end

* Tamplikan hasil akhir

imagesc(imgibwt); title('Transformasi sesudah BWT dan inverse BWT');


Hasil akhir adalah: (klik untuk perbesar gambar)

BWT hasil akhir


Contoh modul / source code menggunakan Matlab dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *