×

Pengenalan Huruf dengan PCA

Pengenalan Huruf dengan PCA

1,360 Views

Pengenalan Huruf dengan PCA yang akan kita bahas kali ini yaitu mengenali huruf atau sering disebut dengan OCR – Optical Character Recognition. Sebelum mengenal lebih jauh, kita wajib mempelajari terlebih dahulu mengenai PCA – Pricipal Component Analist bila dialih bahasakan menjadi AKU – Analisis Komponen Utama. Algoritma ini digunakan untuk mengurangi agar menjadi lebih ringkas secara linear. Beberapa data yang mempunyai dimensi tinggi seperti sebuah record data mempunyai baris dan kolom seperti layaknya gambar. Tentu ada kesulitan tersendiri untuk mencari fitur selectionya alangkah lebih baik dimensi tersebut dikurangi. Pembahasan mengenai PCA bisa kalian baca disini PCA untuk Reduksi Dimensi

Pada link diatas akan langsung kalian pahami ketika membaca sub bab Kasus Lain, Apakah PCA dapat digunakan untuk image processing. Kalian bayangin sendiri ketika sebuah gambar ukuran 28 x 28 bila kita plotkan tidak akan mungkin bisa! mata manusia saat ini dan komputer saat ini pun hanya bisa dipahami oleh plot 3 dimensi dengan sumbu X, Y, dan Z. Oleh sebab itu ukuran 28 x 28 akan direduksi menjadi 3 x 1 saja! Dalam kasus lain, visualisasi juga bisa menggunakan teknik t-SNE T-distributed Stochastic Neighbor Embedding

Pengenalan Huruf dengan PCA

Saya akan bahas mengenai Algoritma Pengenalan Huruf dengan PCA secara sekilas saja ya, secara umum kita butuh 4 langkah saja yaitu

  1. pembuatan database
  2. training PCA
  3. testing PCA
  4. pembuatan GUI
See also  #Video Tutorial - Belajar Python Bagian 1

Sebelum membahas lebih lanjut, Algoritma Pengenalan Huruf dengan PCA akan diterapkan pada sebuah gambar yang mengandung huruf sehingga kalian wajib tahu mengenai dasar-dasar pengolahan citra digital.

Pembuatan Database Pengenalan Huruf dengan PCA

Pengenalan Huruf dengan PCA yang nanti kita buat mempunyai batasan masalah ya! kalian harus ingat bahwa setiap penelitian itu wajib mempunyai batasan masalah agar tidak melebar kemana-mana. Berikut batasan masalah yang diterapkan

  1. huruf yang digunakan hanya terdiri dari huruf kapital latin tanpa simbol
  2. mempunyai ukuran 63 x 63
  3. menggunakan beragam jenis font

Untuk membuat generator huruf dalam gambar seperti berikut, saya lebih suka menggunakan bahasa Java karena lebih mudah untuk menentukan jenis Font yang terinstall di Komputer

Jadi ada total sekitar 3.718 file gambar sehingga dari total A-Z ada 26 karakter@ 143 jenis font yang berbeda. Kalian bisa perhatikan setiap huruf terletak di center/tengah. Kode java agak panjang, jadi tidak saya tampilkan. Hal yang paling penting disini yaitu cara memberikan nama untuk setiap record, dengan aturan sebagai berikut xx-xx.jpg artinya 2 diawal menunjukan no huruf latin. Misalkan 01-185.jpg itu artinya huruf A

Training Database

Training database mengikuti https://softscients.com/2020/11/21/pca-untuk-reduksi-dimensi/  yang ada di link tersebut. Lebih detailnya dijelaskan dibawah ini akan sangat panjang sekali, jadi mohon bersabar cara bacanya

#1 persiapan matrix sample

Misalkan ada 3 sample dengan tiap matrix nya mempunyai ukuran 9 baris*3 kolom seperti berikut

#2 mengubah matrix menjadi vektor dan menghitung rerata nya

Perhatikan cara menyusun array menjadi vektor

    \[ \begin{pmatrix} 1 & 2 & 3\\ 4 & 5 & 6 \end{pmatrix} menjadi \begin{pmatrix} 1 \\ 2 \\ 3 \\ 4 \\ 5 \\ 6 \end{pmatrix} \]

 

#3 melakukan normalisasi  disebut matrix A

Langkah selanjutnya yaitu perhitungan normalisasi sehingga rentang standar deviasi menjadi nol dengan rumus

    \[ normalisasi = vektor-rerata \]

See also  Library SQLite untuk Menyimpan Jutaan record

#4 mengitung matrix covariance

Untuk menghitung nya gunakan rumus sebagai berikut

    \[ L = A^{T} *A \]

dengan A^{T} adalah transpose matrix

#5 mencari nilai eigen_value dan eigen_vektor

Saya tidak akan jelasin mengenai eigen value dan vektor, pokoknya rumus yang digunakan di Matlab seperti berikut

 [x,alpha] = eig(L);

Oiya jangan kaget kalau hasil diatas mempunyai beda-beda hasil karena eigen adalah solusi non trivial alias banyak solusi

