Anda di halaman 1dari 7

[JANS HENDRY / EE&IT UGM, INDONESIA]

2011

USING PROFILE PROJECTION TO SEGMENT CHARACTER IN IMAGE (MATLAB)

Profile projection merupakan salah satu teknik untuk segmentasi karakter pada citra baik OCR maupun citra hasil buatan sendiri menggunakan komputer. Teknik ini sederhana dan masih menjadi pilihan. Segmentasi wajib dilakukan ketika kita ingin mendeteksi karakter (huruf/angka) pada citra, karena algoritma yang akan digunakan untuk ekstraksi ciri dan pengenalan karakter hanya bisa mengolah per-karakter saja. Segmentasi bisa dilakukan sebelum atau sesudah pre-processing pada keseluruhan citra. Profile Projection terdiri atas 2 bagian yakni horisontal dan vertikal. Tujuannya adalah memisahkan karakter untuk tiap baris dan tiap kolom secara otomatis dan akurat. Sebenarnya ada teknik lain untuk melakukan ini dengan menggunakan toolbox matlab tapi cara kerjanya tidak seperti profile projection. Sistemnya pun lebih tricky. Saya akan menghadirkan teknik tersebut pada artikel lain. Kelebihan dari metode profile projection adalah kemampuannya untuk mendeteksi ruang antar baris dan kolom pada karakter sehingga kita bisa memisahkan karakter tersebut bahkan bila ukuran masing-masing karakter baik pada baris dan kolom berbeda maka teknik ini masih bisa diandalkan. Sedangkan teknik lain yang akan saya hadirkan tidak cocok untuk kasus tersebut. Untuk memberi gambaran pada anda akan profile projection harap perhatikan gambar di bawah ini. Misalkan saya memiliki citra seperti di bawah

Lalu dengan menggunakan profile projection akan dihasilkan grafik (seperti histogram) seperti berikut:

Anda bisa melihat adanya garis-garis naik-turun baik pada layaknya histogram (tapi tidak diskret) pada garis koordinat x dan y. Pada dasarnya teknik bekerja dengan cara yang sangat sederhana, hanya dengan menjumlahkan nilai intensitas citra yang terlebih dulu telah dinormalisasi (dijadikan biner) baik pada tiap baris (untuk vertikal) dan tiap kolom (untuk horisontal). Lalu yang menjadi pemisahnya adalah adanya lembah untuk tiap bentuk isyarat. Nah, lembah itu sebenarnya adalah spasi putih yang memisahkan tiap karakter. Perlu diingat, bahwa teknik ini baik untuk karakter yang saling terpisah,

[08:45 01/10/2011]

Page 1

[JANS HENDRY / EE&IT UGM, INDONESIA]

2011

bisa ada karakter yang terhubung, maka teknik ini bisa digunakan dengan sedikit tambahan algoritma lain. Langkah-langkah dalam menyelesaikan teknik ini adalah: Import citra ke dalam matlab. Jadikan citra menjadi biner (bisa anda sebut normalisasi atau threshold), lalu invers untuk mendapatkan nilai objek (foreground) menjadi 1 (putih) dan background menjadi 0 (hitam). Lalu bentuklah projeksi horisontal dengan menjumlahkan komponen black tiap baris dari matriks citra, artinya proyeksi dilakukan terhadap X. Kemudian bentuklah projeksi vertikal dengan menjumlahkan komponen black tiap kolom dari matriks citra, artinya proyeksi dilakukan terhadap Y.

Langkah diatas baru terbatas pada pembentukan projeksi, belum tiba pada segmentasi atau pemotongan karakter pada citra. Program akhir untuk hasil di atas adalah
clear all; close all; clc; %% import gambar I = imread('sample2.jpg'); level=graythresh(I); I=im2bw(I,level); imshow(I); hold on; [bar,kol]=size(I); I=~I; %% %% horisontal projeksi Yproj=sum(I,2); plot(Yproj,1:bar); %% %% vertikal projeksi Xproj=sum(I,1); plot(1:kol,Xproj); hold off %%

Langkah-langkah dalam membuat program yang sudah bisa dijadikan pemotong menggunakan projeksi vertikal dan horisontal adalah - Tentukanlah projeksi vertikalnya untuk memisahkan baris-baris yang mengandung karakter dalam citra - Lalu potonglah tiap baris tersebut berdasarkan titik terendah dan tertinggi dari tiap projeksi vertikal (koordinatnya) - Untuk tiap baris hasil pemotongan projeksi vertikal, potonglah tiap karakter dengan menggunakan koordinat dari tiap projeksi horisontal.

[08:45 01/10/2011]

Page 2

[JANS HENDRY / EE&IT UGM, INDONESIA]

2011

