Algoritma Gabor Filter 12


Pengenalan Pola adalah cabang kecerdasan yang menitik-beratkan pada metode pengklasifikasian objek ke dalam klas – klas tertentu untuk menyelesaikan masalah tertentu. Contoh yang dibahas kali ini adalah mengenai penentuan pola wajah baru berdasarkan pola wajah yang sudah ada sebelumnya dengan menggunakan metode Gabor Filter.
Algoritma ini sebenarnya adalah sebuah filter linier yang digunakan untuk mendeteksi tepi. Representasi dari Gabor Filter mirip dengan sistem pengenalan obyek pada manusia, sehingga algoritma ini cukup banyak dikembangkan di berbagai bidang, seperti biometrik. Ada 2 proses utama yang dilakukan algoritma ini, yaitu proses pembuatan array gabor, dan kemudian array tersebut akan digunakan dalam proses ekstraksi / pengambilan vektor feature dari file gambar.



Diasumsikan ada 10 wajah manusia yang sudah diketahui sebelumnya, dengan data sebagai berikut:
ef contoh data

Selanjutnya ada pola wajah baru yang ingin diketahui hasilnya
Maka tentukan pola wajah baru ini cocok dengan pola wajah yang mana
Diasumsikan pola wajah yang baru adalah sebagai berikut:
gabor data baru


Langkah-langkah penggunaan algoritma ini adalah

* Lakukan inisialisasi variabel yang digunakan dalam perhitungan (poin 1)

1a. Tentukan parameter u,v,m,n untuk digunakan dalam perhitungan gabor filter bank
u adalah jumlah skala (kecil ke besar), dengan nilai default adalah 5
v adalah jumlah orientasi (horizontal, vertikal, diagonal), dengan nilai default adalah 8
m adalah jumlah baris dalam matriks gabor filter 2 dimensi, nilainya harus integer bulat ganjil, dengan nilai default adalah 39
m adalah jumlah kolom dalam matriks gabor filter 2 dimensi, nilainya harus integer bulat ganjil, dengan nilai default adalah 39

gaborFB.u = 5;
gaborFB.v = 8;
gaborFB.m = 39;
gaborFB.n = 39;

Dengan menggunakan parameter default diatas, maka hasil visualisasi untuk array gabor adalah sebagai berikut. Akan terdapat gambar matriks berjumlah 5 * 8 buah, dengan masing-masing gambar memiliki tingkat skala dan orientasi yang berbeda-beda dengan ukuran 39 x 39
GaborArray

1b. Tentukan parameter d1, d2 untuk digunakan dalam perhitungan gabor features
d1 adalah faktor downsampling dari baris matriks
d2 adalah faktor downsampling dari kolom matriks
downsampling adalah proses untuk mengecilkan ukuran matriks dengan hanya mengambil poin-poin penting dari matriks tersebut
semakin besar nilai downsampling, maka semakin kecil pula ukuran matriks yang dihasilkan,
sehingga perhitungan dapat dilakukan lebih cepat, tetapi tingkat kecocokannya akan semakin lemah
Demikian pula sebaliknya
Angka faktor downsampling juga harus merupakan faktor bilangan bulat dari baris atau kolom yang dimaksud,
jika baris matriks berjumlah 10, maka nilai faktor hanya bisa menggunakan angka 2 atau 5, tidak bisa menggunakan angka lainnya

gaborFE.d1 = 4;
gaborFE.d2 = 4;

* Lakukan pembacaan gambar contoh data yang tersedia (poin 2)

2a. Tentukan path folder dari gambar contoh data dan gambar data baru

pathContohData = 'ContohData';
pathDataBaru = 'DataBaru';

2b. Cari semua gambar contoh wajah dan data baru yang tersedia pada masing-masing folder
Kemudian hitung jumlah gambar untuk masing-masing contoh data dan data baru yang tersedia

bmpContohData=dir(sprintf('%s/*.bmp',pathContohData));    
bmpDataBaru=dir(sprintf('%s/*.bmp',pathDataBaru));
jumlahContohData=size(bmpContohData,1);
jumlahDataBaru=size(bmpDataBaru,1);

2c. Tentukan tinggi (H) dan lebar (W) dari masing-masing gambar
Kemudian buat matriks kosong berukuran H*W sebanyak jumlah gambar contoh data

