Algoritma Kekre’s Transform


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 Kekre’s Transform.
Mirip seperti Algoritma Gabor Filter, algoritma ini digunakan untuk mengekstrak feature dari sebuah gambar, agar kemudian dapat dilakukan perbandingan dari masing-masing feature tersebut.



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 ukuran resize dari masing-masing gambar
Nantinya setiap gambar akan diubah ukurannya menjadi gambar persegi dengan panjang dan tinggi yang sama
Resize ini diperlukan karena perhitungan metode ini memerlukan input matriks dalam ukuran yang sama
Diasumsikan dalam kasus ini, ukuran resize gambar adalah 128

ukuranResize=128;

1b. Tentukan parameter amin dan amax untuk digunakan dalam perhitungan konversi matriks menjadi grayscale
Nantinya semua nilai dibawah nilai minimal akan dikonversi menjadi angka 0,
dan semua nilai diatas nilai maksimal akan dikonversi menjadi angka 1
Diasumsikan dalam kasus ini, nilai amin adalah 0 dan amax adalah 127

gray.amin = 0;
gray.amax = 127;

* 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 Kekre’s Transform
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 3a – 3d)

[res] = kekre(ukuranResize, gray, ...
    pathDataBaru, bmpDataBaru, jumlahContohData, jumlahDataBaru, daftarGambar);

Memasuki perhitungan pada fungsi kekre

3a. Tentukan jumlah gambar contoh data yang digunakan
Untuk mempercepat perhitungan, jumlah gambar contoh data bisa dikurangi dari data sebenarnya
Diasumsikan dalam kasus ini, karena gambar contoh data yang hanya sedikit,
maka akan digunakan semua contoh gambar tersebut

jumlahGambarTerpilih = jumlahContohData;

3b. Lakukan perhitungan kernel spesifik yang digunakan
kernel yang digunakan dalam kasus ini dihitung dengan cara berikut:
jika terdapat matriks berukuran 5 x 5, maka hasil akhir kernel adalah:
[ 1 1 1 1 1]
[-4 1 1 1 1]
[ 0 -3 1 1 1]
[ 0 0 -2 1 1]
[ 0 0 0 -1 1]

K=zeros(ukuranResize);
for i=1:ukuranResize
    for j=i:ukuranResize
        K(i,j)=1;
    end
end
for i=2:ukuranResize
    K(i,i-1)=(-ukuranResize)+(i-1);
end

* Memasuki proses konversi gambar contoh data ke dalam matriks Z (poin 3c)

3c. Lakukan perhitungan sebanyak jumlah gambar terpilih (poin 3c1 – 3c4)

for i=1:jumlahGambarTerpilih
. . .

3c1. Lakukan pembacaan gambar contoh data,
Kemudian ubah ukurannya sesuai dengan parameter ukuranResize

img=daftarGambar(:,:,i);
img=imresize(img,[ukuranResize ukuranResize]);

3c2. Hitung matriks I dengan cara mengalikan masing-masing kolom data gambar dengan matriks kernel yang sudah ditentukan sebelumnya

I=zeros(ukuranResize);
for j=1:ukuranResize
	L=img(:,j);
	L=double(L);
	M=K*L;
	I(:,j)=M;
end

3c3. Hitung jawaban akhir dengan rumus:
A = K * I * KT
Kemudian lakukan konversi matriks tersebut menjadi gambar sesuai dengan batasan parameter gray

A=K*I*K';
A=mat2gray(A,[gray.amin gray.amax]);

3c4. Untuk memudahkan perhitungan jarak, maka lakukan konversi gambar 2 dimensi menjadi vektor 1 dimensi

Z(:,i)=reshape(A,ukuranResize*ukuranResize,1);

* Memasuki proses konversi gambar data baru ke dalam matriks Y (poin 3d)

3d. Lakukan perhitungan pada masing-masing gambar data baru (poin 3d1 – 3d5)

for i=1:jumlahDataBaru
. . .

3d1. Lakukan pembacaan gambar data baru,
Kemudian ubah ukurannya sesuai dengan parameter ukuranResize

str=strcat(pathDataBaru,'\',bmpDataBaru(i).name);
img=imread(str);
img=imresize(img,[ukuranResize ukuranResize]);    

3d2. Hitung matriks I dengan cara mengalikan masing-masing kolom data gambar dengan matriks kernel yang sudah ditentukan sebelumnya

I=zeros(ukuranResize);
for j=1:ukuranResize
	L=img(:,j);
	L=double(L);
	M=K*L;
	I(:,j)=M;
end

3d3. Hitung jawaban akhir dengan rumus:
A = K * I * KT
Kemudian lakukan konversi matriks tersebut menjadi gambar sesuai dengan batasan parameter gray

A=K*I*K';
A=mat2gray(A,[gray.amin gray.amax]);

3d4. Untuk memudahkan perhitungan jarak, maka lakukan konversi gambar 2 dimensi menjadi vektor 1 dimensi

Y=reshape(A,ukuranResize*ukuranResize,1);

3d5. Lakukan perhitungan pada masing-masing data gambar terpilih (poin 3d5a – 3d5b)

for j=1:jumlahGambarTerpilih        
. . .

3d5a. Hitung jarak Euclidean antara matriks Y dan masing-masing matriks Z

jarakEuclidean=norm(Y-Z(:,j));

3d5b. Ambil jarak paling minimal sebagai jawaban gambar contoh data yang paling sesuai dengan gambar data baru

if (minJarak > jarakEuclidean) & (jarakEuclidean > 0)
	minJarak = jarakEuclidean;
	res(i,2) = j;
end

4. Lakukan perhitungan pada masing-masing data baru
Tampilkan hasil akhir masing-masing gambar pada layar

for i=1:jumlahDataBaru
    str=strcat(pathDataBaru,'\',bmpDataBaru(i).name);

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

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


Hasil akhir adalah: (klik untuk perbesar gambar)

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