Anda di halaman 1dari 3

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:

[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)];

[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 ~~~

Anda mungkin juga menyukai