Pengenalan Huruf dengan PCA
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
Contents
Saya akan bahas mengenai Algoritma Pengenalan Huruf dengan PCA secara sekilas saja ya, secara umum kita butuh 4 langkah saja yaitu
- pembuatan database
- training PCA
- testing PCA
- pembuatan GUI
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
- huruf yang digunakan hanya terdiri dari huruf kapital latin tanpa simbol
- mempunyai ukuran 63 x 63
- 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
#3 melakukan normalisasi disebut matrix A
Langkah selanjutnya yaitu perhitungan normalisasi sehingga rentang standar deviasi menjadi nol dengan rumus
#4 mengitung matrix covariance
Untuk menghitung nya gunakan rumus sebagai berikut
dengan 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 =
Hasil dari yaitu
Kemudian di tranpose menjadi Eigen_face_tranpose
#8 menghitung projected_images
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
Kemudian
Kemudian menghitung
INGAT BAHWA A punya kolom hanya 1 saja
EigenFaceTranpose adalah
A adalah
Hasil adalah
Ternyata matrix angka 4 dapat direduksi menjadi
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
- mengubah trucolor menjadi grayscale
- mengubah ke binary/black white
- membersihkan noise/ukuran objek kurang dari 100 pixel
- 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