Anda di halaman 1dari 9

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

OCR DOCUMENT DE-SKEW USING HOUGH TRANSFORM

Awalnya transformasi Hough merupakan teknik yang digunakan untuk mendeteksi kurva yang terdapat dalam citra digital. Kurva ini bisa berbentuk garis lurus, lingkaran dan lainnya. Dalam mendeteksi garis lurus yang terdapat pada citra digital, sebenarnya bisa digunakan persamaan garis lurus yang sudah lama kita kenal yakni y=mx+c. Bisa anda cermati bahwa komponen terpenting dalam persamaan ini adalah keberadaan gradient atau tingkat kemiringan dari garis tersebut. Semakin besar tingkat kecuraman dari garis maka semakin besar nilai m atau gradient garisnya. Hal ini mengakibatkan sulitnya ketika kita berhadapan dengan tugas untuk mendeteksi garis tegak lurus dimana m atau gradientnya memiliki nilai yang sangat besar atau bisa dibilang tak berhingga. Untuk itu ada sebuah solusi yang dihadirkan yakni dengan mengubah bidang x-y menjadi bidang polar. Teknik ini dikenal sebagai transformasi Hough. Dengan demikian teknik ini menjadi handal untuk mendeteksi garis dengan tingkat kemiringan dengan nilai sembarang.

Kemampuan transformasi ini menjadi sangat berguna untuk permasalahan lain. Kasus yang akan dibahas pada artikel ini merupakan salah satu contoh yang menggunakan transformasi jenis ini. Dengan menganggap bahwa tiap koordinat pada dokumen OCR dapat dibentuk garis lurus, maka transformasi Hough menjadi sebuah solusi yang bisa diandalkan. Permasalahan ini kita sebuah sebagai deteksi dan koreksi kemiringan dokumen OCR. Koreksi bisa dilakukan untuk sebuah dokumen secara kesulurahan atau bisa juga per-karakter. Dalam hal ini kita akan membahas terlebih dahulu bagaiman deteksi dan koreksi dapat dilakukan secara kesulurahan pada sebuah teks.

Karakteristik dari algoritma Hough

- Transformasi Hough ditentukan oleh voting. Pemenang merupakan nilai yang memiliki jumlah vote paling besar.

- Komputasi dengan menggunakan Hough sangat besar sehingga perlu diberikan pra-proses sebelum menggunakan transformasi ini.

Langkah-langkah dalam membentuk transformasi Hough adalah

- Import citra digital ke dalam matlab

- Jadikan citra menjadi grayscale (bila belum grayscale) atau boleh menggunakan citra biner

- Untuk mempercepat komputasi maka lakukan deteksi tepi misalnya menggunakan canny

- Misalkan ukuran dari citra digital adalah x dan y maka hitunglah nilai:

= + Nilai d tersebut akan menjadi ukuran maksimal (rho_max) dari nilai rho.

- Tentukan nilai rho_min, rho_max, theta_min dan theta_max

- Buatlah sebuah matriks A(rho,theta) dengan nilai rho berada di antara rho_min dan rho_max sedangkan nilai theta berada di antara theta_min dan theta_max. Perlu diingat bahwa nilai rho_max sudah ditentukan di atas.

- Berikan nilai nol untuk A(rho,theta) pada tiap elemen nya.

- Lalu kumpulkan koordinat dari citra yang telah dideteksi tepi yang memiliki nilai selain 0 sehingga komputasi akan semakin sedikit dan bisa mempercepat proses.

- Untuk nilai theta dari theta_min hingga theta_max hitunglah:

proses. - Untuk nilai theta dari theta_min hingga theta_max hitunglah: [email : jans.hendry@gmail.com] Page 1
proses. - Untuk nilai theta dari theta_min hingga theta_max hitunglah: [email : jans.hendry@gmail.com] Page 1

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

= . + . Perlu diingat bahwa nilai x dan y merupakan koordinat hasil deteksi tepi, bukan lagi koordinat sebenarnya dari citra digital.

- Bulatkan nilai rho tersebut ke nilai terdekat.

- Hitunglah inkremen dari A(rho,theta).

- Nilai A(rho,theta) yang terbesar menandakan banyaknya titik-titik yang membentuk garis. Sehingga nilai theta pada A tersebut merupakan nilai sudut yang kita inginkan. Dengan menggunakan nilai theta tersebut, kita bisa melakukan rotasi citra ke arah yang sebaliknya. Inkremen yang dimakud disini merupakan aktifitas vote seperti yang telah dijelaskan di atas.