#6 sorting nilai eigen_vektor berdasarkan eigen_value

Perhatikan dengan seksama!
Nilai eigen_value (alpha) itu yang penting adalah nilai diagonalnya!
Ada urutan warna biru-merah-hijau. Itu adalah urutan secara ascending! Mulai dari nilai terkecil menuju ke terbesar!
Nah itu harus diubah menjadi menjadi hijau-merah-biru atau urutans secara descending

Maka eigen_vektor pun juga berubah posisi nya! Mengikuti urutan eigen_value! Pada proses ini yang ada 2 matrix yang sangat penting yaitu matrix rerata dan matrix eigen_vektor yaitu

#7 menghitung eigen_face_tranpose = ( A*eigen_vektor)^{T }

Hasil dari A*eigenvektor yaitu

Kemudian di tranpose menjadi Eigen_face_tranpose

 

#8 menghitung projected_images

ProjectedImage(n) = EigenFaceTranpose*A(1:end,n)

n : kolom ke n

Misalkan saja untuk n=1

Eigen_face_tranpose adalah

Maka A(1:end,1) adalah

Maka bila kedua matrix dikalikan akan menghasilkan

Bila diteruskan untuk n=2,n=3

 

Matrix projected_images ini lah yang yang dinamakan teknik reduksi dimensi! Ukuran nya menjadi 3baris*3kolom saja. Misalkan citra semula berukuran 9 baris * 3 kolom * 3 record kemudian di vektor baris kan menjadi 27 baris * 3 kolom dapat di ekstrak menjadi 3 baris * 3 kolom dinamakan projected_images digunakan sebagai matrix input/ciri fitur

 

Testing Algoritma Pengenalan Huruf dengan PCA

Bagaimana proses jika ada data yang lain? Semisalnya untuk proses testing? Misalkan kita ingin meng input kan angka 4. Bagaimana angka ‘4’ dapat direduksi ‘secara sendirian?

Ubah ke matrix to vektor seperti point 2, kita beri nama VektorSample

See also  Bagaimana mengubah model PyTorch menjadi ONNX

Kemudian MatrixNormalisasi [A]  = mean - VektorSample

Kemudian menghitung ProjectedImage = EigenFace Tranpose*A

INGAT BAHWA A punya kolom hanya 1 saja

EigenFaceTranpose adalah

A adalah

Hasil EigenFaceTranpose*A adalah

Ternyata matrix angka 4 dapat direduksi menjadi   [-0.339;             1.2;        0]

Hitung Jarak Kemiripan

Untuk menghitung jarak kemiripan, maka kalian bisa menggunakan eucleid antara

dengan

dicari nilai terkecil.

Aplikasi Pengenalan Huruf dengan PCA

Pembuatan aplikasi pengenalan huruf dengan PCA dapat kita buat menggunakan Matlab berbasis GUI. Untuk bekerja dengan gambar, maka pengetahuan tentang Image Processing wajib kalian pelajari terlebi dahulu. Cukup gunakan toolbox di Matlab saja untuk mempermudah pengolahan tersebut.

Operasi Blob

Operasi blob berupa operasi morfologi yang didalam untuk mengetahui properties sebuah objek dalam mode binary (hitam putih), dimana putih adalah gambar objek/foreground dan hitam adalah background. Berikut kode yang kita gunakan

I = imread(lokasi_file);
if ndims(I)==3
    gray = rgb2gray(I);
else
    gray = I;
end

bw = ~im2bw(gray);
bw = bwareaopen(bw,100);
H = regionprops(bw,'Image','Centroid'); %%operasi blob

Dari kode diatas beberapa operasi pendahuluan yaitu

  1. mengubah trucolor menjadi grayscale
  2. mengubah ke binary/black white
  3. membersihkan noise/ukuran objek kurang dari 100 pixel
  4. menerapkan operasi blob yaitu image, dan centroid nya

Operasi PCA

Selanjutnya variable H yang merupakan struct akan dilooping satu-persatu dan dilakukan operasi PCA

posisixy = [];
for i = 1 : size(H,1)    
    gambar  = H(i).Image;    
    bw = im2bw(gambar); 
    bw = cropingcitra(bw);
    bw = imresize(bw,[40,30]);
    hasil_ekstraksi = matrix2vector(bw);
    T = hasil_ekstraksi';
    [value,index]= recognitionpca(T,rerata,projected_images,eigen_face_transpose);  
    [x,y,z] = fileparts(DATA.resume_data_vektor.nama_file{index});    
    text(H(i).Centroid(1),H(i).Centroid(2),[ huruf(str2num(y(1:2)))],'FontSize',15,'Color','r')   
end

didalam function diatas ada function cropingcitra() yang digunakan untuk memastikan ukurannya agar sesuai dengan dataset pelatihan. Sedangkan untuk operasi pengenalan menggunakan function recognitionpca(). Berikut tampilkan GUI Pengenalan Huruf dengan PCA

 

Download Source Code

Download

 

You May Have Missed