Anda di halaman 1dari 24

COMPUTER VISION

HOUGH TRANSFORM LINE UNTUK MENDETEKSI GARIS BERBASIS


OPENCV

Oleh :

Ahmad Hanafi

( 1204505007 )

Ngurah Padang Adnyana

( 1204505015 )

Krishna Anugrah Pratama

( 1204505023 )

Setyo Hadi Kusumo

( 1204505039 )

Jurusan Teknologi Informasi


Fakultas Teknik Universitas Udayana
2014

1.

Hough Transform
Hough Transform (HT) didesain untuk menemukan garis pada suatu citra.

HT diperkenalkan oleh Paul Hough pada tahun 1962. Hough Transform adalah
sebuah metode yang dapat digunakan untuk mengisolasi feature tertentu dalam
sebuah citra. Metode Hough Transform biasanya digunakan untuk mendeteksi
bentuk geometri yang dapat dispesifikasikan dalam bentuk parametrik seperti
garis, lingkaran, elips, dan lainlain.
Metode yang digunakan dalam HT adalah membuat persamaan dari suatu
piksel dan mempertimbangkan semua pasangan yang memenuhi persamaan
tersebut. Semua pasangan ditempatkan pada suatu larik akumulator, yang disebut
larik transformasi (Mc Andrew, 2004).

1.1.

Hough Transform Line


Teori dasar Hough Transform menggunakan bentuk parametrik dan

menggunakan pemungutan suara terbanyak (voting) untuk menentukan nilai


parameter yang tepat. Apabila dalam citra terdapat beberapa garis yang saling
berpotongan pada suatu titik, maka apabila kemudian titik tersebut ditransformasi
ke dalam ruang parameter m - c kemudian untuk mengetahui transformasi titik
tersebut adalah sebuah garis lurus atau bukan dilakukan voting dengan persamaan
garis yang dinyatakan dalam persamaan (1.1).
yi = mxi + c

(1.1)

Di dalam sebuah citra yang terdapat garis lurus maka garis tersebut
mempunyai persamaan yang sama dengan persamaan (1.1), maka apabila
ditransformasi ke dalam ruang parameter m - c akan diperoleh hasil beberapa
garis yang saling berpotongan dalam suatu titik. Persamaan transformasi diperoleh
dengan cara memanipulasi persamaan garisnya yaitu persamaan (1.1) menjadi
bentuk parametrik menjadi persamaan (1.2).
c = yi - mxi

(1.2)

Misalnya dari persamaan garis 4x + 3y = 12 kita dapat menggambar


grafiknya pada koordinat Cartesius, dengan cara:

Langkah pertama adalah membuat table koordinat dan cukup dipilih dua
pasangan koordinat yang mudah, yaitu titik potong terhadap sumbu x dan
sumbu y.

Jika diubah menjadi persamaan c = y mx menjadi: 4 = y ( -4/3x) atau 4


= y + 4/3x

Titik potong terhadap sumbu x, y = 0


y + 4/3x

=4

0 + 4/3x

=4

4/3x

=4

= 3, didapat titik (3, 0)

Titik potong terhadap sumbu y, x = 0


y + 4/3x

=4

y+0

=4

= 4, didapat titik (0, 4)

Jadi hasil grafik kartesian persamaan 4x + 3y = 12 terlihat seperti gambar


1.

Gambar 1. Grafik kartesian persamaan 4x + 3y =12

Permisalan lain, terdapat 3 buah titik pada sebuah garis lurus. Sembarang
garis yang melalui titik (x1, y1) berkoresponden dengan garis c = y1 mx1 pada
ruang parameter m-c. Begitu juga, sembarang garis lurus yang melalui (x2, y2)
berkoresponden dengan garis c = y2 mx2 dan sembarang garis lurus yang
melalui (x3, y3) berkoresponden dengan garis c = y3 mx3 pada ruang m-c.

