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]

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]

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