Anda di halaman 1dari 5

[Jans Hendry / EE&IT UGM, INDONESIA]

2011

ALTERNATIVE FOR CHARACTER SEGMENTATION IN DIGITAL IMAGE (REGIONPROPS MATLAB)

Artikel ini merupakan lanjutan dari artikel sebelumnya tentang segmentasi karakter pada citra digital (misalnya OCR) dengan menggunakan profile projection. Dalam artikel ini dihadirkan alternatif tanpa menggunakan teknik khusus, hanya dengan memanfaatkan toolbox regionprops yang terdapat dalam matlab. Metode segmentasi menggunakan profile projection memiliki banyak kelebihan, khususnya dalam fleksibilitas. Fleksibilitas ini tidak dimiliki oleh teknik yang akan saya hadirkan karena teknik ini tidak bisa melakukan segmentasi secara penuh jika tiap karakter memiliki ukuran yang berbeda. Sementara itu, profile projection mampu untuk melakukan segmentasi terhada karakter yang masingmasing ukurannya bisa berbeda. Tapi untuk kasus tertentu, kita bisa menggunakan alternatif ini. Anggap saja kita sudah bisa mengkondisikan citra digital tersebut. Bisa dibilang juga, bila keadaan dari citra digital ini memang sudah memiliki standar sehingga ukuran karakter sama. Seperti diketahui bahwa regionprops pada matlab memiliki properti yang banyak dan sangat bermanfaat. Salah satu properti yang paling sering digunakan adalah dalam menemukan centroids dan boundingbox. Berikut ini saya hadirkan properti yang terdapat di dalam toolbox ini yang saya ambil dari HELP Matlab.

Dalam artikel ini saya tidak akan menjelaskan per-item dari isi tabel di atas. Artikel lainnya akan saya tulis untuk menjelaskan tentang properti di atas dan penggunaannya. Langkah-langkah dalam membuat program alternatif ini adalah Import file citra ke dalam matlab Deteksi centroid dengan menggunakan regionprops dengan perintah
stats=regionprops(bw,{'centroid','boundingbox','extrema'});

Ada 3 measurement yang kita gunakan yakni centroid, boundingbox dan extrema. Nah extrema ini akan kita gunakan lebih lanjut.

[4

Oktober

2011]

Page 1

[Jans Hendry / EE&IT UGM, INDONESIA]

2011

Bila anda perhatikan, extrema memiliki 8 buah properti yang bisa dibaca nilainya menggunakan matlab. Fungsinya adalah untuk mengetahui bagian-bagian terluar dari sebuah objek yang terdeteksi. Ternyata dengan menggunakan properti ini kita bisa juga melakukan automatic segmentation untuk karakter pada citra digital. Anda bisa memperhatikan pada program yang telah dibuat, properti apa saja yang saya gunakan dalam menghasilkan segmentasi ini. Setelah terdeteksi extremanya, lalu kita melakukan pemotongan untuk tiap baris di mana karakter-karakter tersebut berada. Tiap baris yang telah terpotong, maka dilakukan pemotongan (cropping) tiap karakter dengan menggunakan centroid (regionprops) pada baris baru yang telah dipotong.

Untuk lebih jelas, perhatikan program yang telah dibuat:


clear all; close all; clc; %% initialisation filename='sample2.jpg'; I=imread(filename); [row,col]=size(I); if ~islogical(I) Ib=im2bw(I,.5); end Ib=~Ib; %% %% proses bw=bwconncomp(Ib,4); stats=regionprops(bw,{'centroid','boundingbox','extrema'}); imshow(I); title('How to count characters in an image','fontsize',14); hold on; %% %% labelling for k=1:numel(stats) cent=stats(k).Centroid; boks=stats(k).BoundingBox;

[4

Oktober

2011]

Page 2

[Jans Hendry / EE&IT UGM, INDONESIA] xkt=stats(k).Extrema; xx(k,:)=[xkt(1,1) xkt(6,1) xkt(7,1) xkt(8,1)]; yy(k,:)=[xkt(1,2) xkt(6,2) xkt(7,2) xkt(8,2)]; 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)]; by=[boks(2)+boks(4),boks(2),boks(2),boks(2)+boks(4),boks(2)+boks(4)]; line(bx,by,'color','r'); text(xkt(1,1),xkt(1,2)-5,sprintf('%d',k)); pause(.01); end % menemukan kolom dan baris untuk crop for k=1:2 xx_min(1,k)=min(xx(k,:)); yy_min(1,k)=min(yy(k,:)); yy_max(1,k)=max(yy(k,:)); end xx_min=min(xx_min)-3; yy_min=sort(yy_min); yy_max=sort(yy_max); clear boks cent xkt for k=1:length(yy_max) Ibb=imcrop(Ib,[xx_min yy_min(1,k)-5 col yy_max(1,k)-yy_min(1,k)+5]); stats=regionprops(Ibb,{'centroid','boundingbox'}); figure, for k=1:numel(stats) cent=stats(k).Centroid; boks=stats(k).BoundingBox; Icr=imcrop(Ibb,[boks(1) boks(2) boks(3) boks(4)]); subplot(1,numel(stats),k); imshow(Icr); pause(.1); end end %% % originale by jans hendry % EE of UGM, Indonesia

2011

Langkah-langkah yang telah saya uraikan, terimplementasi dengan baik pada program di atas. Bila program tersebut dijalankan maka akan dihasilkan

[4

Oktober

2011]

Page 3

[Jans Hendry / EE&IT UGM, INDONESIA]

2011

Citra original

Hasil pengolahan

Segmentasi - 1

Segmentasi - 2

Salah satu contoh kegagalan yang terjadi adalah apabila program ini digunakan untuk segmentasi citra berikut ini:

[4

Oktober

2011]

Page 4

[Jans Hendry / EE&IT UGM, INDONESIA]

2011

Ternyata program ini tidak bisa melakukan segmentasi dengan baik terhadap objek pada citra. Hasil eksekusinya adalah: Hasil - 1

Hasil - 2

Hasil - 3

Hasil - 4

Seharusnya untuk hasil ke 4 yang dihasilkan adalah karakter alphabet, tapi kenyataannya tidak begitu. Mungkin masih bisa dilakukan perbaikan, tetapi saya pesimis... Semoga program ini bisa bermanfaat dan memberikan penjelasan singkat tentang penggunaan properti dari regionprops pada matlab.

~~~ TERIMA KASIH ~~~

[4

Oktober

2011]

Page 5