Hal ini dilakukan dengan mencari jumlah projeksi vertikal dan horisontal yang tidak nol tetapi koordinatnya tepat berada sebelum atau sesudah nol. Karena nilai nol dianggap adalah spasi atau pemisah karakter maupun baris.

Hasil dari langkah-langkah di atas, menghasilkan modifikasi program sebagai berikut:

clear all; close all; clc; %% import gambar I = imread('sample2.jpg'); level=graythresh(I); I=im2bw(I,level); imshow(I); title('Original Image with Vertical Projection'); hold on; Ib=I; I=~I; [bar,kol]=size(I); %% %% horisontal projeksi Y=sum(I,2); koY=1:bar; plot(Y,1:bar); hold off; %% %% pemotongan untuk baris line1=zeros(1,bar); line2=zeros(1,kol); k1=length(Y); k=1; for ii=2:k1-1 if Y(ii)==0 if Y(ii+1)~=0 line1(k)=koY(ii+1); elseif Y(ii-1)~=0 line1(k)=koY(ii-1); end k=k+1; end end line1=line1(line1~=0); for k=1:2:length(line1) Ik=imcrop(Ib,[1 line1(k) kol line1(k+1)-line1(k)]); figure, imshow(Ik); hold on;

[08:45 01/10/2011]

Page 3

[JANS HENDRY / EE&IT UGM, INDONESIA]

2011

% vertikal projeksi Ig=~Ik; X=sum(Ig,1); plot(X); hold off; [bar1,kol1]=size(Ig); koX=1:kol1; % pemotongan untuk kolom k1=length(X); m=1; for ii=2:k1-1 if X(ii)==0 if X(ii+1)~=0 line2(m)=koX(ii+1); elseif X(ii-1)~=0 line2(m)=koX(ii-1); end m=m+1; end end line2=line2(line2~=0); kk=1; figure, for n=1:2:length(line2) In=imcrop(Ik,[line2(n) 1 line2(n+1)-line2(n) bar1]); subplot(1,length(line2)/2,kk); imshow(In); kk=kk+1; end pause(.1); line2=[]; end %%

Bila program di atas dieksekusi untuk citra pertama maka akan dihasilkan - Citra original yang dikenai projeksi vertikal

Citra hasil pemotongan dengan projeksi vertikal lalu dikenai projeksi horisontal

Citra hasil pemotongan dengan projeksi horisontal

[08:45 01/10/2011]

Page 4

[JANS HENDRY / EE&IT UGM, INDONESIA]

2011

Ternyata teknik ini juga bisa diaplikasikan pada citra yang memiliki lebih dari 1 baris atau line. Perhatikan contoh gambar di bawah ini.

Bila kita menggunakan program di atas, maka akan dihasilkan

[08:45 01/10/2011]

Page 5

[JANS HENDRY / EE&IT UGM, INDONESIA]

2011

Hasil pemotongan untuk baris pertama menggunakan proyeksi vertikal

Hasil pemotongan dengan menggunakan proyeksi horisontal untuk citra di atas

Hasil pemotongan untuk baris kedua menggunakan proyeksi vertikal

Hasil pemotongan dengan menggunakan proyeksi horisontal untuk citra di atas

Hasil pemotongan untuk baris ketiga menggunakan proyeksi vertikal

Hasil pemotongan dengan menggunakan proyeksi horisontal untuk citra di atas

Hasil pemotongan untuk baris keempat menggunakan proyeksi vertikal

Hasil pemotongan dengan menggunakan proyeksi horisontal untuk citra di atas

[08:45 01/10/2011]

Page 6

[JANS HENDRY / EE&IT UGM, INDONESIA]

2011

Mengapa teknik ini perlu diketahui? Karena teknik ini bisa sangat bermanfaat untuk mengenali karakter pada OCR, untuk memperbaiki arah kertas (portrait atau landscape) dan juga memperbaiki skew pada tulisannya saja. Memang teknik ini merupakan salah satu teknik yang masih dipergunakan hingga kini karena kemudahannya tetapi bisa dibilang akurat dan juga dengan mendampingkannya dengan beberapa algoritma lain maka teknik ini bisa menjadi salah satu teknik segmentasi yang sangat bagus. Referensi: B. Gatos, N. Stamatopoulos and G. Louloudis. ICDAR2009 Handwriting Segmentation Contest. 2009 10th International Conference on Document Analysis and Recognition. Daniel X Le, George R Thoma and Harry Wechsler. Automated Page Orientation and Skew Angle Detection for Binary Document Images. Saeed Rastegar, Reza Ghaderi, Gholamreza Ardeshipr & Nima Asadi. An intelligent control system using an efficient License Plate Location and Recognition Approach. International Journal of Image Processing (IJIP) Volume(3), Issue(5).

[08:45 01/10/2011]

Page 7

Anda mungkin juga menyukai