BAB 3 ANALISIS DAN PERANCANGAN SISTEM
3.1
Analisis
3.1.1 Analisis Masalah Hingga saat ini sudah banyak dilakukan penelitian tentang pengenalan karakter, yang salah satunya digunakan untuk pengenalan plat nomor kendaraan pada sistem parkir. Dalam realisasinya, sistem pengenalan plat nomor kendaraan tersebut diinginkan memiliki accuracy, reliability, dan repeat ability yang mencapai 90%. Serta memiliki kecepatan dalam prosesnya. Karena diharapkan pengemudi tidak menunggu lama untuk tiket keluar, apalagi melakukan kesalahan pengenalan. Dalam mengeluarkan plat nomor suatu kendaraan, polisi telah menetapkan suatu standar bagi plat tersebut. Baik standar karakter yang dicetak, tebal karakter tersebut, ukuran dari karakter maupun posisi karakter tersebut. Tetapi dalam kenyataannya banyak plat nomor kendaraan yang tidak sesuai dengan standar dari kepolisian yang ada. Hal ini dikarenakan oleh adanya pembuat plat nomor kendaraan, kebanyakan di jalanjalan, yang membuat plat nomor kendaraan yang berbeda dari standar yang dikeluarkan oleh kepolisian sesuai dengan keinginan pembeli atau pemesan. Sebagai contoh, di jalan-jalan banyak ditemukan kendaraan dengan plat nomor kendaraan yang memiliki standar yang berbeda dari yang dikeluarkan oleh kepolisian, seperti karakter ‘I’ ada yang memiliki garis horizontal di atas dan bawahnya, ada juga yang tidak memilikinya. Di samping itu, terdapat juga karakter yang memiliki kemiripan, seperti B dan 8, S dan 5, dll. Selain itu ketebalan dan posisi dari karakter tersebut pun dapat berlainan.
73
74 Selain plat dengan standar yang berbeda, ada juga beberapa masalah lain yang ditemukan, seperti noise yang tercipta karena pencahayaan yang kurang, kotoran yang terdapat di plat tersebut dan pencahayaan yang tidak merata pada plat tersebut.
3.1.2 Analisis Metode Metode soft computing yang dapat digunakan dalam proses pengenalan karakter pada plat nomor kendaraan ada 4 buah, yaitu Fuzzy Logic, Neural Network, Genetic Algorithm dan Bayesian Network. Masing-masing metode memiliki kelebihan dan kekurangannya sendiri, yaitu:
Fuzzy Logic Kelebihan : -
Computational usage lebih cepat
-
Tidak perlu melakukan training
-
Toleransi ketidakpastian dan kegagalan yang besar
Kekurangan :
Kemampuan optimasi yang kurang.
Neural Network Kelebihan : -
Memiliki tingkat keakuratan yang tinggi
-
Memiliki kemampuan pembelajaran yang baik
-
Kemampuan optimasi lebih baik dari fuzzy tetapi lebih buruk dari Genetic Algorithm.
75 Kekurangan :
-
Waktu training yang lama
-
Waktu operasi yang tidak terlalu baik
Genetic Algorithm Kelebihan :
-
GA memiliki kemampuan untuk mencari nilai optimal secara paralel, melalui proses kerjasama antara berbagai unit, yang disebut kromosom individu.
-
GA tidak memerlukan perhitungan matematika yang rumit seperti differensial yang diperlukan oleh algoritma optimisasi yang lain.
Kekurangan :
-
Tidak memiliki rumusan yang pasti, bagaimana mentransfer parameter permasalahan ke dalam kode genetik. Dengan kata lain, hal ini memerlukan pengalaman dan wawasan dari desainer.
-
Banyak parameter yang perlu diset secara baik agar proses evolusi dalam GA berjalan sesuai dengan yang diharapkan.
-
Penentuan rumus menghitung fitness merupakan hal yang sangat penting dan mempengaruhi proses evolusi pada GA. Sayangnya tidak ada prosedur yang baku bagaimana menentukan rumus tsb.
Bayesian Network Kelebihan : -
Dapat mengakomodasikan ketidakpastian.
76 Kekurangan : -
Memerlukan seorang pakar dalam implementasinya
-
Sangat sulit untuk menentukan suatu variabel menjadi numerik.
Dari masing-masing kelebihan dan kekurangan di atas, penulis memutuskan untuk menggunakan metode Fuzzy Logic dengan pertimbangan : -
Computational usage yang cepat, karena sistem pengenalan plat nomor kendaraan ini membutuhkan waktu proses yang cepat.
-
Mudah dimengerti dan dibuat.
-
Lebih sederhana dalam pembuatannya dibanding yang lain.
-
Lebih fleksibel terhadap jenis karakter yang baru ataupun berbeda.
-
Memiliki toleransi yang baik terhadap data yang tidak lengkap, seperti karakter yang terhilang bagiannya.
Metode Fuzzy Logic pun memiliki banyak sekali cara dalam melakukan proses pengenalan karakter. Dari berbagai macam literatur yang ada, penulis memutuskan untuk menggunakan teknik fuzzy logic dengan menggunakan Gaussian Fuzzification function. Dalam beberapa aplikasi fuzzy, membership function dipilih secara trapezoidal, triangular, atau Gaussian bergantung kepada ranges yang dipilih.
Ini
memungkinkan optimisasi dari variable-variabel linguistik untuk sets of rule yang sangat besar menggunakan efficient gradient procedures dan meyediakan kemudahan interpretasi dari crisp logical rules. Ekstraksi fitur yang digunakan adalah eucledian distance dan zoning berdasarkan paper yang sama. Penulis memilih teknik ini dengan pertimbangan :
77 -
Hasil yang diperoleh dari penelitian pengenalan tulisan tangan oleh Vamsi K. Madasu, Brian C. Lovell, dan M. Hanmandlu adalah sebagai berikut :
Memiliki tingkat pengenalan lebih dari 99%. -
Sama – sama melakukan pengenalan karakter.
-
Pengenalan karakter pada tulisan tangan lebih sulit dibandingkan dengan pengenalan karakter pada plat nomor kendaraan sehingga hasil yang akan diperoleh minimal sama.
3.1.3 Analisis Ruang Lingkup Plat nomor yang digunakan dalam sistem ini adalah plat nomor standar yang merupakan keluaran dari Ditlantas Polri. Contoh plat yang standar :
Gambar 3.1 : Gambar plat standar
78 Contoh plat yang tidak standard :
(1)
(2)
(3) Gambar 3.2 : Gambar plat tidak standar
Alasannya adalah : Pada plat yang pertama jarak dari kode wilayah plat (Huruf B mewakili daerah Jakarta) terhadap karakter ’I’ tidak sesuai dengan contoh standard, kemudian jarak dari angka yang satu ke angka lainnya tidak sama (angka 0 dan 7), Pada plat yang kedua karakter yang tertera terlalu tipis, sehingga saat di-opening cenderung ada bagian yang terputus dan akhirnya dikenali sebagai 2 karakter yang berbeda. Sedangkan pada plat yang ketiga, karakter ’I’ dan ’O’ yang ada di dalam plat tidak standar. Karakter ’I’ yang standar adalah yang mempunyai garis horizontal kecil di atas dan bawahnya, sedangkan ’O’ yang standar adalah yang mempunyai garis positive slant di tengahnya.
79 Berikut adalah layout pengambilan citra plat :
Gambar 3.3 : Gambar Layout Pengambilan Citra Plat
3.1.4 Pemecahan Masalah Penelitian ini akan memberikan alternatif penyelesaian untuk mengatasi masalah-masalah yang disebutkan di atas. Alternatif yang akan diberikan antara lain : 1. Pembuatan tahap preprocessing yang dapat menangani masalah tersebut. 2. Penggunaan fuzzy logic untuk menangani masalah pengenalan karakter. Hasil akhir dari penelitian ini adalah karakter-karakter yang ditampilkan dalam program sebagai wujud pengenalan dari citra plat nomor kendaraan yang dilakukan secara offline.
80 3.1.5 Pengguna Sistem Sistem pengenal karakter yang akan dibuat dapat digunakan dalam sebuah sistem parkir di mal, universitas, maupun di kantor-kantor. Namun, sistem ini masih memerlukan sistem lainnya antara lain sistem pre-processing dan sistem archiving atau sistem yang menggunakan database. Sistem ini masih membutuhkan seorang untuk melakukan perawatan sistem, tetapi perawatan dilakukan secara periodik sehingga biaya yang dikeluarkan tidak besar.
3.2
Perancangan Walaupun dalam implementasinya nanti proses pengenalan plat nomor
kendaraan ini akan berjalan secara online, namun karena keterbatasan alat maka dalam penelitian ini akan dilakukan secara offline terlebih dahulu. Hal tersebut dilakukan mengingat fokus yang akan diteliti pada penelitian ini adalah kemampuan metode fuzzy logic dalam mengenali berbagai karakter dalam plat nomor yang akan diujikan. Sebelum program dijalankan untuk mengenali plat nomor kendaraan yang akan diberikan ada beberapa proses manual yang dilakukan. Proses-proses tersebut dijelaskan seperti pada gambar berikut :
81
Gambar 3.4 : Gambar Diagram Alir Sistem Dalam prosesnya, kamera yang digunakan untuk mengambil citra mobil adalah Sony Cybershot 5 megapixel. Program yang digunakan dalam meng-crop citra plat nomor kendaraan adalah
Macromedia Fireworks 8. Spesifikasi Komputer yang
digunakan dalam memproses citra memiliki spesifikasi :
82 -
AMD Athlon 64 3000+
-
Memory VGEN SDRAM DDR 1 GB
-
Windows XP Professional SP2 Perancangan piranti lunak yang dilakukan terdiri dari :
-
Pemilihan program pembuatan piranti lunak
-
Gambaran umum piranti lunak
-
Spesifikasi berkas
-
Detail perancangan
3.2.1 Pemilihan Program Pembuatan Piranti Lunak Program yang dipilih untuk pembuatan piranti lunak pengenalan karakter pada plat nomor kendaraan adalah Matlab 7.1. Matlab 7.1 dipilih karena di dalamnya terdapat berbagai macam fungsi image processing yang dapat langsung dipakai secara mudah, sehingga dapat menghilangkan waktu pembuatan fungsi yang serupa pada program lain. Selain itu, help menu yang diberikan oleh Matlab 7.1 pun sangat jelas dan lengkap sehingga jika merasa fungsi tersebut dinilai tidak memuaskan penulis dapat mencari algoritma fungsi yang sejenis pada link yang diberikan. Selain itu, walaupun Matlab 7.1 merupakan program matematika, ia juga menyediakan pemrograman GUI yang sederhana, mudah dan cukup lengkap untuk digunakan.
83 3.2.2 Gambaran Umum Piranti Lunak 3.2.2.1 Gambaran Pengenalan Karakter Secara garis besar, keseluruhan proses ini dapat dikelompokkan menjadi 3 yakni, pre-processing, feature extraction, dan post-processing. Pada tahap preprocessing akan dilakukan pengolahan citra dan removing noise. Setelah citra telah bersih dari noise akan dilakukan proses segmentasi dan thinning pada tiap-tiap karakter. Selanjutnya, pada tahap ekstraksi fitur akan dilakukan pengambilan fitur-fitur yang ada pada karakter umum yang ada dalam plat nomor kendaraan agar dapat dikenali lebih lanjut. Terakhir pada tahap post-processing akan dilakukan pengenalan citra menjadi karakter yang paling dianggap mirip.
3.2.2.1.1 Pre-Processing Pada tahap ini, proses yang dilakukan adalah pengolahan citra, noise-removing, segmentation, dan thining. Tujuan dari pre-processing adalah mempersiapkan citra awal menjadi citra yang siap diekstrak.
84
Gambar 3.2 : Gambar Diagram Alir Preprocessing
85 3.2.2.1.2 Image Cropping Image cropping dilakukan untuk mengambil bagian dari suatu citra dan menyimpannya sebagai citra baru. Pseudocode : Mulai dari parameter x awal dan y awal yang dikirimkan Selama kurang dari x akhir Selama kurang dari y akhir Salin nilai pixel ke dalam array 2 dimensi yang baru
3.2.2.1.3 Image resizing Pada tahap ini dilakukan penyekalaan dari citra plat asli ke dalam ukuran yang telah ditentukan sebelumnya. Hal ini dilakukan untuk menormalisasi ukuran agar semua citra mempunyai ukuran yang sama untuk diproses. Semua citra plat asli berukuran apapun akan diskala ulang sehingga terjadi normalisasi, yakni berukuran 100 x 300 pixel karena ukuran tersebut dianggap ukuran paling optimal dan tidak terlalu besar untuk diproses sehingga tidak memakan waktu yang lama tetapi juga cukup besar untuk segmentasi suatu karakter sehingga karakter tersebut tidak mengalami perubahan bentuk. Terkadang jika pada ukuran sebenarnya jarak antar objek sangat kecil jika citra diperkecil maka kedua objek tersebut akan menyatu. Untuk menghindari hal itu lah maka ukuran ini dipilih.
86 3.2.2.1.4 Gray-Scale Pada tahap ini, citra akan diubah kedalam bentuk gray-scale yaitu citra dimana tiap pixelnya akan bernilai antara nol hingga 255. Sehingga citra yang dihasilkan berupa citra keabuan . gray-scale image. Pseudocode : Berdasarkan
http://techpubs.sgi.com/library/tpl/cgi-bin/
getdoc.cgi?coll=0650&db=man&fname=/usr/share/catman/p_man/cat3/il/ilGrayImg.z, pseudocodenya adalah : Untuk setiap pixel gray = red*.30 + green*.59 + blue*.11
3.2.2.1.5 Image Adjusting Tahap ini dilakukan untuk me-normalisasi warna keabuan agar terjadi sebaran yang menyeluruh, sehingga hasil binarisasi yang akan dilakukan menjadi lebih baik.
3.2.2.1.6 Binarisasi Pada tahap ini, citra keabuan akan diubah menjadi citra hitam putih. Berbeda dengan citra keabuan, tiap-tiap pixel dari citra hitam putih akan memiliki nilai nol atau satu, sehingga diperlukan nilai batas ambang yang akan menentukan apakah pixel tersebut itu bernilai nol atau satu. Dalam menentukan batas ambang (threshold) dapat dilakukan dengan 2 cara, yaitu nilai statik, nilai yang tetap untuk setiap citra, biasanya bernilai 128. Dan yang satu lagi adalah nilai yang diambil berdasarkan sebaran warna pada citra tersebut, yaitu nilai rata-rata warna pada citra tersebut.
87 Pada sistem ini, cara yang diambil adalah cara kedua, yaitu nilai ambang yang ditentukan dengan cara mencari rata-rata untuk setiap citra. Sehingga pada setiap citra nilai ambang tersebut akan berbeda. Pseudocode nilai ambang : Jumlahkan semua nilai intensitas pada setiap pixel Hasilnya dibagi terhadap jumlah pixel pada citra Pseudocode binarisasi : Untuk setiap pixel Jika nilai pixel > nilai ambang Pixel = 1 Selain itu Pixel = 0
3.2.2.1.7 Labeling Pada tahap ini, dilakukan penggabungan pixel yang bernilai 1 agar menjadi 1 objek dengan 8-connected pixel. Setiap objek bernilai berbeda satu dengan yang lainnya. Sebelum tahap labeling, harus didahului dengan tahap binarisasi. Pseudocode : Scan semua pixel pada citra dari atas ke bawah dan dari kiri ke kanan k=1 Jika pixel = 1 Jika pixel di atas = 1 dan pixel di kiri = 0 Label = label di atas
88 Jika pixel di atas = 0 dan pixel di kiri = 1 Label = label di kiri Jika pixel di atas = 1 dan pixel di kiri = 1 Label = label di atas Jika pixel di atas = 0 dan pixel di kiri = 0 Label = k K=k+1 Lainnya Label = 0 Scan semua pixel pada citra dari atas ke bawah dan dari kiri ke kanan Jika label > 0 Jika label di kanan > 0 Jika label di kanan < label Label = label di kanan
3.2.2.1.8 Removing Noise Pada plat nomor kendaraan sering kali ada noise-noise yang menganggu jalannya pengenalan karakter, contohnya angka-angka dibawah garis nomor plat, garis panjang dibawah nomor plat, adanya titik-titik yang menempel pada plat. Untuk itu, objek-objek yang tidak diperlukan ini akan dihilangkan. Objek-objek tersebut sudah ditentukan sebelumnya, yaitu objek yang memiliki tinggi kurang dari 45 pixel atau panjang kurang dari 5 pixel, objek yang memiliki panjang lebih dari 150 pixel dan tinggi kurang dari 45 pixel; dan juga jika panjang objek lebih besar dari 150 dan tinggi lebih
89 besar dari 45 maka objek tersebut dapat dipastikan menempel dengan garis panjang pada plat. Maka yang dihilangkan adalah garis panjangnya saja. Terakhir, jika panjang objek lebih besar dari 60 dan tinggi lebih besar dari 45 maka dapat dipastikan bahwa karakter tersebut menempel satu sama lain. Maka objek tersebut dibagi 2. Algoritma untuk proses ini adalah : Untuk setiap label yang ada pada citra Tentukan tinggi pixel paling kecil Tentukan tinggi pixel paling besar Kurangkan tinggi pixel paling besar terhadap pixel paling kecil Tentukan panjang pixel paling kecil Tentukan panjang pixel paling besar Kurangkan panjang pixel paling besar terhadap pixel paling kecil Jika tinggi < 45 atau panjang < 5 Ubah semua label tersebut menjadi 0 Jika panjang > 150 dan tinggi < 45 Ubah semua label tersebut menjadi 0 Jika panjang > 150 dan tinggi > 45 Cari tinggi objek yang paling banyak muncul Ubah label paling bawah sebanyak tinggi tadi menjadi 0 Jika panjang > 60 dan tinggi > 45 X1 = panjang objek / 2 Untuk setiap label dengan posisi x = x1 Ubah label menjadi 0
90 3.2.2.1.9 Segmentasi Tahap ini dilakukan setelah tahap pengolahan citra selesai dilakukan. Karena anggapannya setelah pengolahan citra dilakukan objek yang tersisa pada citra adalah karakter-karakter yang siap dikenali. Segmentasi dilakukan dengan tujuan memisahkan karakter yang satu dengan yang lain pada citra. Sehingga hasil segmentasi adalah citracitra kecil yang berisi karakter yang siap diproses lebih lanjut. Dalam segmentasi ini, yang dilakukan adalah meng-crop setiap objek yang ditemukan. Setelah itu, ukuran objek tersebut dinormalisasi menjadi ukuran yang telah ditentukan sebelumnya, yang dalam hal ini adalah 42 x 32 pixel karena ukuran tersebut dianggap ukuran paling optimal, tidak terlalu besar untuk diproses sehingga memakan waktu yang lama tetapi juga memuat informasi yang cukup untuk eksraksi fitur. Sehingga proses yang dilakukan akan sangat efektif.
Pseudocode : Untuk setiap label yang ada pada citra xMax = posisi x max objek + 2 xMin = posisi x min objek – 2 yMax = posisi y max objek + 2 yMin = posisi y min objek – 2 crop citra dengan posisi xMin, xMax, yMin, yMax ubah ukuran hasil crop menjadi 42 x 32
91 3.2.2.1.10 Thinning Thinning merupakan proses yang umum dari preprocessing. Thinning dilakukan untuk mengekstrak kerangka dari sebuah objek sebagai hasilnya. Tujuan dari thinning ini adalah menggambarkan sifat – sifat objek yang umum dan untuk mengurangi citra awal menjadi representasi yang lebih sederhana. Thinning dilakukan pada citra biner agar menghasilkan citra biner dengan lebar sebesar 1 pixel. Pseudocode : Koordinat_y = y Koordinat_x = x Y=0 X=0 Jika citra(x,y) = hitam Pixel = 1 Selain itu Pixel = 0 Selama y < tinggi citra lakukan Selama x < lebar citra lakukan Salin array ke tempArray X=x+1 Y = y+1 Lakukan selama citra belum tipis Selama y < tinggi citra lakukan Selama x < lebar citra lakukan
92 Jika pixel = 0 X=x+1 Selanjutnya Periksa kondisi 8-neighbour Hitung banyak tetangga Jika banyak tetangga antara 2 sampai 6 dan tetangga 4 dan 6 tidak putih Pixel hitam pada posisi tersebut dijadikan putih X=x+1 Y=y+1 Selama y < tinggi citra lakukan Selama x < lebar citra lakukan Jika pixel = 0 X=x+1 Selanjutnya Periksa kondisi 8-neighbour Hitung banyak tetangga Jika banyak tetangga antara 2 sampai 6 dan tetangga 1 dan 3 tidak putih Pixel hitam pada posisi tersebut dijadikan putih X=x+1 Y=y+1
93 3.2.2.1.11 Dilasi Dilasi adalah salah satu proses morfologi citra yang digunakan untuk membuat objek menjadi lebih besar. Operasi ini dilakukan dengan menggunakan structuring element yang telah ditentukan sebelumnya. Nilai maksimum dari structuring element tersebut yang digunakan untuk menentukan nilai pixel tersebut. Pseudocode : Untuk setiap pixel pada citra Tempatkan structuring element dengan pusat di pixel tersebut Tentukan nilai maksimum yang ada pada structuring element Ubah nilai pixel menjadi nilai maksimum 3.2.2.1.12 Erosi Erosi adalah kebalikan dari dilasi, yaitu salah satu proses morfologi citra yang digunakan untuk membuat objek menjadi lebih kecil. Operasi ini dilakukan dengan menggunakan structuring element yang telah ditentukan sebelumnya. Nilai minimum dari structuring element tersebut yang digunakan untuk menentukan nilai pixel tersebut. Pseudocode : Untuk setiap pixel pada citra Tempatkan structuring element dengan pusat di pixel tersebut Tentukan nilai minimum yang ada pada structuring element Ubah nilai pixel menjadi nilai minimum
94 3.2.2.1.13 Closing Closing
adalah
operasi
morfologi
pada
citra
yang
bertujuan
untuk
menghilangkan lubang yang lebih kecil dari structuring element yang telah ditentukan sebelumnya. Closing dilakukan dengan melakukan dilasi terlebih dahulu lalu hasilnya dilakukan erosi. Dan keduanya menggunakan structuring element yang sama. Pseudocode : Untuk setiap pixel pada citra Lakukan dilasi Untuk setiap pixel pada citra Lakukan erosi
3.2.2.1.14 Opening Opening adalah operasi morfologi yang merupakan kebalikan dari operasi closing. Operasi ini bertujuan untuk membuka lubang yang lebih kecil dari structuring element yang telah ditentukan sebelumnya. Opening dilakukan dengan melakukan erosi terlebih dahulu lalu hasilnya dilakukan dilasi. Dan keduanya menggunakan structuring element yang sama. Pseudocode : Untuk setiap pixel pada citra Lakukan erosi Untuk setiap pixel pada citra Lakukan dilasi
95
3.2.2.2 Ekstraksi Fitur Karakter yang telah disegmentasi akan diproses dengan menghitung fitur-fitur yang unik pada tiap karakter tersebut. Sebelumnya, setiap karakter akan dibagi menjadi 12 sektor untuk mengambil fitur vektor distance dan vektor angle. Selain kedua fitur tersebut, terdapat satu fitur lainnya yaitu occupancies. Berbeda dengan dua fitur sebelumnya, untuk mengambil fitur ini, citra dibagi menjadi empat sektor.
Gambar 3.6 : Gambar huruf ’C’ dengan 12 sektor
Pembagian sektor di atas menggunakan titik pusat yang dihitung dengan rumus : X pusat = (X char max + X char min) / 2 Y pusat = (Y char max + Y char min) / 2
Sektor 1 memiliki sudut dari 0 ƒ sampai 30 ƒ . Sektor 2 memiliki sudut dari 30 ƒ sampai 60 ƒ. Sektor 3 memiliki sudut dari 60 ƒ sampai 90 ƒ . Sektor 4 memiliki sudut dari 90 ƒ sampai 120 ƒ . Sektor 5 memiliki sudut dari 120 ƒ sampai 150 ƒ .
96 Sektor 6 memiliki sudut dari 150 ƒ sampai 180 ƒ . Sektor 7 memiliki sudut dari 180 ƒ sampai 210 ƒ . Sektor 8 memiliki sudut dari 210 ƒ sampai 240 ƒ . Sektor 9 memiliki sudut dari 240 ƒ sampai 270 ƒ . Sektor 10 memiliki sudut dari 270 ƒ sampai 300 ƒ . Sektor 11 memiliki sudut dari 300 ƒ sampai 330 ƒ . Sektor 12 memiliki sudut dari 330 ƒ sampai 360 ƒ .
Gambar 3.7 : Gambar huruf ’C’ dengan 4 sektor
Pembagian citra diatas untuk fitur occupancies dibagi menjadi 4 sektor. Sektor 1 memiliki sudut dari 0 ƒ sampai 90 ƒ . Sektor 2 memiliki sudut dari 90 ƒ sampai 180 ƒ. Sektor 3 memiliki sudut dari 180 ƒ sampai 270 ƒ . Sektor 4 memiliki sudut dari 270 ƒ sampai 360 ƒ .
97
Gambar 3.8 : Gambar Diagram Alir Ekstraksi Fitur
98 3.2.2.2.1 Vektor Distance Vektor distance adalah nilai rata-rata dari setiap eucledian distance dari pusat ke setiap pixel yang ada dalam 1 sektor. Fitur ini dihitung dalam setiap sektor dengan rumus :
Dimana : Dk adalah nilai jarak (Distance) dalam sektor k Nk adalah jumlah pixel putih dalam sektor k Xm adalah koordinat x pada titik pusat Xi adalah koordinat x pada titik pixel ke i Ym adalah koordinat y pada titik pusat Yi adalah koordinat y pada titik pixel ke i
3.2.2.2.2 Vektor Angle Vektor angle adalah nilai rata-rata sudut yang terbentuk dari titik pusat terhadap setiap pixel yang ada dalam 1 sektor. Fitur ini dihitung dalam setiap sektor dengan rumus :
Dimana : Ak adalah nilai sudut (Angle) dalam sektor k nk adalah jumlah pixel putih dalam sektor k
99 Xm adalah koordinat x pada titik pusat Xi adalah koordinat x pada titik pixel ke i Ym adalah koordinat y pada titik pusat Yi adalah koordinat y pada titik pixel ke i
3.2.2.2.3 Occupancy Occupancy adalah proporsi pixel putih dalam satu sektor dibandingkan dengan jumlah pixel putih dalam satu citra.
Ok = nk / nc Dimana : Ok = Occupancies dalam sektor k nk = jumlah pixel putih dalam sektor k nc = jumlah pixel putih dalam satu citra
3.2.2.2.4 End Point End Point adalah jumlah titik akhir dalam 1 sektor. Yang dimaksud dengan titik akhir adalah pixel yang hanya memiliki 1 konektivitas.
Pseudocode untuk ekstraksi fitur : Untuk setiap karakter xPusat = (xMax char + xMin char) / 2 yPusat = (yMax char + yMin char) / 2
100 Bagi citra menjadi 12 sektor terhadap titik pusat Untuk setiap sektor Distance = 0 Angle = 0 Untuk setiap pixel xDistance = xChar – xPusat yDistance = yChar – yPusat Distance = Distance + sqrt(xDistance^2 + yDistance^2) xAngle = xPixel – xPusat yAngle = yPixel – yPusat Angle = Angle + arc tan (yAngle / xAngle) Distance = Distance / jumlah pixel Angle = Angle / jumlah pixel Bagi citra menjadi 4 sektor Untuk setiap sektor Occupancy = jumlah pixel pada sektor / jumlah pixel pada citra
3.2.2.3 Post-processing Setelah semua fitur pada karakter yang ingin dicari, maka akan dilakukan tahap post-processing, yaitu pengenalan karakter tersebut atau defuzzifikasi. Defuzzifikasi dari karakter yang ingin dicari akan dihitung menggunakan fitur-fitur dan rata-rata dan
101 varians dengan menggunakan fungsi fuzifikasi Gaussian. Untuk setiap fitur yang dicari, dihitung membership value-nya terhadap setiap fitur pada semua karakter.
Dimana : „xi adalah nilai derajat keanggotaan pada fitur ke i dan karakter yang dicari mri adalah means / rata-rata pada fitur ke i xi adalah fitur ke i pada karakter yang dicari
adalah varians pada fitur ke i Setelah membership value didapat, maka dicari fuzzy distance karakter yang sedang dicari terhadap semua karakter yang terdapat dalam knowledge base.
Dimana : adalah nilai jarak fuzzy antara karakter input x dan karakter pada knowledge base Nf adalah jumlah fitur (bernilai 28) „xi adalah nilai derajat keanggotaan pada fitur ke i dan karakter yang dicari mri adalah means / rata-rata pada fitur ke i xi adalah fitur ke i pada karakter yang dicari
102 Pseudocode post-processing : Untuk setiap karakter D=0 Untuk setiap fitur M = exponen -(rata-rata pada fitur dan karakter – fitur karakter yang dicari) ^ 2 / 2 * variance pada fitur dan karakter ^ 2 D = d + M ^ 2 * (rata-rata pada fitur dan karakter – fitur karakter yang dicari) ^ 2 D = D / jumlah fitur Karakter = min(semua D)
103
Gambar 3.9 : Gambar Diagram Alir Post-Processing
104 3.2.2.4 Gambaran Pembuatan Knowledge Base Knowledge base pada sistem ini terdiri dari rata-rata dan variance yang diambil dari beberapa sampel yang telah ditentukan. Knowledge base ini terdiri dari 32 fitur untuk setiap karakter. Sehingga setiap karakter mempunyai 32 rata-rata dan 32 variance. Karakter yang ada adalah 10 numerik ( 0-9 ) dan 26 alphabet ( A-Z ). Dalam pembuatannya, pertama-tama ditentukan dulu beberapa sampel untuk setiap karakter yang mewakili karakter tersebut. Lalu untuk setiap sampel dilakukan ekstraksi fitur. Dan dari semua fitur pada masing-masing sampel diambil rata-rata dan varians-nya untuk ditulis ke dalam knowledge base. Dari fitur-fitur di atas, didapat bahwa jumlah fitur yang diekstrak adalah 12 vektor distance, 12 vektor angle, 4 occupancy dan 4 end point. Sehingga total fiturnya berjumlah 32 buah. Knowledge base dibentuk dari rata-rata dan variance yang diambil dari beberapa sample karakter yang sudah ada. Jumlah karakter yang dibuat adalah karakter yang terdapat dalam plat nomor kendaraan di Indonesia, yaitu terdiri dari 10 numerik (0-9) dan 26 alphabet (A-Z). Jadi total karakter yang ada adalah 36 buah. Setiap karakter mempunyai 32 rata-rata dan 32 variance. Jadi knowledge base yang ada berisi 64 * 36 = 2304 fitur. Rumus yang digunakan dalam mencari rata-rata dan varians untuk setiap karakter adalah :
105 Dimana : mri adalah means / rata-rata pada fitur ke i Ni adalah jumlah sample yang digunakan fij adalah fitur ke i dan cluster ke j
adalah varians pada fitur ke i Semua fitur untuk setiap karakter yang telah didapat di atas akan ditulis ke dalam sebuah file untuk disimpan. Sehingga dalam pengenalannya nanti dapat dilakukan dengan cara membaca file tersebut. Pseudocode : Untuk setiap karakter Untuk setiap fitur Mean = 0 Variance = 0 Untuk setiap sampel Mean = mean + fitur Variance = variance + (fitur – mean) ^ 2 Mean = mean / jumlah sampel Variance = variance / jumlah sampel Tulis semua fitur ke dalam file
106
Gambar 3.10 : Gambar Diagram Alir Pembuatan Knowledge Base
107 3.2.3 Spesifikasi berkas Spesifikasi berkas terdiri dari : -
Spesifikasi berkas yang dikenali oleh program
-
Spesifikasi berkas penyimpanan knowledge base
3.2.3.1 Spesifikasi Berkas Yang Dikenali Oleh Program Piranti lunak pengenalan karakter pada plat nomor kendaraan ini dapat membuka berkas dengan format citra jpg atau bmp.
3.2.3.2 Spesifikasi Berkas Penyimpanan Knowledge Base Knowledge base yang sudah diperoleh dari beberapa sampel yang diambil akan disimpan ke dalam file berformat txt. Hal ini dikarenakan pembacaan file txt lebih mudah pemrogramannya dan lebih cepat dalam pemrosesannya nanti.
3.2.4 Detail perancangan Detail perancangan yang dibuat terdiri atas 4 bagian, antara lain : 1. Diagram menu 2. STD (State Transition Diagram) 3. Rancangan layar 4. Rancangan algoritma
108 3.2.4.1 Diagram Menu Menu yang dibuat dalam dalam piranti lunak ini terdiri dari 2 menu dan 2 submenu. Menu yang ada adalah file dan about. Di mana di dalam menu file terdapat 3 submenu lagi, yaitu open, recognize dan exit. Open digunakan untuk membuka file plat yang berekstensi bmp dan jpg, recognize digunakan untuk mengenali plat yang telah dibuka menjadi karakter, dan exit digunakan untuk keluar dari program. Sementara about akan memunculkan jendela baru yang berisi nama-nama pembuat program ini. Berikut adalah diagramnya :
Gambar 3.11 : Gambar Diagram Menu
3.2.4.2 STD Pada STD ini akan dijabarkan alur jalannya program pada aplikasi yang akan dibuat. STD yang dibuat antara lain :
109
Gambar 3.12 : Gambar STD Sistem
110 3.2.4.3 Rancangan Layar 3.2.4.3.1 Layar Utama
Gambar 3.13 : Gambar Layar Utama
111 3.2.4.3.2 Layar Menu File
Gambar 3.14 : Gambar Layar Menu File
112 3.2.4.3.3 Layar Menu File – Open
Gambar 3.17 : Gambar Layar Menu File – Open
113 3.2.4.3.4
Layar About
Gambar 3.16 : Gambar Layar About
3.2.4.4 Rancangan Algoritma Dalam rancangan algoritma ini akan dijelaskan algoritma yang akan dibuat dalam pembuatan aplikasi ini.
3.2.4.4.1 Algoritma before Segmentation Modul BeforeSegmentation digunakan untuk memproses citra asli agar bersih dari noise dan memperbaiki citra sehingga siap disegmentasi. Modul pemanggil akan mengirimkan parameter citra untuk dikirimkan kepada modul ini dan akan mengembalikan citra hasil yang telah diproses dalam modul ini . Pseudocode :
114 Resize citra menjadi ukuran 100 x 300 Grayscaling citra Cari intensitas tertinggi dan terendah Image adjusting dengan nilai intensitas di atas Cari threshold Binarisasi dengan threshold yang ditemukan Jalankan modul noiseRemoval Labeling citra Jika ada objek memiliki panjang > 150 pixel Temukan baris yang memiliki pixel putih terbanyak Temukan nilai tinggi pixel terbanyak Hapus pixel putih pada baris tersebut sebanyak tinggi Jalankan modul noiseRemoval Closing citra dengan structuring element disk dengan panjang 1 pixel Opening citra dengan structuring element line dengan panjang 3 pixel horizontal Opening citra dengan structuring element line dengan panjang 3 pixel vertikal Labeling citra Jika ditemukan objek dengan panjang > 40 dan panjang < 50 Cari kolom tengah dari objek tersebut Ubah semua pixel pada kolom tersebut menjadi hitam Kembalikan citra
115 3.2.4.4.2 Algoritma noiseRemoval Modul ini bertujuan untuk menghapus objek yang dianggap noise pada citra. Sehingga objek akhirnya akan bersih dari noise dan hanya menyisakan karakter yang ingin dikenali. Modul pemanggil akan mengirimkan citra sebagai parameter yang dikirim kepada modul ini. Modul ini sendiri akan mengembalikan citra yang telah diproses. Pseudocode : Labeling citra Untuk setiap objek Jika panjang > 40 dan tinggi < 45 Hilangkan objek Jika tinggi < 45 dan panjang < 5 Hilangkan objek Kembalikan citra
3.2.4.4.3 Algoritma Segmentation Modul ini bertujuan untuk memecah citra plat menjadi beberapa file citra yang berisi karakter yang didapat dari plat tersebut. File citra tersebut akan bertipe bmp. Modul pemanggil mengirimkan citra sebagai parameter yang dikirimkan kepada modul ini. Modul ini akan mengembalikan jumlah karakter yang didapat kepada modul pemanggilnya. Pseudocode : Labeling citra
116 n = banyak objek untuk setiap objek cropping citra labeling citra hasil crop jika objek > 1 Temukan objek terbesar untuk setiap objek jika bukan objek terbesar hilangkan objek resize citra menjadi 42 x 32 thinning citra tulis citra ke dalam bentuk file dengan nama ‘pre(urutan karakter).bmp’ kembalikan n
3.2.4.4.4 Algoritma extractFeature Modul ini bertujuan untuk mengambil fitur-fitur yang ada dalam suatu citra karakter. Modul pemanggil akan mengirimkan parameter citra karakter yang akan diproses. Lalu modul ini akan mengembalikan distance, angle, occupancy dan end point kepada modul pemanggilnya. Pseudocode : Untuk i = 1 hingga 12 hsl = splitImage(citra, i) distance(i) = distanceFeature(hsl, i)
117 angle(i) = angleFeature(hsl, i) occupancy = occupanciesFeature(citra) endpoint = endPointFeature(citra) kembalikan distance, angle, occupancy, endPoint
3.2.4.4.5 Algoritma splitImage Modul ini bertujuan untuk menghilangkan bagian selain sektor yang diinginkan. Modul pemanggil akan mengirimkan parameter citra dan integer n sebagai sektor yang diinginkan. Modul ini akan mengembalikan citra yang berisi sektor yang diinginkan. Pseudocode : [x, y] = findTitikBerat(citra) [cropped ] = divideImage(citra, n, x, y) [atas, bawah] = findAtasBawah(cropped, n) [hsl] = angleCrop(cropped, atas, bawah, n) Kembalikan hsl
3.2.4.4.6 Algoritma distanceFeature Modul ini bertujuan untuk mencari vektor distance yang ada dalam citra karakter. Modul pemanggil akan mengirimkan parameter citra dan integer n sebagai sektor yang diinginkan. Modul ini akan mengembalikan nilai vektor distance. Pseudocode : Distance = 0 Jika ceil(n/3) = 1
118 Awal = [0 tinggi citra + 1] Jika ceil(n/3) = 2 Awal = [lebar citra + 1 tinggi citra + 1] Jika ceil(n/3) = 3 Awal = [lebar citra + 1 0] Jika ceil(n/3) = 4 Awal = [0 0] Untuk setiap pixel pada citra Distance = distance + sqrt((xPixel – awal(1))^2 + (yPixel – awal(2))^2) Distance = distance / jumlah pixel Kembalikan distance
3.2.4.4.7 Algoritma angleFeature Modul ini bertujuan untuk mencari vektor angle yang ada dalam citra karakter. Modul pemanggil akan mengirimkan parameter citra dan integer n sebagai sektor yang diinginkan. Modul ini akan mengembalikan nilai vektor angle. Pseudocode : angle = 0 Jika ceil(n/3) = 1 Awal = [0 tinggi citra + 1] Jika ceil(n/3) = 2 Awal = [lebar citra + 1 tinggi citra + 1] Jika ceil(n/3) = 3
119 Awal = [lebar citra + 1 0] Jika ceil(n/3) = 4 Awal = [0 0] Untuk setiap pixel pada citra angle = angle + tan-1((awal(2) – yPixel) / (awal(1) – xPixel)) angle = angle / jumlah pixel Kembalikan angle
3.2.4.4.8 Algoritma occupanciesFeature Modul ini bertujuan untuk menghitung fitur occupancy yang ada pada citra karakter. Modul pemanggil akan mengirimkan parameter citra dan modul ini akan mengembalikan nilai occupancy. Pseudocode : Hitung jumlah pixel pada citra Untuk i = 1 sampai 4 Cropping sektor i Hitung jumlah pixel pada sektor i Occupancy(i) = jumlah pixel yang ditemukan / jumlah pixel pada gambar Kembalikan occupancy
120 3.2.4.4.9 Algoritma endPointsFeature Modul ini berfungsi untuk mencari end point yang ada dalam citra karakter yang dikirim. Modul pemanggil akan mengirimkan parameter citra. Modul ini akan mengembalikan nilai dari end point yang ditemukan. Pseudocode : endPoint = [0 0 0 0] Untuk semua pixel Cari semua pixel yang hanya memiliki 1 konektivitas Jika pixel tersebut berada dalam sektor 1 endPoint(1) = endPoint(1) + 1 Jika pixel tersebut berada dalam sektor 2 endPoint(2) = endPoint(2) + 1 Jika pixel tersebut berada dalam sektor 3 endPoint(3) = endPoint(3) + 1 Jika pixel tersebut berada dalam sektor 4 endPoint(4) = endPoint(4) + 1 Kembalikan endPoint
3.2.4.4.10 Algoritma findTitikBerat Modul ini berfungsi untuk mencari titik tengah dari karakter yang akan dicari fiturnya. Hal ini dilakukan agar terjadi normalisasi titik tengah. Modul pemanggil akan mengirimkan parameter citra dan akan dikembalikan posisi x dan y yang ditemukan.
121 Pseudocode : Temukan x karakter paling kecil Temukan x karakter paling besar Temukan y karakter paling kecil Temukan y karakter paling besar Y = round((yMin + yMax) /2) X = round((xMin + xMax) /2) Kembalikan x, y
3.2.4.4.11 Algoritma divideImage Modul ini berfungsi untuk mengcrop citra menjadi sektor yang diinginkan. Parameter yang dikirim kepada modul ini adalah citra, integer n sebagai sektor yang diinginkan, x dan y sebagai titik tengah. Modul ini akan mengembalikan citra yang hasil cropping. Pseudocode : Jika ceil(n/3) = 1 Crop citra dengan x+1, 1, lebar-(x+1), y-1 Jika ceil(n/3) = 2 Crop citra dengan 1, 1, x-1, y-1 Jika ceil(n/3) = 3 Crop citra dengan 1, y-1, x-1, tinggi-(y+1) Jika ceil(n/3) = 4 Crop citra dengan x+1, y+1, lebar-(x+1), tinggi-(y+1)
122 Kembalikan citra
3.2.4.4.12 Algoritma findAtasBawah Modul ini berfungsi untuk menentukan titik atas dan titik bawah dari citra yang akan dicrop menjadi sektor. Modul pemanggilan akan mengirimkan parameter citra dan integer n sebagai sektor yang diinginkan. Modul ini akan mengembalikan posisi atas sudut dan bawah sudut pada citra. Pseudocode : Jika n modus 3 = 1 Sudut = 30 Jika n modus 3 = 2 Sudut = 60 Jika n modus 3 = 0 Sudut = 90 Jika ceil(n/3) = 2 atau ceil(n/3) = 4 Sudut = 120 – sudut Y = lebar citra * tan sudut Jika y > tinggi Y = tinggi citra X = tinggi citra/ tan sudut Lainnya X = lebar citra Atas(1) = round(x)
123 Atas(2) = round(tinggi citra – y) Sudut = sudut – 30 Y = lebar citra * tan sudut Jika y > tinggi Y = tinggi citra X = tinggi citra/ tan sudut Lainnya X = lebar citra Bawah(1) = round(x) Bawah(2) = round(tinggi – y) Jika ceil(n/3) = 2 Atas(1) = lebar citra – atas(1) Bawah(1) = lebar citra – bawah(1) Jika ceil(n/3) = 3 atas(1) = lebar citra - atas(1) bawah(1) = lebar citra - bawah(1) atas(2) = tinggi citra - atas(2) bawah(2) = tinggi citra - bawah(2) jika ceil(n/3) == 4 atas(2) = tinggi citra - atas(2) bawah(2) = tinggi citra - bawah(2) kembalikan atas dan bawah
124 3.2.4.4.13 Algoritma angleCrop Modul ini berfungsi untuk menghilangkan pixel putih selain yang berada pada sektor yang diinginkan. Modul pemanggil akan mengirimkan parameter citra, array atas dan bawah yang telah ditemukan pada modul findAtasBawah dan integer n sebagai sektor yang diinginkan. Modul ini akan mengembalikan citra yang telah dicrop. Pseudocode : jika ceil(n/3) == 1; mulai = [1 tinggiCitra] jika ceil(n/3) == 2 mulai = [lebarCitra tinggiCitra] jika ceil(n/3) == 3 mulai = [lebarCitra 1] jika ceil(n/3) == 4 mulai = [1 1] jika atas(1) != mulai(1) dan atas(2) != mulai(2) panggil modul areaHidden(citra, mulai(1), mulai(2), atas(1), atas(2), 1, tinggi) jika bawah(1) != mulai(1) dan bawah(2) != mulai(2) panggil
modul
areaHidden(citra,mulai(1),
mulai(2),
bawah(1),
bawah(2),0, tinggi) jika bawah(2) == atas(2) && bawah(1) > mulai (1) && bawah(1) < lebarCitra untuk i = bawah(1)+1 hingga lebarCitra untuk j = 1 : tinggiCitra
125 pixel pada i,j jadikan hitam elseif bawah(2) == atas(2) && bawah(1) < mulai (1) && bawah(1) > 1 untuk i = 1 hingga bawah(1)-1 untuk j = 1 hingga tinggi pixel pada i,j jadikan hitam elseif bawah(2) == atas(2) && atas(1) > mulai (1) && atas(1) < lebarCitra untuk i = atas(1)+1 hingga lebar untuk j = 1 hingga tinggi pixel pada i,j jadikan hitam elseif bawah(2) == atas(2) && atas(1) < mulai (1) && atas(1) > 1 untuk i = 1 hingga atas(1)-1 untuk j = 1 hingga tinggi pixel pada i,j jadikan hitam kembalikan citra
3.2.4.4.14 Algoritma drawTitik Modul ini digunakan untuk menggambar titik fitur yang didapat dari masingmasing sektor. Modul ini tidak berpengaruh pada jalannya pengenalan, hanya digunakan pada aplikasi untuk menunjukkan fitur yang didapat. Parameter yang dikirimkan pada modul ini adalah citra, vektor distance dan vektor angle. Modul ini akan mengembalikan citra yang berisi karakter dengan titik-titik fitur. Pseudocode : Untuk i = 1 hingga 12
126 high = round(distance(i) * sin angle(i)) width = round(distance(i) * cos angle(i)) jika ceil(i/3)=1 awal = [16 22] high = -high jika ceil(i/3)=2 awal = [17 22] width = -width high = -high jika ceil(i/3)=3 awal = [17 21] width = -width jika ceil(i/3)=4 awal = [16 21] pixel pada awal(2)+high, awal(1)+width jadikan warna lain kembalikan citra
3.2.4.4.15 Algoritma gabungFeature Modul ini berfungsi untuk menggabungkan semua fitur yang ada menjadi 1 array. Parameter yang dikirim adalah semua fitur mulai dari distance, angle, occupancy dan angle. Kembalian dari modul ini adalah 1 array yang berisi semua fitur. Pseudocode : Untuk i = 1 hingga 12
127 Features(i) = distances(i) Untuk i = 1 hingga 4 Features(i+12) = occupancies(i) Untuk i = 1 hingga 12 Features(i+12) = angles(i) Kembalikan features
3.2.4.4.16 Algoritma recognize Modul ini berfungsi untuk mengenali citra yang berisi karakter menjadi karakter. Parameter yang dikirimkan kepada modul ini adalah kb sebagai array yang berisi knowledge base semua karakter dan xi sebarai array yang berisi fitur yang telah diekstrak. Modul ini akan mengembalikan karakter yang telah dikenali. Pseudocode : tempAngka = 100 tempHuruf = 0 Untuk i = 1 hingga 36 Untuk j = 1 hingga 32 Mri(j) = kb(64* (i - 1) + j) Dri = kb(64*(i - 1) + j + 32) Mxi = membershipValue(mri, xi, dri) dMr = fuzzyDistance(Mxi, mri, xi) jika dMr < tempAngka tempAngka = dMr
128 tempHuruf = i if tempHuruf <= 10 n = tempHuruf + 47 lainnya n = tempHuruf + 54 karakter = karakter dari ascii n kembalikan karakter
3.2.4.4.17 Algoritma membershipValue Modul ini digunakan untuk menghitung membership value dari fitur-fitur yang didapat terhadap karakter yang sedang dibandingkan. Modul pemanggil akan mengirimkan parameter mri sebagai mean yang ada dalam knowledge base, xi sebagai fitur-fitur yang telah diekstrak dari karakter yang sedang dikenali, dan dri sebagai variance yang ada dalam knowledge base. Modul ini akan mengembalikan Mxi. Pseudocode : Untuk i = 1 hingga 16 Jika dri(i) = 0 Dri(i) = 0.001 Mxi(i) = exponen ((mri(i) – xi(i)) ^ 2 / (-2 * dri(i))) Kembalikan Mxi
129 3.2.4.4.18 Algoritma fuzzyDistance Modul ini berfungsi untuk menghitung fuzzy distance dari karakter yang dikenali terhadap semua karakter yang ada dalam knowledge base. Parameter yang dikirim kepada modul ini adalah Mxi sebagai membership value masing-masing fitur terhadap karakter yang sedang dibandingkan, mri sebagai mean dari knowledge base dan xi sebagai fitur-fitur dari karakter yang sedang dikenali. Kembalian dari modul ini adalah nilai fuzzy distance yang didapat. Pseudocode : dMr = 0 untuk i = 1 hingga 16 Mxi(i) = 1 - Mxi(i) dMr = dMr + (Mxi(i) ^ 2 * (mri(i) – xi(i)) ^ 2) dMr = dMr / 16 kembalikan dMr
3.2.4.4.19 Algoritma hitungMV Modul ini berfungsi untuk menghitung mean dan variance untuk setiap fitur pada karakter dari beberapa sampel yang telah ditentukan sebelumnya. Modul ini dikirimkan parameter distances dan occupancies yang masing-masing adalah array 2 dimensi berukuran 12 x jumlah sampel dan 4 x jumlah sampel. Modul ini akan mengembalikan nilai mean dan variance. Pseudocode : Untuk setiap distances
130 Mean = jumlah semua distance Bagi mean dengan jumlah sampel Untuk setiap occupancies Mean = jumlah semua occupancy Bagi mean dengan jumlah sampel Untuk setiap distances variance = (fitur – mean) ^ 2 Bagi variance dengan jumlah sampel Untuk setiap occupancies variance = (fitur – mean) ^ 2 Bagi variance dengan jumlah sampel
3.2.4.4.20 Algoritma defineKnowledgeBase Modul ini berfungsi untuk membuat knowledge base dari sampel-sampel karakter yang ada dalam folder masing-masing karakter. Sampel-sampel karakter tersebut adalah macam-macam karakter yang didapat dari preprocessing karakter dalam plat yang ada. Setelah semua mean dan variance untuk setiap karakter didapat maka akan ditulis ke dalam file bertipe txt. Pseudocode : Kb = 0 Untuk i = 1 hingga 36 Baca folder yang mempunyai nama karakter tersebut Untuk setiap citra
131 extractFeature dengan parameter citra gabungFeature dengan parameter distance, occupancy defineFeature dengan parameter distance, occupancy hitungMV dengan parameter distances, occupancies kb(i) = M dan V Tulis ke dalam file dengan nama ‘knowledge base.txt’
3.2.4.4.21 Algoritma tesPlat Modul ini digunakan untuk melakukan tes pengenalan plat yang ada di dalam folder “Plat”. Karena plat yang harus dites sangat banyak dan sangat membuang waktu jika dites secara manual, maka dibuatlah algoritma ini agar pengetesan plat dapat bekerja secara otomatis. Hasil dari jalannya modul ini adalah sebuah file txt dengan isi nomor plat, dan karakter plat yang dikenali. Pseudocode : Untuk setiap citra dalam folder plat Baca citra Nama = nama citra beforeSegmentation dengan parameter citra segmentation dengan parameter citra untuk setiap karakter dalam citra extractFeature dengan parameter citra gabungFeature dengan parameter distance, occupancy baca knowledge base simpan dalam variabel kb
132 recognize dengan parameter kb, fitur Simpan nama plat dan hasil pengenalannya ke dalam file dengan tipe txt
3.2.4.4.22 Algoritma tesKar Modul ini berfungsi untuk mengenali karakter yang berada di dalam folder yang bernama 1 karakter ( ‘0’, ‘1’, ‘A’, ‘B’, dll). Modul ini digunakan untuk melakukan tes reliability terhadap aplikasi pengenalan yang dibuat. Karena jika tes tersebut dilakukan secara manual dengan mengetes karakter 1 per 1 maka waktu yang dibutuhkan akan lama. Sementara tes harus dilakukan berkali-kali. Modul ini akan mengembalikan nama citra yang gagal dikenali dan ditulis ke dalam bentuk file bertipe txt yang disimpan di folder yang bersangkutan. Pseudocode : Untuk setiap folder karakter List file dalam folder Untuk setiap citra dalam folder Baca citra extractFeature dengan parameter citra gabungFeature dengan parameter distance, occupancy baca knowledge base simpan dalam variabel kb recognize dengan parameter kb, fitur bandingkan hasilnya dengan karakter jika berbeda simpan nama citra tersebut ke dalam variabel sementara tulis nama citra yang gagal ke dalam file txt