Berikut ini adalah program yang telah saya buat. Saya akui kemungkinan besar ada kesalahan dalam mendeteksi, nanti akan saya perbaiki. Tapi sejauh ini program memberikan hasil yang bagus. Akan lebih baik jika anda berkesempatan untuk memberikan koreksi.

% Hough Transform for de-skew image

% originale by Jans Hendry

clear all;

close all;

clc;

%

filename='sample1.png';

%

filename='sample1a.png';

%

filename='sample1c.png';

%

filename='sample2.png';

%

filename='sample2a.png';

filename='sample2b.png';

I=imread(filename);

imshow(I); title('Original Image with Unknow \theta'); [r,c,v]=size(I); Ip=I;

if v>1

I=rgb2gray(I);

end

level=graythresh(I);

I=im2bw(I,level);

% %% noise removing <-- If needed

% I=medfilt2(I,[3 3]);

% I=bwareaopen(I,10);

% figure, imshow(I);

% %%

If needed % I=medfilt2(I,[3 3]); % I=bwareaopen(I,10); % figure, imshow(I); % %% [email : jans.hendry@gmail.com] Page
If needed % I=medfilt2(I,[3 3]); % I=bwareaopen(I,10); % figure, imshow(I); % %% [email : jans.hendry@gmail.com] Page

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

I=edge(I,'canny');

[bar,kol]=find(I);

[sbar,skol]=size(I);

d=round(sqrt(sbar^2+skol^2));

theta_min=-pi/2;

theta_step=pi/180;

theta_max=pi/2;

theta_size=180/rad2deg(theta_step);

rho_min=0;

rho_max=d;

A=zeros(rho_max-rho_min,theta_size);

theta_cnt=theta_min:theta_step:theta_max-theta_step;

for ii=1:length(kol)

inc=1;

for theta=theta_cnt rho_i=round(kol(ii).*cos(theta)+bar(ii).*sin(theta)); if rho_i==0

rho_i=1;

end

A(abs(rho_i),inc)=A(abs(rho_i),inc)+1;

inc=inc+1;

end

end

theta=rad2deg(theta_cnt);

rho=-d:d-1;

g=max(A); [a,b]=max(g);

mtheta=theta(1,b)

disp(sprintf('Skew Angle = %d',mtheta)); newI=imrotate(Ip,mtheta);

% cropping original image geek=newI; level=graythresh(geek);

geek=im2bw(geek,level);

[bar,kol]=find(geek==1);

bar1=min(bar);

kol1=min(kol);

boks=[kol1 bar1 kol(end)-kol1 bar(end)-bar1]; newI=imcrop(newI,boks); figure, imshow(newI); titl1='Reconstructed Image with \theta';

figure, imshow(newI); titl1= 'Reconstructed Image with \theta' ; [email : jans.hendry@gmail.com] Page 3
figure, imshow(newI); titl1= 'Reconstructed Image with \theta' ; [email : jans.hendry@gmail.com] Page 3

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

titl2=sprintf(' = %d',mtheta);

titl=strcat(titl1,titl2);

title(titl);

% originale by Jans Hendry % UGM, Indonesia

Hasil eksekusi program untuk gambar OCR.

by Jans Hendry % UGM, Indonesia Hasil eksekusi program untuk gambar OCR. [email : jans.hendry@gmail.com] Page
by Jans Hendry % UGM, Indonesia Hasil eksekusi program untuk gambar OCR. [email : jans.hendry@gmail.com] Page
by Jans Hendry % UGM, Indonesia Hasil eksekusi program untuk gambar OCR. [email : jans.hendry@gmail.com] Page
by Jans Hendry % UGM, Indonesia Hasil eksekusi program untuk gambar OCR. [email : jans.hendry@gmail.com] Page

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 5
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 5
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 5

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 6
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 6
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 6

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 7
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 7
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 7

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 8
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 8
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 8
[ JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 [email : jans.hendry@gmail.com] Page 8

[JANS HENDRY / EE&IT UGM, INDONESIA]

October 5, 2011

JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 ~~~ TERIMA KASIH ~~~ [email :

~~~ TERIMA KASIH ~~~

JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 ~~~ TERIMA KASIH ~~~ [email :
JANS HENDRY / EE&IT UGM, INDONESIA ] October 5, 2011 ~~~ TERIMA KASIH ~~~ [email :