Hough Transform Deteksi Garis

February 19, 2019 | Author: Ngurah Padank Adnyana | Category: N/A
Share Embed Donate


Short Description

Penerapan Hough Transform dalam Pendeteksian Garis Tepi...

Description

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  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 lain – lain. 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  , maka apabila ditransformasi ke dalam ruang i  = mx  i  + c   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    menjadi bentuk i  = mx  i  + c   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 instruksiinstruksi 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

Operasi Hough Transform

Deteksi dan rekonstruksi garis lurus

Selesai

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.j pg");

//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, >width),IPL_DEPTH_8U,1); IplImage* img2 = cvCreateImage(cvSize(img->height, >width),IPL_DEPTH_8U,1); IplImage* img3 = cvCreateImage(cvSize(img->height, >width),IPL_DEPTH_8U,1);

*/ imgimgimg-

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. /* convert to grayscale */ cvCvtColor( img, img1, CV_RGB2GRAY); Kode Program 3 Konversi Citra Aras Keabuan

Gambar 8 Citra Grayscale

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-MemanfaatkanTransformasi-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 ):

4.

a.

Pembacaan Citra

b.



Hasil Implementasi ( screen shoot program)

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF