Anda di halaman 1dari 15

COMPUTER VISION

HOUGH TRANSFORM UNTUK MENDETEKSI GARIS BERBASIS OPEN CV







Oleh :

1. Ahmad Hanafi ( 1204505007 )
2. Ngurah Padang Adnyana ( 1204505015 )
3. Krishna Anugrah Pratama ( 1204505023 )
4. Setyo Hadi Kusumo ( 1204505039 )




Jurusan Teknologi Informasi
Fakultas Teknik Universitas Udayana
2014
Teori
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.
Ide dari HT adalah membuat persamaan dari suatu piksel dan mempertimbangkan semua
pasangan yang memenuhi persamaan ini. Semua pasangan ditempatkan pada suatu larik
akumulator, yang disebut larik transformasi (Mc Andrew 2004). Transformasi Hough
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 akan didapati bahwa transformasi dalam ruang parameter m - c adalah
sebuah garis lurus dengan persamaan garis dinyatakan sebagai, y
i
=mx
i
+c.
Sebaliknya jika dalam citra terdapat sebuah garis lurus, dimana garis tersebut mempunyai
persamaan seperti persamaan y
i
= mx
i
+ c, maka apabila ditransformasi ke dalam ruang
parameter m - c akan diperoleh bahwa transformasi dalam ruang parameter m - c adalah
beberapa garis yang saling berpotongan dalam suatu titik. Persamaan transformasi diperoleh
dengan cara memanipulasi persamaan garisnya yaitu persamaan y
i
=mx
i
+c menjadi bentuk
parametrik menjadi persamaan, c =y
i
- mx
i
.
Perhitungan transformasi dilakukan dengan cara menghitung tiap titik dalam citra
kedalam semua variasi nilai 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 r
= x cos + y sin . Dimana gambar koordinat kartesiannya ditunjukkan pada Gambar 1.

Gambar 1. Citra sebuah garis dalam koordinat Kartesian dengan satu titik uji
Sebuah titik B dalam gambar tersebut apabila ditransformasi ke dalam ruang parameter r
- maka akan menjadi seperti Gambar 2.

Gambar 2. Hasil transformasi dari satu titik 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.
Prinsip kerja metode ini dalam pendeteksian garis adalah dengan mencari bentuk
geometriyang paling bersesuaian dengan kumpulan titik pada citra. Kelebihan Hough Transform
adalah :
a. mampu mendeteksi garis pada bentuk geometri dengan kumpulan tepi yang terputus-
putus,
b. relatif tidak terpengaruh derau,
c. parameter yang mempengaruhi performansi adalah kuantisasi parameter pada ruang
Hough.