Perpotongan (m, c) dari ketiga garis pada ruang m-c tersebut menentukan garis
unik yang melalui (xi, yi), i = 1, 2, 3, di bidang X-Y.
Dengan cara ini, maka setiap pixel pada garis lurus di bidang citra
berkoresponden dengan sejumlah garis lurus yang melalui satu ititik tertentu di
ruang parameter m-c. Sifat ini dimanfaatkan untuk mendeteksi garis lurus. Jika
setiap pixel tepi melakukan pemungutan suara pada ruang parameter, maka
keberadaan garis lurus pada citra ditandai dengan penumpukan suara pada tempattempat tertentu di ruang parameter.\

Gambar 2. (a) Garis lurus pada ruang X-Y; (b) representasinya dalam ruang parameter m-c.

Dalam kenyataannya, apabila ditemui sebuah garis vertikal, maka akan


terjadi masalah dalam penghitungannya dikarenakan garis vertikal mempunyai
nilai gradien kemiringan yang besarnya tak berhingga ( ). Sebagai
alternatifnyadigunakan persamaan (1.3).
r = x cos + y sin

(1.3)

Dimana gambar koordinat kartesiannya ditunjukkan pada Gambar 1.


Sebuah titik B dalam gambar 1 apabila ditransformasi ke dalam ruang parameter
r - maka akan menjadi seperti gambar 2.

Gambar 3. Citra sebuah garis dalam

Gambar 4. Hasil transformasi dari satu titik

koordinat Kartesian dengan satu titik uji

uji dalam ruang parameter r -

Apabila di dalam citra terdapat suatu garis lurus, maka jika garis lurus citra
ditransformasi kedalam ruang parameter r - akan terjadi suatu titik penumpukan
antar kurva sinusoida hasil pentransformasian masing-masing komponen piksel
garis yang membentuk garis lurus tersebut.

1.2.

Hough Tranform Line dalam OpenCV


Hough Transform Line merupakan transformasi citra yang digunakan

untuk mendetaksi garis lurus. Untuk menerapkannya harus dilakukan deteksi tepi
terlebih dahulu terhadap sebuah citra, umumnya menggunakan Canny Edge
Detection. Setelah dilakukan deteksi tepi barulah dapat dilakukan operasi Hough
Transform Line. Berikut ini cara kerja dari Hough Transform Line.
1.

Umumnya untuk setiap titik

), jenis garis yang melewati titik

tersebut dapat didefinisikan seperti persamaan (1.3), yaitu sebagai berikut:


(2.1)
Artinya bahwa setiap pasang (
melewati
2.

) menunjukkan setiap garis yang

).

Jika untuk koordinat (

) dilakuakan plot jenis garis yang melewati

koordinat tersebut, didapatkan sinusoidnya. Sebagai contoh, untuk


dan

= 6 didapatkanlah plot sebagai berikut (dalam diagram

Gambar 5. diagram

Hanya mempertimbangkan titik sehingga


3.

=8

- ):

> 0 dan 0 <

<

Dapat dilakukan operasi seperti di atas untuk semua titik dalam sebuah
citra. Jika kurva dari 2 titik yang berbeda berpotongan dalam diagram

, hal itu berarti bahwa kedua titik memiliki garis yang sama.

Misalnya, berikut berdasarkan contoh pada gambar 3 dan menggambar


plot untuk dua yang lain:

= 9,

Gambar 6. diagram

= 4 dan

= 12,

= 3, didapatkan:

dengan tambahan 2 titik lain

