Senin, 31 Oktober 2016

Segmentasi dan Pengenalan Karakter pada Plat Kendaraan

Halo, lama ga ngeblog, kali ini saya akan mencoba menjelaskan tentang "Implementation of License Plate Segmentation and Recognition" atau bahasa Indonesianya kyk judul diatas hehee :D.

Kita istirahat dulu dari hardware, mikrokontroller, dkk, mari belajar image processing atau pengenalan citra.

Kali ini saya memakai Visual Studio untuk antarmuka dengan Visual Basic.

Blok diagram untuk program plat kendaraan ini sbb:



Pertama kita lakukan input image dari plat kendaraan sbb:


Platnya yang hitam putih ya untuk aplikasi ini. Tulisan putih dg background hitam.

Kemudian karena di komputer otomatis membaca image sebagai berwarna atau RGB atau Red Green Blue, maka kita perlu mengubah image menjadi hitam putih atau pixelnya menjadi cuma bernilai 0 atau 255, agar memudahkan untuk proses segmentasi dan pengenalan karakter.

Oh ya untuk tulisan lengkap dalam bahasa inggris, saya upload di web academia saya:

Cara mengubah pixel image menjadi black and white yaitu jika pixel bernilai lebih dari 128 maka kita ubah menjadi 255 atau putih, dan sebaliknya jika kurang dari 128 maka kita ubah menjadi 0 atau hitam.

Jadinya gambar diatas seperti ini:

Lalu karena ada rectangle putih yg mengelilingi karakter plat kendaraan dan akan mempersulit segmentasi, maka kita potong lokasi rectangle tsb kira2 40 pixel masing2 atas bawah dan 60 pixel masing2 kanan kiri:

Setelah rectangle putih tsb terpotong, maka kita cari posisi pixel putih paling atas dan paling bawah dan juga pixel putih paling kiri dan paling kanan, kemudian image di-crop berdasarkan lokasi pixel2 putih tsb. Maka kita akan dapatkan hasil sbb:

Lalu kita akan melakukan segmentasi karakter satu persatu. 

Perhatikan setiap huruf diakhiri dengan pixel hitam atau satu kolom atau satu garis isinya pixel hitam semua. Nah dari ujung pixel putih paling kiri kita baca perkolom sampai ketemu satu kolom yang isinya pixel hitam semua, itu berarti kita ketemu batas dari satu huruf.
Lalu image di crop dr ujung paling kiri (pixel putih) sampai satu garis hitam berisi pixel hitam sbg tanda satu huruf telah terbaca:

Berarti kan image yang asli udah kepotong satu huruf jadinya begini:

Nah disamping huruf yang paling kiri atau huruf A tersisa space yang sebenarnya jarak antara huruf M dan A. Untuk memudahkan segmentasi huruf berikutnya, kita potong atau crop dulu image berdasarkan pixel putih paling kiri, jadinya kita dapatkan image sbb:

Dan kita lanjutkan segmentasi sampai sudah tidak ada pixel putih yang terbaca di image alias semua huruf sudah selesai tersegmentasi atau terpisahkan satu persatu.

Jika hasil segmentasi bukanlah huruf yang dimaksud, biasanya image asli tidak ter-crop dg baik.
Kita cek kembali hasil crop image asli setelah segmentasi dan pastikan kita dapatkan pixel putih sbg bagian dr huruf berikutnya pada posisi pixel paling kiri.

Titik pixel putih yang bukan merupakan bagian dari huruf atau noise dari image dapat menyebabkan segmentasi huruf berikutnya terganggu.

Permasalahan diatas akan menyebabkan hasil segmentasi sbb:

Kita cek hasil segmentasi kita, jika terdapat satu kolom atau garis terdiri dari pixel hitam semua, yang berarti hasil segmentasi bukanlah satu huruf alias segmentasi kita gagal. Maka kita harus meng-crop kembali image asli dan pastikan bagian paling kiri dari image adalah pixel putih sebagai bagian dari huruf berikutnya yang akan disegmentasi.

Lakukan segmentasi kembali dan cek kembali hasilnya, sampai kita dapatkan hasil segmentasi tidak terdapat satu garis hitam alias hanya satu huruf yang tersegmentasi.

Jika segmentasi kita berhasil, maka hasilnya sbb:

Lalu kita buat database huruf dan angka dengan ukuran 10x15 pixel. 
Kemudian untuk memudahkan pencocokan hasil segmentasi dengan database, kita invert hasil segmentasi yang hitam jadi putih yang putih jadi hitam, dan kita ubah ukurannya menjadi 10x15 pixel. 

Aplikasi kita akan membaca ada berapa karakter pada plat kendaraan dan apa nomor platnya sbb:


Untuk program lengkapnya bisa download disini: Aplikasi Plat Kendaraan by Wahyu Rahmaniar.
Oh ya, di program tsb saya sediakan button save pada setiap hasil segmentasi yang bisa langsung disimpan sebagai database tambahan.

Video lengkap hasil run program:


- ayuchan -