str=strcat(pathContohData,'\',bmpContohData(1).name);    
im=imread(str);
H=size(im,1);
W=size(im,2);
daftarGambar=zeros(H,W,jumlahContohData);

2d. Tampilkan data contoh gambar yang tersedia
dan masukkan ke dalam matriks gambar

for i=1:jumlahContohData
    str=strcat(pathContohData,'\',bmpContohData(i).name);    
    daftarGambar(:,:,i)=imread(str);
    
    subplot(5,jumlahContohData,i)
    imshow(str)
    if i==1
        title('Contoh gambar wajah: ','Position',[105,0])
    end
end

3. Lakukan proses perhitungan dengan metode Gabor Filter
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 3a – 3c)

[matriksFeatureContohData, matriksFeatureDataBaru] = GaborFilter(gaborFB, gaborFE, ...
    pathDataBaru, bmpDataBaru, jumlahContohData, jumlahDataBaru, daftarGambar);

Memasuki perhitungan pada fungsi GaborFilter

3a. Lakukan perhitungan gabor filter bank untuk mendapatkan array gabor
array gabor akan dihasilkan akan berukuan u x v, dengan masing-masing sel akan berisikan matriks berukuran m x n
contoh gambar gabor array dapat dilihat pada gambar diatas
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

gaborArray = gaborFilterBank(gaborFB.u, gaborFB.v, gaborFB.m, gaborFB.n);

* Gunakan fungsi ini untuk menghitung array gabor

function gaborArray = gaborFilterBank(u,v,m,n)
if (nargin ~= 4)
    error('Jumlah paramter harus ada 4, yaitu jumlah skala, jumlah orientasi, dan ukuran 2 dimensi dari filter')
end

gaborArray = cell(u,v);
fmax = 0.25;
gama = sqrt(2);
eta = sqrt(2);

for i = 1:u    
    fu = fmax/((sqrt(2))^(i-1));
    alpha = fu/gama;
    beta = fu/eta;
    
    for j = 1:v
        tetav = ((j-1)/v)*pi;
        gFilter = zeros(m,n);
        
        for x = 1:m
            for y = 1:n
                xprime = (x-((m+1)/2))*cos(tetav)+(y-((n+1)/2))*sin(tetav);
                yprime = -(x-((m+1)/2))*sin(tetav)+(y-((n+1)/2))*cos(tetav);
                gFilter(x,y) = (fu^2/(pi*gama*eta))*exp(-((alpha^2)*(xprime^2)+(beta^2)*(yprime^2)))*exp(1i*2*pi*fu*xprime);
            end
        end
        
        gaborArray{i,j} = gFilter;        
    end
end

3b. Lakukan perhitungan pada masing-masing contoh data
Lakukan perhitungan ekstraksi gabor feature untuk mendapatkan vektor feature dari contoh data tersebut
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 3b1 – 3b3)

matriksFeatureContohData = [];
label = [];
for i=1:jumlahContohData
    matriksFeatureContohData(:, i) = gaborFeatures(daftarGambar(:,:,i), gaborArray, gaborFE.d1, gaborFE.d2);
    label = [label i];
end

Memasuki perhitungan pada fungsi gaborFeatures

3b1. Lakukan konversi gambar ke dalam bentuk grayscale apabila data gambar belum dalam bentuk grayscale

if size(img,3) == 3
    warning('Data gambar ini akan dikonversi menjadi bentuk grayscale!')
    img = rgb2gray(img);
end

img = double(img);

3b2. Lakukan proses filter pada data gambar menggunakan masing-masing matriks dalam array gabor

[u,v] = size(gaborArray);
gaborResult = cell(u,v);
for i = 1:u
    for j = 1:v
        gaborResult{i,j} = imfilter(img, gaborArray{i,j});
    end
end

* Lakukan proses ekstraksi vektor feature dari data gambar (poin 3b3)

3b3. Lakukan perhitungan pada masing-masing hasil filter diatas (poin 3b3a – 3b3c)

for i = 1:u
    for j = 1:v
	. . .

3b3a. Lakukan proses downsampling untuk mereduksi ukuran hasil filter gabor

gaborAbs = abs(gaborResult{i,j});
gaborAbs = downsample(gaborAbs,d1);
gaborAbs = downsample(gaborAbs.',d2);
gaborAbs = gaborAbs(:);

3b3b. Lakukan normalisasi menggunakan rata-rata dan standar deviasi dari hasil perhitungan sebelumnya
Proses ini dapat dilewati apabila normalisasi tidak dapat diterapkan pada hasil perhitungan gabor

gaborAbs = (gaborAbs-mean(gaborAbs))/std(gaborAbs,1);

3b3c. Masukkan hasil perhitungan ke dalam matriks feature

featureVector =  [featureVector; gaborAbs];

3c. Lakukan perhitungan pada masing-masing data baru
Lakukan perhitungan ekstraksi gabor feature untuk mendapatkan vektor feature dari data baru tersebut
Penjelasan tentang fungsi ini sudah dijelaskan pada perhitungan sebelumnya

matriksFeatureDataBaru = [];
for i=1:jumlahDataBaru
    str=strcat(pathDataBaru,'\',bmpDataBaru(i).name);
    dataBaru = imread(str);    
    
    matriksFeatureDataBaru(:, i) = gaborFeatures(dataBaru(:,:,1), gaborArray, gaborFE.d1, gaborFE.d2);
end

4. Lakukan perhitungan pada masing-masing data baru (poin 4a – 4c)

for i=1:jumlahDataBaru
. . .

4a. Hitung jarak Euclidean antara vektor feature data baru dengan vektor feature dari semua contoh data

jarakEuclidean = [];
for j=1:jumlahContohData
	tmp = (norm(matriksFeatureDataBaru(:,i) - matriksFeatureContohData(:,j)))^2;
	jarakEuclidean = [jarakEuclidean tmp];
end

4b. Ambil jarak paling minimal sebagai jawaban gambar contoh data yang paling sesuai dengan gambar data baru

[~, idxMinimal] = min(jarakEuclidean);

4c. Tampilkan hasil akhir pada layar

subplot(5,jumlahContohData,sp(i))
imshow(str)
title(strcat('Data ',int2str(i)),'Position',[25,0])

subplot(5,jumlahContohData,sp(i)+1)
imshow(uint8(daftarGambar(:,:,idxMinimal)))
title('Dikenali sebagai','Position',[75,0])


Hasil akhir adalah: (klik untuk perbesar gambar)

gabor 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 *

12 pemikiran di “Algoritma Gabor Filter