Tiga plot berpotongan di satu titik tunggal (0.925, 9.6), koordinat ini
adalah parameter ( , ) atau garis di mana

),(

), dan (

berada.
4.

Dari tahapan di atas, umumnya suatu garis dapat terdeteksi dengan


menemukan jumlah perpotongan antara kurva. Semakin banyak kurva
yang berpotongan berarti garis yang ditunjukkan oleh perpotongan tersebut
memiliki lebih banyak titik. Secara umum dapat ditentukan treshold
(batas) jumlah minimun perpotongan yang diperlukan untuk mendeteksi
sebuah garis.

5.

Inilah yang dilakukan Hough Tranform, yaitu menyimpan track


perpotongan antara kurva dari setiap titik dalam citra. Jika jumlah
perpotongan di atas treshold (batas), maka dinyatakanlah sebagai garis
dengan parameter ( , ) pada titik perpotongan.

OpenCV mendukung 2 jenis Hough Transform Line, yaitu: Standard


Hough Transform (SHT) dan Progressive Probabilistic Hough Transform
(PPHT).
1.

Standard Hough Transform (SHT)

SHT ini terdiri dalam cukup banyak tahapan kerja seperti apa yang
dijelaskan sebelumnya. Hough Transform jenis ini memberikan hasil
sebuah vektor dari pasangan ( , ).
2.

Progressive Probabilistic Hough Transform (PPHT)


Sebuah implementasi yang lebih efisien dari Line Hough Transform.
PPHT adalah variasi dari algoritma SHT. PPHT memberikan output
ekstrem garis terdeteksi

). PPHT dikatakan probabilistic

karena, daripada mengakumulasikan setiap kemungkinan baris pada


akumulator, lebih baik mengakumulasi hanya sebagian kecilnya saja.
Dasarnya adalah bahwa sebuah puncak akan menjadi cukup tinggi
bagaimanapun juga, kemudian dengan mengenainya maka dengan sedikit
kecil waktu akan cukup untuk menemukannya. Hasil dari dugaan ini dapat
menjadi substantial reduction (pengurangan besar) pada waktu komputasi.

Di dalam OpenCV, kedua algroritma tersebut (SHT dan PPHT) diakses


dengan fungsi yang sama, meskipun maksud dari beberapa argumen bergantung
pada metode yang digunakan. Berikut ini adalah kode program fungsi Hough
Transform Line pada OpenCV.
CvSeq* cvHoughLines2(
CvArr* image,
void* line_storage,
int method,
double rho,
double theta,
int threshold,
double param1 = 0,
double param2 = 0
);
Kode program 1. Fungsi Hough Transform Line pada OpenCV

Penjelasan dari masing-masing argumen dalam Fungsi Hough Transform


Line pada OpenCV pada kode program 1 adalah sebagi berikut:
1.

CvArr* image,

argumen pertama adalah citra masukan. Citra masuka

harus berupa citra 8-bit oleh karena itu citra harus diubah menjadi citra
keabuan terlabih dahulu dengan fungsi cvCvtColor pada OpenCV. Citra
masukan diperlakukan sebagai informasi biner (yaitu, semua piksel yang

bukan nol dianggap setara) sehingga sebelumnya perlu dilakukan deteksi


tepi menggunakan Canny Edge Detection dengan fungsi cvCanny pada
OpenCV.
2.

void* line_storage,

argumen kedua adalah pointer ke tempat di mana

hasilnya dapat disimpan, yang dapat berupa penyimpanan memori


(menggunakan tipe CvMemoryStorage) atau matriks array sederhana N-by1 (jumlah baris, N, akan menampung hingga batas maksimum garis yang
menjadi hasil return).
3.

int method,

argumen ketiga adalah metode Hough Transform Line, dapat

berupa CV_HOUGH_STANDARD, CV_HOUGH_PROBABILISTIC, atau CV_HOUGH_


MULTI_SCALE

untuk (berturut-turut) SHT, PPHT, atau varian multiskala

dari SHT.
4.

double rho

dan double theta, argumen keempat ini mengatur resolusi

yang diinginkan untuk baris (yaitu, resolusi akumulator). Satuan rho


adalah piksel dan unit theta adalah radian. Dengan demikian, akumulator
dapat dianggap sebagai histogram dua dimensi dengan sel-sel rho dimensi
piksel dengan radian theta.
5.

int threshold,

argumen kelima yang merupakan nilai threshold adalah

nilai pada akumulator yang harus dicapai untuk perulangan hingga


menghasilkan sebuah garis.
6.

double param1 = 0

dan double param2 = 0, argumen terakhir ini tidak

digunakan oleh SHT. Untuk PPHT, param1

menentukan panjang

