Anda di halaman 1dari 5

[digital image processing]

October 26, 2011

DETEKSI GARIS MENGGUNAKAN TRANSFORMASI HOUGH

Matlab sebenarnya sudah menyediakan toolbox khusus untuk operasi transformasi Hough. Seperti diketahui bahwa transformasi ini telah banyak dan masih dipergunakan dalam berbagai permasalahan khususnya dalam pengolahan citra digital. Kemampuan dari transformasi ini untuk mendeteksi garis dari yang terpendek hingga terpanjang menjadikannya sebagai solusi tepat untuk melakukan filter garis pada citra. Transformasi ini pada dasarnya dirancang untuk mendeteksi kurva pada citra, dengan demikian dia juga bisa digunakan untuk mendeteksi lingkaran. Transformasi hough bekerja dengan memproyeksikan objek dari koordinat xy ke koordinat lingkaran. Sehingga sebuah garis bisa diwakilkan oleh 2 komponen, yakni jari-jari (rho) dan sudut (theta). Dengan kemampuannya mengembalikan 2 variabel ini kita bisa juga menggunakannya untuk rekonstruksi citra yakni perbaikan geometri kemiringan (tilt). Seperti yang telah saya jelaskan secara detil pada artikel lain tentang penggunaan hough untuk memperbaiki kemiringan citra, telah saya cantumkan bahwa hough ini menggunakan voting untuk menentukan garis terpanjang. Semakin besar nilai voting nya maka itu adalah garis terpanjang. Untuk memilih lebih dari 1 garis, maka kita perlu memberikan nilai ambang batas (threshold). Nilai ini bisa diberikan secara manual saja, karena memang yang dibutuhkan hanya observasi terhadap hasil threshold yang diberikan di awal, apakah sudah cukup bagus atau belum. Dalam artikel ini saya akan menjelaskan penggunaan toolbox matlab yakni Hough. Dalam matlab dikenal ada 3 parameter penting untuk Hough, yakni: Hough Tugasnya untuk menghitung nilai dari transformasi hough. Houghpeaks Tugasnya untuk memilih nilai-nilai hough terbesar sesuai dengan nilai threshold yang diberikan. Dengan menggunakan nilai yang didapat, kita akan mendapatkan nilai theta (kemiringan) dari citra. Demikian juga kita akan mengetahui nilai rho terbesar. Houghlines Toolbox ini berkaitan dengan point ke 2, karena kita menggunakan fungsi ini untuk mendeteksi garis dan melakukan plot pada figure sesuai dengan nilai hough yang kita pilih menggunakan nilai ambang batas (threshold). Jika tugas kita hanya ingin mengetahui besar theta dan rho, maka kita cukup menggunakan point ke 2 saja. Terpikir oleh saya untuk menyelesaikan game sudoku menggunakan pengolahan citra pada matlab. Sebagai langkah awal, saya akan menggunakan hough untuk deteksi garis. Tujuannya agar saya bisa memotong bagian-bagian dari sudoku tersebut. Misalkan saya memiliki citra seperti ini: [{EE&IT UGM, Indonesia} janshendry@gmail.com]

[digital image processing]

October 26, 2011

Tampak bahwa citra di atas terdiri atas banyak angka dan garis. Langkah yang akan saya lakukan nanti adalah dengan menentukan kotak terbesar terlebih dahulu, lalu melakukan cropping untuk tiap kotak (berarti ada 9 kotak). Kemudian untuk tiap kotak hasil pemotongan, saya lakukan deteksi garis untuk memotong mereka menjadi 9 kotak kecil. Artinya nanti aja ada 81 kotak kecil. Tujuannya agar bisa memberikan nilai 0 untuk kotak yang kosong. Tapi untuk artikel ini saya akan menggambarkan deteksi terhadap semua garis saja. Karena artikel yang lain tentang game sudoku akan saya pisahkan dan dibahas secara lengkap. Berikut ini adalah programnya:
clear all; close all; clc; %% importing image to matlab filename='UNSOLVABLE-1.png'; I=imread(filename); imshow(I); title('Original Image'); [row,col,val]=size(I); if val~= 1 I=rgb2gray(I); end rotI=I; %% %% finding hough transform BW = edge(I,'canny'); [H,T,R] = hough(BW); figure, imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit'); xlabel('\theta'), ylabel('\rho');

[{EE&IT UGM, Indonesia} janshendry@gmail.com]

[digital image processing]

October 26, 2011

axis on, axis normal, hold on; %% %% finding max value of hough by threshold P = houghpeaks(H,20,'threshold',ceil(0.35*max(H(:)))); x = T(P(:,2)); y = R(P(:,1)); plot(x,y,'o','color','green'); hold off; %% %% finding lines lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7); figure, imshow(rotI), title('Image with All Lines Detected'), hold on; max_len = 0; for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green'); % plot starting and end points plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red'); end hold off; %% end

Ada beberapa hal yang perlu diperhatikan dari program di atas. Pada Houghpeaks kita harus menentukan berapa jumlah garis yang ingin dideteksi. Dalam hal ini saya memberikan nilai 20 yang berarti saya membutuhkan matlab untuk mengembalikan 20 buah garis. Lalu kita perlu juga untuk memberikan nilai threshold. Dalam hal ini saya merasakan bahwa nilai yang telah ditulis cukup untuk mendeteksi garis yang saya butuhkan. Pada Houghlines kita memberikan nilai pada properti Fillgap dan Minlength. Berhatihatilah dalam memberikan nilai ini. Karena semakin kecil nilai yang kita berikan maka detil-detil yang tidak kita perlukan akan ikut terdeteksi. Dengan demikian perlu melakukan observasi terhadap nilai yang telah kita berikan.

[{EE&IT UGM, Indonesia} janshendry@gmail.com]

[digital image processing]

October 26, 2011

Hasil eksekusinya:

[{EE&IT UGM, Indonesia} janshendry@gmail.com]

[digital image processing]

October 26, 2011

Penggunaan dari toolbox matlab ini sangat mudah dan saya sudah mencoba untuk menjelaskannya dengan sederhana. Semoga bisa membantu anda. Sebahagian program ini saya ambil dari HELP matlab. Dengan demikian anda bisa merujuk pada help matlab terkait topik hough.

Sumber: Matlab Help Product

thanks

[{EE&IT UGM, Indonesia} janshendry@gmail.com]