deteksi-tulisan-dalam-citra-digital-dan-menghitung-jumlah-karakternya-menggunakan-matlab

3

Click here to load reader

Upload: evansnoeryga

Post on 07-Aug-2015

203 views

Category:

Documents


2 download

DESCRIPTION

Deteksi-Tulisan-Dalam-Citra-Digital-dan-Menghitung-Jumlah-Karakternya-Menggunakan-Matlab

TRANSCRIPT

Page 1: Deteksi-Tulisan-Dalam-Citra-Digital-dan-Menghitung-Jumlah-Karakternya-Menggunakan-Matlab

1 [Jans Hendry / EE UGM, Indonesia]

Kasus: MENGHITUNG JUMLAH KARAKTER (ALPHABET ATAU BILANGAN)

DI DALAM CITRA DIGITAL

Kasus yang saya hadirkan disini adalah bagaimana cara menghitung jumlah karakter (alphabet atau

angka) dalam sebuah citra digital. Permasalahan ini cukup penting ketika kita berurusan dengan

projek untuk mengklasifikasikan karakter yang terdapat dalam citra. Ambil saja contoh dalam

mengartikan tulisan yang ada di dalam citra hasil scan. Dengan menghitung jumlah karakter yang

ada di dalamnya, iterasi akan bisa digunakan sebagai salah satu langkah pembacaan sehingga proses

nya akan menjadi otomatis tidak lagi manual (misalnya pemotongan manual atau cropping).

Dalam artikel ini, saya juga menyertakan bagaimana matlab dapat digunakan untuk memotong tiap

karakter secara otomatis sesuai persis dengan ukurannya. Pada artikel yang lain, saya telah

membuatkan sebuah algoritma untuk melakukan pemotongan secara otomatis. Tentu saja algoritma

tersebut bisa digunakan sebagai ‘gaya tersendiri’ ☺.

Langkah-langkah yang digunakan adalah:

- Membaca citra digital

- Cek apakah citra berupa RGB atau grayscale atau biner. Jika citra dalam bentuk RGB atau

Grayscale maka kita jadikan biner terlebih dahulu.

- Memberikan label terhadap objek yang ada di dalam citra untuk memisahkan masing-masing

objek.

- Mencari centroid atau titik massa (istilah kerennya dari saya) untuk tiap objek.

- Untuk tiap centroid yang ditemukan, kita berikan kotak yang menandakan bahwa dia telah

terklasifikasi. Kotak ini sebenarnya hanya aksesoris saja, yang ingin saya jelaskan adalah

dengan menggunakan parameter untuk membuat kotak (bounding box) ini kita bisa

melakukan teknik pemotongan secara otomatis dan presisi atau akurat.

- Lalu tampilkan semua hasil pengolahan tersebut dalam figure yang sama.

Baik, dengan mengetahui langkah-langkah di atas maka kita bisa membuat program yang cocok

dengan permasalahan yang telah saya utarakan di atas. Program ini akan saya gunakan juga dalam

projek mendeteksi karakter dalam citra hasil scan seperti yang telah saya utarakan pada artikel

sebelumnya.

Dalam kasus ini, saya menggunakan citra digital:

Page 2: Deteksi-Tulisan-Dalam-Citra-Digital-dan-Menghitung-Jumlah-Karakternya-Menggunakan-Matlab

2 [Jans Hendry / EE UGM, Indonesia]

Yang ingin kita lakukan adalah menghitung jumlah karakter valid di dalam citra tersebut. Program

beserta penjelasannya adalah sebagai berikut:

- Membaca citra digital

filename='font4.png'; I=imread(filename);

- Cek apakah citra berupa RGB atau grayscale atau biner. Jika citra dalam bentuk RGB atau

Grayscale maka kita jadikan biner terlebih dahulu.

[bar,kol,z]=size(I); if z==3 bw=im2bw(I,.5); else bw=I; end bw=~bw;

- Memberikan label terhadap objek yang ada di dalam citra untuk memisahkan masing-masing

objek. Sebelum memberikan label, terlebih dahulu kita menghitung connectivity piksel nya

untuk memisahkan dengan objek yang lain. Saya menggunakan conn-4 karena saya berharap

bahwa ada karakter yang mengalami kontinuitas dalam diagonal neighboorhood (ND).

Mengapa saya berharap? Karena dengan menganggap akan terjadi hal demikian, saya bisa

mengantisipasinya dengan memberikan conn-4 bukan conn-8. Bingung yah??? ☺

bw=bwconncomp(bw,4); bw=labelmatrix(bw);

- Mencari centroid atau titik massa (istilah kerennya dari saya) untuk tiap objek.

stats=regionprops(bw,{'centroid','boundingbox'});

- Menampilkan gambar asli atau original.

imshow(I); title('How to count characters in an image','fontsize',14); hold on;

- Untuk tiap centroid yang ditemukan, kita berikan kotak yang menandakan bahwa dia telah

terklasifikasi. Kotak ini sebenarnya hanya aksesoris saja, yang ingin saya jelaskan adalah

dengan menggunakan parameter untuk membuat kotak (bounding box) ini kita bisa

melakukan teknik pemotongan secara otomatis dan presisi atau akurat.

for k=1:length(stats); cent=stats(k).Centroid; boks=stats(k).BoundingBox; plot(cent(1),cent(2),'bo','MarkerSize',5,'MarkerFaceColor','g'); bx=[boks(1),boks(1),boks(1)+boks(3),boks(1)+boks(3),boks(1)];

Page 3: Deteksi-Tulisan-Dalam-Citra-Digital-dan-Menghitung-Jumlah-Karakternya-Menggunakan-Matlab

3 [Jans Hendry / EE UGM, Indonesia]

by=[boks(2)+boks(4),boks(2),boks(2),boks(2)+boks(4),boks(2)+boks(4)]; line(bx,by,'color','r'); pause(.01); end

- Mengakhiri proses

xlabel(sprintf('There is %d characters counted',length(stats))); hold off;

Hasil eksekusi dari program di atas adalah

% originale by jans hendry % EE of UGM, Indonesia

~~~ TERIMA KASIH ~~~