minimum dari segmen garis yang akan dijadikan kembalian dan param2
menentukan jarak antara segmen kesegarisan (collinear segment) secara
algortima bukan untuk mengganbungkannya menjadi segmen tunggal yang
lebih panjang. Untuk multiscale HT, kedua parameter ini digunakan
mengindikasikan resolusi yang lebih tinggi bagaimana parameter garis
sepatutnya dikomputasi. Multiscale HT terlebih dahulu melakukan
komputasi lokasi garis dengan akurasi yang diberikan oleh parameter rho
dan theta kemudian menghaluskan hasilnya berdasarkan faktor param1
dan param2 secara berurutan.

Jika nilai line_storage adalah pointer ke sebuah memori, * maka nilai


return akan berupa pointer ke struktur urutan CvSeq. Dalam hal ini, bisa
mendapatkan setiap baris atau segmen garis dari urutan dengan perintah seperti
berikut:
float* line = (float*) cvGetSeqElem( lines , i );
Kode program 2. Penggunaan fungsi cvGetSeqElem

Di mana garis adalah nilai return dari cvHoughLines2() dan i adalah


indeks dari garis tujuan. Dalam hal ini, garis akan menjadi pointer ke data untuk
garis tersebut, dengan garis [0] dan garis [1] menjadi nilai floating-point dan
(untuk SHT dan MSHT) atau struktur CvPoint untuk titik akhir dari segmen
(untuk PPHT).

Gambar 7. Perbedaan hasil trasformasi Hough Transform Line, citra asli (kiri), hasil SHT
(tengah), hasil PPHT (kanan)

2.

Implementasi Hough Transform Line Menggunakan OpenCV


Algoritma yang digunakan pada Hough Transform Line untuk mendeteksi

garis dijelaskan melalui flowchart berikut :

Mulai

Pembacaan
Citra

Pembacaan citra asli menjadi citra


aras keabuan

Deteksi tepi

Operasi Hough Transform Line

Deteksi dan rekonstruksi garis lurus

Selesai

Gambar 8. Flowchart Aplikasi Transformasi Hough Untuk Deteksi Garis Lurus

Kode program dari algoritma yang digunakan pada Hough Transform Line
untuk mendeteksi garis sesuai gambar 5 adalah sebagai berikut :
Kode Program

Keterangan