OpenCV mendukung dua jenis baris yang berbeda pada Hough transform, Pada Hough
standar transform dan pada Hough probabilistik progresif transformasi.
Fungsi untuk menghitung rupa untuk saluran individu di samping Orientasi. Ini adalah
"probabilistik" karena, daripada mengumpulkan setiap titik mungkin dalam pesawat akumulator,
terakumulasi hanya sebagian kecil dari mereka. Th e ide adalah bahwa jika puncak akan menjadi
cukup tinggi bagaimanapun, kemudian memukul itu hanya sebagian kecil dari waktu akan cukup
untuk fi nd itu; hasil dari dugaan ini dapat pengurangan substansial dalam waktu komputasi.
Kedua algoritma ini diakses dengan fungsi OpenCV yang sama, meskipun arti dari beberapa
argumen bergantung pada Metode yang digunakan.
CvSeq* cvHoughLines2(
CvArr* image,
void* line_storage,
int method,
double rho,
double theta,
int threshold,
double param1 = 0,
double param2 = 0
);
Source Code diatas merupakan contoh script dari openCV
E pertama pada argumen Th adalah gambar input. merupakan gambar 8-bit, akan tetapi input
dilakukan perubahan ke informasi biner (yaitu, semua piksel nol dianggap setara). Kemudian
Argumen adalah pointer ke tempat di mana hasilnya dapat disimpan, yang dapat berupa
penyimpanan memori atau polos N-oleh 1 matriks array (yang jumlah baris, N, akan berfungsi
untuk membatasi jumlah maksimum baris kembali).
Argumen berikutnya, metode, dapat Cv Hough standard, cv hough probabilistik atau cv hough
multi scale untuk masing masing metode atau varian multiskala dari hough standar.
dua argumen berikutnya yaitu rho dan theta, yang digunakan menetapkan resolusi yang
diinginkan untuk baris. E unit th rho adalah piksel dan unit theta adalah radian. dengan demikian,
pesawat akumulator dapat dianggap sebagai histogram dua dimensi dengan sel-sel rho dimensi
piksel dengan radian theta. Th nilai e threshold adalah nilai dalam bidang akumulator yang harus
dihubungi untuk rutin untuk melaporkan baris. adalah argumen terakhir adalah sedikit rumit
dalam praktek; itu tidak normal, sehingga Anda harus mengharapkan untuk skala itu dengan
ukuran gambar untuk hough standard. Ingatlah bahwa argumen ini adalah, dalam eff ect,
menunjukkan jumlah poin yang harus mendukung garis untuk line untuk dikembalikan.
Argumen param1 dan param2 tidak digunakan oleh SHT tersebut. Untuk PPHT, param1
menetapkan panjang minimum dari segmen garis yang akan dikembalikan, dan param2
menetapkan pemisahan antara segmen collinear dibutuhkan untuk algoritma tidak bergabung
dengan mereka ke dalam segmen tunggal lagi. Untuk HT multiskala, dua parameter yang
digunakan untuk menunjukkan resolusi yang lebih tinggi dimana parameter untuk lini harus
dihitung. Multiskala HT pertama menghitung lokasi dari garis dengan akurasi yang diberikan
oleh rho dan parameter theta dan kemudian melanjutkan untuk kembali baik-baik saja hasil
tersebut dengan faktor param1 dan param2, masing-masing (yaitu, penyelesaian akhir di rho
adalah rho dibagi dengan param1 dan resolusi akhir dalam theta, theta dibagi dengan param2).
Fungsi return tergantung bagaimana fungsi tersebut dipanggil. Jika nilai line
penyimpanan adalah array matriks, maka nilai kembali yang sebenarnya akan NULL. Dalam hal
ini, matriks harus dari jenis CV_32FC2 jika SHT atau multi-skala HT sedang digunakan dan
harus CV_32SC4 jika PPHT yang digunakan. Dalam pertama dua kasus, - dan -nilai untuk
setiap baris akan ditempatkan di dua saluran array. Dalam kasus PPHT, empat saluran akan terus
x dan y-nilai awal dan titik akhir dari segmen kembali. Dalam semua kasus ini, jumlah baris
dalam array akan diperbarui oleh cvHoughLines2 () untuk benar mencerminkan jumlah baris
kembali. Jika nilai line penyimpanan adalah pointer ke sebuah memori, * maka nilai kembali
akan menjadi pointer ke struktur urutan CvSeq. Dalam hal ini, Anda bisa mendapatkan setiap
baris atau segmen garis dari urutan dengan perintah seperti
float* line = (float*) cvGetSeqElem( lines , i );
Dimana garis adalah nilai kembali dari cvHoughLines2 () dan i adalah indeks dari garis tujuan.
Dalam hal ini, garis akan menjadi pointer ke data untuk baris tersebut, dengan garis [0] dan garis
[1] menjadi terapung-point nilai dan (untuk SHT dan MSHT) atau struktur CvPoint untuk
titik akhir dari segmen (untuk PPHT).

Studi Kasus
Studi kasus yang akan dibahas pada tugas ini yaitu Pembuatan Aplikasi Transformasi
Hough Untuk Deteksi Garis Lurus berbasis OpenCV. Tujuannya adalah untuk memunculkan dan
mempertegas keberadaan garis lurus dalam sebuah citra berdasarkan ciri citra yang dimiliki serta
untuk menganalisis hasil deteksi garis lurus yang diperoleh dari Transformasi Hough.
Algoritma
Algoritma adalah metode efektif diekspresikan sebagai rangkaian terbatas dari instruksi-
instruksi yang telah didefinisikan dengan baik untuk menghitung sebuah fungsi. Dimulai dari
sebuah kondisi awal dan input awal (mungkin kosong), instruksi-instruksi tersebut menjelaskan
sebuah komputasi yang, bila dieksekusi, diproses lewat sejumlah urutan kondisi terbatas yang
terdefinisi dengan baik, yang pada akhirnya menghasilkan "keluaran" dan berhenti di kondisi
akhir. Transisi dari satu kondisi ke kondisi selanjutnya tidak harus deterministik; beberapa
algoritma, dikenal dengan algoritma pengacakan, menggunakan masukan acak.
Flowchart adalah adalah suatu bagan dengan simbol-simbol tertentu yang
menggambarkan urutan proses secara mendetail dan hubungan antara suatu proses (instruksi)
dengan proses lainnya dalam suatu program.
Algoritma yang digunakan pada Hough Transform untuk mendeteksi garis dijelaskan
melalui flowchart berikut :
Mulai
Pembacaan
Citra
Pembacaan citra menjadi asli menjadi
citra aras keabuan
Deteksi tepi
Deteksi dan rekonstruksi garis lurus
Selesai
Operasi Hough Transform

Gambar 3 Flowchart Aplikasi Transformasi Hough Untuk Deteksi Garis Lurus

Metode proses yang digunakan dalam hough transform mendeteksi suatu garis pada
objek berdasarkan algoritma flowchart pada gambar 1 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 (dwimatra). Ditinjau dari sudut pandang matematis, citra merupakan fungsi
menerus (continue) dari intensitas cahaya pada bidang duadimensi.


