2011
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
2011
bisa ada karakter yang terhubung, maka teknik ini bisa digunakan dengan sedikit tambahan algoritma
lain.
Langkah-langkah dalam menyelesaikan teknik ini adalah:
-
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
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.
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
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
[08:45 01/10/2011]
Page 4
2011
Ternyata teknik ini juga bisa diaplikasikan pada citra yang memiliki lebih dari 1 baris atau line.
Perhatikan contoh gambar di bawah ini.
[08:45 01/10/2011]
Page 5
[08:45 01/10/2011]
2011
Page 6
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