#include <cv.h>
#include <highgui.h>
#include <math.h>
int main(){

/* load the image */


IplImage* img =
cvLoadImage("./segitiga.jpg");
bmp

//jpg

/* create image to receive image


processing result */
IplImage* img1 =
cvCreateImage(cvSize(img->height, img>width),IPL_DEPTH_8U,1);

Menyertakan header yang


digunakan
dalam
program
Tag pembuakan fungsi
main
(fungsi
utama
program)
Memuat image yang akan
diproses
menggunakan
hough transform garis
dalam variabel img
Membuat image kosong
yang
nantinya
akan
menampung hasil proses
pengolahan dari masing-

IplImage* img2 =
cvCreateImage(cvSize(img->height, img>width),IPL_DEPTH_8U,1);
IplImage* img3 =
cvCreateImage(cvSize(img->height, img>width),IPL_DEPTH_8U,1);

/* convert to grayscale */
cvCvtColor( img, img1,
CV_RGB2GRAY);
/* canny edge detection */
cvCanny( img1, img2, 0, 5, 3 );

/* create storage memory for


cvHoughLines2(...) result */
CvMemStorage* storage =
cvCreateMemStorage(0);
/* Standar Hough Transform Line */
CvSeq* houghLinesSHT =
cvHoughLines2( img2, storage,
CV_HOUGH_STANDARD, 1, CV_PI/180, 100, 0,
0 );

cvCvtColor( img, img3,


CV_RGB2GRAY);
// background of the
result of Standar Hough Transform Lin is
Gray Scale of image
for( int i = 0; i <
MIN(houghLinesSHT->total,100); i++ ) {
float* line =
(float*)cvGetSeqElem(houghLinesSHT,i);
float rho = line[0];
float theta = line[1];
CvPoint pt1, pt2;
double a = cos(theta), b =
sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
cvLine( img3, pt1, pt2,
CV_RGB(255,0,0), 3, CV_AA );
}

masing tahap, img1 untuk


hasil konversi ke citra
Gray Scale, img2 untuk
hasil
deteksi
tepi
menggunakan
operasi
Canny Edge, img3 untuk
hasil Hough Transform
garis.
Konversi citra asal (img)
menjadi citra Gray Scale
(img1)
Deteksi
tepi
manggunakan
fungsi
Canny terhadap img1
yang hasilnya ditampung
di img2
Membuat
porinter
storage untuk alokasi
memori
hasil
transformasi
Operasi Standard Hough
Transform (SHT) garis
terhadap
img2
yang
hasilnya
ditampung
dalam alokasi memori
pada variabel storage
Rekonstruksi hasil SHT
garis kedalam img3

/* Progressive Probabilistic Hough


Transform Line */
CvSeq* houghLinesPPHT =
cvHoughLines2( img2, storage,
CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50,
50, 10 );

/* draw line into image Progressive


Probabilistic Hough Transform Line */
cvCvtColor( img, img4,
CV_RGB2GRAY);
// background of the
result of Progressive Probabilistic Hough
Transform Line is Gray Scale of image
for( int i = 0; i < houghLinesPPHT>total; i++ ) {
CvPoint* line =
(CvPoint*)cvGetSeqElem(houghLinesPPHT,i);
cvLine( img4, line[0], line[1],
CV_RGB(255,0,0), 3, CV_AA );
}
//cvNamedWindow("ImagenColor", 1);
cvShowImage("ImagenColor", img);
//cvNamedWindow("Gray", 1);
cvShowImage("Gray", img1);

Operasi
Progressive
Probabilistic
Hough
Transform (PPHT) garis
terhadap
img2
yang
hasilnya
ditampung
dalam alokasi memori
pada variabel storage
Rekonstruksi hasil PPHT
garis kedalam img4

Menampilkan image hasil


pengolahan pada layar
jendela.

//cvNamedWindow("CannyEdge", 1);
cvShowImage("CannyEdge", img2);
//cvNamedWindow("Standar Hough
Transform Line", 1);
cvShowImage("Standar Hough
Transform Line", img3);
//cvNamedWindow("Progressive
Probabilistic Transform Line", 1);
cvShowImage("Progressive
Probabilistic Hough Transform Line",
img4);
cvWaitKey(0);

cvReleaseImage(&img);
cvReleaseImage(&img1);
cvReleaseImage(&img2);
cvReleaseImage(&img3);
cvReleaseImage(&img4);
cvDestroyWindow("ImagenColor");
cvDestroyWindow("CannyEdge");

Menunggu user untuk


menekan tombol agar
program
berhenti,
0
berarti dalam batasan
waktu yang tak terhingga
Mengosongkan alokasi
memori yang digunakan
untuk
menampilkan
image
Mengosongkan

alokasi

cvDestroyWindow("Gray");
cvDestroyWindow("Hough Transform
Line");
cvDestroyWindow("Progressive
Probabilistic Transform Line");

memori yang digunakan


untuk membuat layar
jendela image

Tag penutup fungsi main.


Kode program 3. Kode program implementasi Hough Transform Line

Metode proses yang digunakan dalam Hough Transform Line mendeteksi


suatu garis pada objek berdasarkan algoritma flowchart pada gambar 5 dapat
dijelaskan sebagai berikut :
1.

Pembacaan berkas citra


Pembacaan berkas citra dilakukan untuk membaca citra asli yang menjadi

source gambar suatu objek. Citra (image) itu sendiri memiliki arti secara harfiah
yaitu sebagai gambar pada bidang dua dimensi (dwi matra). Ditinjau dari sudut
pandang matematis, citra merupakan fungsi menerus (continue) dari intensitas
cahaya pada bidang dua dimensi.
2.

Pembacaan citra asli menjadi citra aras keabuan


Setelah dilakukan pembacaan citra, dilanjutkan dengan pengubahan citra

menjadi citra aras keabuan. Supaya citra digital bisa diolah oleh komputer, maka
citra digital harus mempunyai format tertentu. Format citra digital yang dipakai
adalah citra skala keabuan (Grayscale). Format citra ini disebut skala keabuan
karena pada umumnya warna yang dipakai warna hitam sebagai warna minimal
(0) dan warna putih (255) sebagai warna maksimalnya, sehingga warna antaranya
adalah abu-abu.

Gambar 9. Citra Grayscale

3.

Deteksi tepi
Deteksi tepi bertujuan untuk meningkatkan penampakan tepi pada citra.

Suatu objek dapat dengan mudah dideteksi pada suatu citra jika objek cukup
kontras dari latak belakangnya. Pada proses deteksi tepi ini hasilnya adalah berupa
citra biner yang hanya memiliki dua nilai aras keabuan saja yaitu hitam dan putih,
dimana aras keabuan putih menunjukkan batas tepi. Metode deteksi tepi yang
digunakan adalah metode Canny. Mengapa demikian ? Karena deteksi tepi Canny
memiliki algoritma yang optimal dalam melakukan pendeteksian tepi. Untuk
meningkatkan metode-metode yang telah ada dalam pendeteksian tepi, algortima
deteksi tepi Canny mengikuti beberapa kriteria sebagai berikut:
a. Tingkat error yang rendah. Error terjadi bila ada tepi yang penting
tetapi tidak muncul, atau bila ada yang bukan tepi tetapi muncul.
b. Titik-titik pada tepi dilokasikan dengan benar. Dengan kata lain, jarak
antara piksel-piksel tepi yang ditemukan algoritma dengan tepi
sesungguhnya diminimumkan.
c. Hanya satu respon (lebar 1 piksel) untuk setiap sebuah tepi.
Berdasarkan kriteria di atas, algoritma deteksi tepi Canny dilakukan
dengan langkah-langkah sebagai berikut:
a. Pertama-tama

dilakukan

menghilangkan noise.

penghalusan

(smoothing)

citra

untuk

Contohnya menggunakan filtering dengan

Gaussian Filter.
b. Selanjutnya dicari gradient magnitude citra untuk melihat daerahdaerah yang memiliki turunan spasial yang tinggi. Pencarian gradient
magnitude dapat menggunakan metode Sobel, Prewitt, dan lain lain.
c. Ditentukan arah dari tepi dengan menggunakan invers tangen dari
gradient magnitude Y (Gy) dibagi gradient magnitude X (Gx). Arah
yang diperoleh dari perhitungan ini kemudian dipetakan ke 0, 45, 90,
atau 135 derajat berdasarkan kedekatannya dengan keempat derajat
arah tadi.
d. Kemudian dilakukan Non Maximum Suppression. Yaitu, penghilangan
nilai-nilai yang tidak maksimum. Ditelusuri daerah yang ditemukan

pada langkah 2 (dengan arah seperti yang ditemukan pada langkah 3),
dan menghilangkan (suppress) setiap piksel yang tidak maksimum.
e. Selanjutnya dilakukan Hysteresis. Hysteresis menggunakan dua
threshold T1 (threshold bawah) dan T2 (threshold atas).

Bila

magnitude ada di bawah T1, titik tersebut di-set nol (dijadikan nontepi). Bila magnitude ada di atas T2, maka termasuk tepi.

Bila

magnitude ada diantara T1 dan T2, di-set nol kecuali jika ada jalan
(path) dari titik tersebut ke titik yang memiliki magnitude di atas T2.

Gambar 10. Citra Hasil Deteksi Tepi

4.

Operasi Hough Transform Line


Pada proses operasi hough transform ini berfungsi untuk menampung citra

dalam bentuk koordinat berdasarkan hasil deteksi tepi menggunakan metode


canny. Sebelum menentukan garis lurus, citra yang telah melalui proses deteksi
tepi akan terlebih dahulu di tampung di dalam variabel storage pada program.
5.

Deteksi dan rekonstruksi garis lurus


Proses selanjutnya adalah deteksi dan rekonstruksi garis lurus. Deteksi

garis lurus dilakukan dengan pembandingan antara besar tiap-tiap R yang ada
terhadap besar R maksimun yang telah dikalikan dengan nilai ambang yang telah
ditentukan yaitu sebesar 0,75. Besarnya R maksimum yang telah dikalikan dengan
nilai ambang dijadikan sebagai batas minimal besar R yang harus dipenuhi
sebagai syarat dideteksi dan direkonstruksi sebagai sebuah garis lurus.
Perekonstruksian garis lurus pada program ini dilakukan pada tiap-tiap titik
penumpukan yang telah dideteksi sebagai garis lurus. Perekonstruksian garis lurus
pada program ini dimulai dengan penghitungan dan penentuan letak titik asal

terhadap titik tengah citra hasil pendeteksian tepi yang dijadikan sebagai titik
referensi. Titik tengah citra adalah suatu titik yang berada persis di tengah matriks
suatu citra. Penentuan letak titik asal terhadap titik tengah citra yang dijadikan
sebagai titik referensi dijadikan sebagai alat bantu untuk mempermudah proses
perekonstruksian selanjutnya. Setelah itu ditentukan batas titik x sesuai batas
kolom matriks pada citra asli. Selanjutnya dihitung dan ditentukan batas titik y
dengan mengacu pada letak titik asal dan batas titik x. Setelah itu direkonstruksi
garis lurus dan titik asalnya sesuai dengan batas titik x dan batas titik y yang
bersesuaian yang telah dihitung sebelumnya.

3.

Hasil Implementasi
Berdasarkan implementasi algoritma dan kode program di atas diperoleh

hasil pengolahan citra deteksi tepi menggunakan Hough Transform sebagai


berikut.
1.

Citra asli
Citra asli merupakan citra digital yang menjadi source image yang akan

dilakukan perekonstruksian garis lurus. Untuk memuat citra asli pada program
yang dibuat dengan menggunakan OpenCV dengan cara menggunakan perintah
sebagi berikut.
/* load the image */
IplImage* img = cvLoadImage("./segitiga.jpg");
bmp
Kode program 4. Perintah Untuk Memuat Citra

//jpg

Gambar 11. Citra Asli

2.

Konversi Grayscale
Konversi citra asli ke grayscale bertujuan agar citra tersebut memiliki

format yang dapat dibaca dan nantinya dapat diolah oleh komputer. Perintah yang
digunakan oleh OpenCV untuk mengkonversi citra asli ke dalam grayscale adalah
sebagai berikut.
/* convert to grayscale */
cvCvtColor( img, img1, CV_RGB2GRAY);
Kode program 5. Perintah Untuk Konversi Grayscale

Gambar 12. Citra Hasil Konversi Grayscale

3.

Deteksi Canny Edge


Deteksi Canny Edge berfungsi untuk mendeteksi dan meningkatkan

kualitas tepi pada suatu citra. Perintah yang digunakan untuk konversi ke canny
edge adalah sebagai berikut.
/* canny edge detection */
cvCanny( img1, img2, 0, 5, 3 );
Kode program 6. Perintah Untuk Deteksi Canny Edge

Gambar 13. Citra Hasil Deteksi Canny Edge

4.

Standard Hough Transform


Standard Hough Transform (SHT) menggunakan parameter normal untuk

garis lurus berupa persamaan, dengan sebagai jarak suatu garis terhadap titik asal
dan sebagai orientasi garis tersebut terhadap sumbu. Setiap titik pada citra
ditransformasikan menjadi suatu kurva sinusiodal pada ruang. Akumulator
mencatat semua perpotongan kurva dan mengambil perpotongan terbanyak.
Perintah yang digunakan untuk membuat operasi SHT pada citra adalah sebagai
berikut.
/* Standar Hough Transform Line */
CvSeq* houghLinesSHT = cvHoughLines2( img2, storage,
CV_HOUGH_STANDARD, 1, CV_PI/180, 100, 0, 0 );
Kode program 7. Operasi Standard Hough Transform, dengan akumulator yang harus
dicapai 100

Pada kode program 7 transformasi Hough SHT menggunakan nilai 100


sebagai parameter akumulator yang harus dicapai untuk menghasilkan garis. Hasil
dari kode program 7 terlihat pada gambar 14.

Gambar 14. Citra Hasil Standard Hough Transform dengan nilai akumulator 100

Untuk memperoleh hasil yang lebih baik dapat dilakukan dengan


melakukan variasi pada beberapa nilai parameter. Pada kode program 8 berikut
terdapat variasi untuk nilai akumulator, yaitu sebesar 3.
CvSeq* houghLinesSHT = cvHoughLines2( img2, storage,
CV_HOUGH_STANDARD, 1, CV_PI/180, 3, 0, 0 );
Kode program 8. Operasi Standard Hough Transform, dengan akumulator yang harus
dicapai 3

Hasil dari kode program 8, dapat terlihat seperti pada gambar 15 di bawah
ini.

Gambar 15. Citra Hasil Standard Hough Transform dengan nilai akumulator 3

5.

Progressive Probabilistic Hough Transform Line


Progressive Probabilistic Hough Transform Line (PPHT) merupakan

suatu implementasi yang lebih efesien dalam deteksi garis. Cara ini memberikan
output yang lebih detail dalam mendeteksi sebuah garis pada suatu citra. Operasi
PPHT dapat dilakukan dengan perintah sebagai berikut.
/* Progressive Probabilistic Hough Transform Line */
CvSeq* houghLinesPPHT = cvHoughLines2( img2, storage,
CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50, 50, 10 );
Kode program 9. Operasi Progressive Probabilistic Hough Transform Line

Pada kode program 9 transformasi Hough PPHT menggunakan parameter


50 untuk akumulator, 50 menentukan panjang minimum dari segmen garis yang
akan dijadikan kembalian, dan 10 menentukan jarak antara segmen kesegarisan
(collinear segment) secara algortima bukan untuk mengganbungkannya menjadi

segmen tunggal yang lebih panjang. Hasil dari kode program 9 terlihat pada
gambar 16.

Gambar 16. Citra Hasil Progressive Probabilistic Hough Transform Line dengan nilai akumulator
50, panjang minimum segmen 50, dan collinear segment 10

Untuk memperoleh hasil yang lebih baik dapat dilakukan dengan


melakukan variasi pada beberapa nilai parameter. Pada kode program 10 berikut
terdapat variasi, yaitu: akumulator sebesar 16, panjang minimum segmen 10, dan
jarak antar segmen (collinear segment) 5.
CvSeq* houghLinesPPHT = cvHoughLines2( img2, storage,
CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 16, 10, 5 );
Kode program 10. Operasi Progressive Probabilistic Hough Transform Line

Hasil dari kode program 10 diatas, dapat terlihat seperti pada gambar 17 di
bawah ini.

Gambar 17. Citra Hasil Progressive Probabilistic Hough Transform Line dengan nilai akumulator
16, panjang minimum segmen 10, dan collinear segment 5

REFERENSI
Adrian, Kaebler & Gary Bardski. Learning OpenCV. 2008. Cambridge:
OReilly.
OpenCV 2.4.9.0 documentation , http://docs.opencv.org/doc/tutorials/ imgproc/
imgtrans/hough_lines/hough_lines.html#hough-lines.
Halimatus Sadiyah, R.Rizal Isnanto, dan Achmad Hidayatno, APLIKASI
TRANSFORMASI HOUGH UNTUK DETEKSI GARIS LURUS, Teknik
Elektro, UNDIP, 2008.
http://id.scribd.com/doc/43121235/Pendeteksian-Garis-Dengan-MemanfaatkanTransformasi-Hough.
http://kacapembesar.wordpress.com/2009/12/05/canny-edge-detection/.
https://id.scribd.com/doc/43121235/Pendeteksian-Garis-Dengan-MemanfaatkanTransformasi-Hough.