2. Pengubahan Citra 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 (Gray
Scale). 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 4 Citra Grayscale
3. Deteksi Tepi
Deteksi tepi dilakukan untuk meningkatkan penampakan garis pada citra tepi. Terdapat
beberapa macam metode untuk mendeteksi tepi. Pada tugas ini digunakan metode Canny untuk
mendeteksi tepi.

Gambar 5 Deteksi Tepi
4. Operasi Hough Transform
Pada proses operasi hough transform ini berfungsi untuk menampung citra dalam bentuk
koordinat berdasarkan hasil deteksi tepi menggunakan metode canny edge.

5. Deteksi dan Rekonstruksi Garis Lurus
Setelah dilakukan deteksi tepi pada citra, lalu dilanjutkan dengan deteksi dan rekonstruksi garis
Dari tahapan ini user dapat mengetahui bentuk garis lurus yang terdapat di dalam suatu objek citra.

Gambar 6 Rekonstruksi Garis Lurus
Implementasi Aplikasi OpenCV
1. Pembacaan Citra
Pembacaan berkas citra dilakukan untuk membaca citra asli yang menjadi source gambar
suatu objek. Untuk membaca suatu citra dapat dilakukan dengan kode program berikut.
/* load the image */
IplImage* img = cvLoadImage("./segitiga.jpg"); //jpg bmp

Kode Program 1 Pembacaan Citra
Citra yang akan dijadikan sebagai citra uji hough transform untuk mendeteksi garis lurus
adalah sebagai berikut.

Gambar 7 Citra Uji
2. 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 (Gray Scale). Untuk
mengkonversi citra asli menjadi citra aras keabuan terlebih dahulu dibuat ruang untuk membuat
image kosong yang nantinya akan menampung hasil proses pengolahan dari masing-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.
/* create image to receive image processing result */
IplImage* img1 = cvCreateImage(cvSize(img->height, img-
>width),IPL_DEPTH_8U,1);
IplImage* img2 = cvCreateImage(cvSize(img->height, img-
>width),IPL_DEPTH_8U,1);
IplImage* img3 = cvCreateImage(cvSize(img->height, img-
>width),IPL_DEPTH_8U,1);

Kode Program 2 Ruang menampung hasil proses pengolahan dari masing-masing tahap

Setelah dibuatnya ruang untuk menampung hasil proses pengolahan, maka langkah
selanjutnya adalah mengkonversi citra asli ke citra aras keabuan.
Kode Program 3 Konversi Citra Aras Keabuan


Gambar 8 Citra Grayscale

/* convert to grayscale */
cvCvtColor( img, img1, CV_RGB2GRAY);

3. Deteksi Tepi
Deteksi tepi dilakukan untuk meningkatkan penampakan garis pada citra tepi. Metode
yang digunakan adalah metode Canny untuk mendeteksi tepi. Untuk mengkonversi citra ke
dalam metode canny edge dapat dilakukan dengan kode program sebagai berikut.
/* canny edge detection */
cvCanny( img1, img2, 0, 5, 3 );

Kode Program 4 Konversi Metode Canny Edge

Gambar 9 Citra Konversi Canny Edge

4. Operasi Hough Transform
Proses selanjutnya adalah deteksi dan rekonstruksi garis lurus. Deteksi garis lurus
dilakukan dengan pembandingan antara besar tiap-tiap R yang ada terhadap besar R maksimum
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.
Penerapan rekontruksi garis lurus dapat digunakan dengan program sebagai berikut.
/* draw line into image */
for( int i = 0; i < MIN(houghLines->total,100); i++ ) {
float* line = (float*)cvGetSeqElem(houghLines,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, 8 );
}

Kode Program 5 Rekontruksi Garis Lurus


Gambar 10 Citra uji vertikal.bmp terekonstruksi 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. Jarak antara letak titik asal terhadap letak titik tengah
adalah merupakan jarak terdekat antara garis lurus dengan titik tengah jarak tersebut dinyatakan
dengan symbol . 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.

















Referensi :
1. http://id.scribd.com/doc/43121235/Pendeteksian-Garis-Dengan-Memanfaatkan-
Transformasi-Hough
2. http://eprints.undip.ac.id/25328/1/ML2F003503.pdf

Format laporan:
1. Cover
2. Teori Hough Transform
a. Hough Transform Line ( laporan)
b. Hough Tranform Line in OpenCV ( Oreilly Ebook, OpenCV Doc:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_li
nes.html )
3. Implementasi Hough Transform Menggunakan OpenCV ( algoritma)
Penjelasan Algoritma ( explanation dari OpenCV Doc:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html ):
a. Pembacaan Citra
b.
4. Hasil Implementasi ( screen shoot program)