pendeteksi tepi citra dengan metode canny menggunakan opencv

20
UNIVERSITAS GUNADARMA FAKULTAS TEKNOLOGI INDUSTRI Pendeteksi Tepi Citra Dengan Metode Canny Menggunakan OpenCV 2013 Nama : - Abimanyu Rio Y. - Fitra Reza Kelas : 4IA03 Fakultas : Teknologi Industri Jurusan : Teknik Informatika Dosen : Eri Prasetyo Wibowo

Upload: bajajreza

Post on 25-Oct-2015

871 views

Category:

Documents


7 download

DESCRIPTION

Pendeteksi Tepi Citra Dengan Metode CannyMenggunakan OpenCV

TRANSCRIPT

Page 1: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

UNIVERSITAS GUNADARMA

FAKULTAS TEKNOLOGI INDUSTRI

Pendeteksi Tepi Citra Dengan Metode Canny

Menggunakan OpenCV

2013

Nama : - Abimanyu Rio Y.

- Fitra Reza

Kelas : 4IA03

Fakultas : Teknologi Industri

Jurusan : Teknik Informatika

Dosen : Eri Prasetyo Wibowo

Page 2: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

Penjelasan Umum:

Metode edge detection akan mendeteksi semua edge atau garis-garis yang

membentuk objek gambar dan akan memperjelas kembali pada bagian-bagian tersebut.

Tujuan pendeteksian ini adalah bagaimana agar objek di dalam gambar dapat dikenali dan

disederhanakan bentuknya dari bentuk sebelumnya. Metode Canny edge detection

merupakan pengembangan dari metode dasar edge detection. Perancangan sebuah prosedur

dengan menerapkan langkah-langkah metode Canny edge detection akan menghasilkan

sebuah tampilan gambar yang berbeda dengan menampilkan efek relief didalamnya. Efek

relief adalah seperti sebuah tampilan batu kasar yang diukir, yaitu garis-garis kasar yang

membentuk sebuah penggambaran objek di dalamnya. Efek relief terbentuk dari bayangan

terang dan gelap. Kedua bayangan ini terjadi akibat adanya sorotan sinar mengenai gambar

dari arah tertentu. Kelebihan dari metode Canny ini adalah kemampuan untuk mengurangi

noise sebelum melakukan perhitungan deteksi tepi sehingga tepi-tepi yang dihasilkan lebih

banyak.

Tepi (edge) adalah perubahan nilai intensitas derajat keabuan yang cepat atau tiba-

tiba (besar) dalam jarak yang singkat. Tujuan mendeteksi tepi sendiri adalah untuk

mengelompokkan objek-objek dalam citra, dan juga digunakan untuk menganalisis citra

lebih lanjut. Ada banyak algoritma yang digunakan untuk mendeteksi tepi, salah satu

diantaranya adalah deteksi tepi Canny (Canny Edge detection).

Canny edge detector dikembangkan oleh John F. Canny pada tahun 1986 dan

menggunakan algoritma multi-tahap untuk mendeteksi berbagai tepi dalam gambar.

Walaupun metode tersebut telah berumur cukup lama, namun metode tersebut telah menjadi

metode deteksi tepi standar dan masih dipakai dalam penelitan.

Algoritma

Algoritma canny edge detection secara umum (detilnya tidak baku atau bisa divariasikan)

beroperasi sebagai berikut :

1. Penghalusan untuk mengurangi dampak noise terhadap pendeteksian edge

2. Menghitung potensi gradien citra

3. non-maximal supression dari gradien citra untuk melokalisasi edge secara presisi

4. hysteresis thresholding untuk melakukan klasifikasi akhir

Page 3: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

Penghalusan citra

Biasanya teknik yang digunakan pada tahap ini adalah Gaussian Blur. Proses Gaussian Blur

dapat dilakukan terhadap citra secara keseluruhan (hasil akhir berupa 1 citra baru), atau

dilakukan terpisah (hasil akhir berupa dua buah citra yaitu blur horizontal dan vertikal). Hasil

dari gaussian blur akan digunakan dalam langkah selanjutnya yaitu menentukan potensi

gradien citra.

Menghitung potensi gradien citra

Gradien merupakan operator yang paling mendekati definisi dari sebuah edge. Oleh sebab itu

dalam kuliah pengolahan citra, operator berbasis turunan menjadi materi pengantar. Ada dua

buah operator yang akan saya sebutkan dalam tulisan ini yaitu operator Sobel dan Kirsch

(silakan cari sendiri deskripsi kedua operator ini ). Kedua operator ini mewakili dua buah

pendekatan yang memiliki landasan ide yang berbeda dalam menghitung gradien.

Pada langkah menghitung potensi gradien citra ada dua buah informasi yang dibutuhkan yaitu

kekuatan edge (edge strength/magnitude), dan arah edge (edge direction/orientation). Operator

sobel memanfaatkan dua buah template edge pada dua arah tegak lurus (horizontal dan vertikal)

dan menghitung arah edge dari arctangent kedua nilai tersebut. Lain halnya dengan operator

Kirsch yang menggunakan template sebanyak delapan yang mewakili 8 arah sehingga orientasi

edge dapat ditunjukkan oleh template dengan respon magnitudo terbesar.

Non-maximal Supression

Hasil penerapan operator gradien untuk menghitung potensi gradien di tahap sebelumnya tidak

memberi informasi secara spesifik tentang lokasi dari edge yang dicari. Alternatifnya adalah

menggunakan operator zero-crossing yang digunakan oleh algoritma deteksi Marr-Hildreth.

Non-maximal supression bertujuan membuang potensi gradien di suatu piksel dari kandidat

edge jika piksel tersebut bukan merupakan maksimal lokal pada arah edge di posisi piksel

tersebut (di sinilah arah gradien diperlukan).

Hysteresis thresholding

Hasil dari langkah non-maximal suppression adalah citra yang berisi kandidat edge serta

intensitas dari kekuatan edge di posisi piksel tersebut. Langkah terakhir adalah thresholding

Page 4: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

atau klasifikasi tiap piksel apakah termasuk dalam kategori piksel edge atau tidak. Pada tahap

ini bisa saja menggunakan threshold yang berdasarkan pada satu nilai tertentu. Namun

pemilihan threshold yang hanya menggunakan satu nilai ini memiliki keterbatasan yaitu adanya

kemungkinan piksel yang hilang padahal sebetulnya meruapakan piksel edge (false-negative)

ataupun dimasukkannya piksel yang sebetulnya merupakan noise sebagai piksel edge (false-

positive). Oleh sebab itu dalam melakukan klasifikasi tidak hanya diperlukan intensitas dari

kekuatan edge sebagai pertimbangan namun juga topologi (keterhubungan antar-piksel) lokal

dari piksel tersebut.

Sederhananya hysteresis thresholding adalah klasifikasi dengan dua buah nilai High-threshold

dan Low-Threshold. suatu piksel disahkan sebagai piksel edge jika nilainya lebih besar atau

sama dengan High-Threshold (thresholding umum) atau (di sini kaidah tambahannya) jika

piksel tersebut memiliki intensitas kekuatan edge yang lebih besar dari Low-Threshold dan

terhubung dengan piksel yang nilainya lebih besar dari High-Threshold. Untuk menentukan

keterhubungan suatu piksel dengan piksel lainnya digunakan teknik yang dinamakan edge-

linking yang pada dasarnya sama dengan flood-fill

Page 5: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

Instalasi Software

Dalam pembuatan aplikasi pengolahan citra, penulis menggunakan perangkat lunak berikut:

1. Microsoft Visual C++

Microsoft Visual C++ adalah software yang digunakan sebagai compiler. Compiler adalah

perangkat lunak yang digunakan untuk mengubah source code dari suatu bahasa

pemrograman (dalam kasus ini bahasa pemrogramannya yaitu C++) menjadi native code /

bahasa mesin (file executable) agar dapat dieksekusi oleh komputer. Microsoft Visual C++

ini dibuat oleh perusahaan Microsoft.

2. OpenCV

OpenCV (Open Computer Vision) merupakan semacam library yang digunakan dalam

membuat aplikasi yang berkaitan dengan computer vision. OpenCV juga menyediakan

banyak fungsionalitas, yang tentunya dapat mempersingkat waktu dalam pembuatan aplikasi

yang lumayan rumit.

Instalasi Microsoft Visual Studio 2008

Adapun langkah-langkah instalasi MS Visual Studio 2008 sebagai berikut:

1. Masukkan DVD software MS Visual Studio 2008 kedalam DVD Room PC/laptop

Anda, kemudian akan muncul auto run CD. Jika tidak muncul maka klik file

Setup.exe atau jika anda mendownload software MS Visual Studio langsung saja klik

setup sehingga muncul seperti gmbar aberikut ini :

Page 6: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

2. Kemudian pilih menu yang paling atas yaitu "Install Visual Studio 2008", lalu klik

sehingga muncul seperti gambar berikut ini :

Page 7: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

3. Tunggulah hingga progressbar selesai loading sehingga muncul tombol "Next" seperti

gambar berikut ini :

4. Kemudian klik tombol "Next" di atas sehingga muncul seperti gambar berikut ini :

5. Karena penulis menggunakan lisensi yang disediakan oleh kantor teman saya, maka

secara otomatis product key number akan terisi. Jangan lupa pilih "I have read and

accept the license terms" lalu klik tombol "Next" lagi sehingga muncul seperti gambar

berikut ini :

Page 8: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

6. Pilih saja fitur "Default" sesuai rekomendasi sistem. Jika, tampilan Anda sudah sesuai

dengan gambar di atas. Silakan klik tombol "Install" sehingga muncul seperti gambar

berikut ini :

7. Inilah proses instalasi komponen, tunggulah beberapa menit hingga proses benar-

benar selaesai. Lalu muncul seperti gambar berikut ini :

8. Instalasi telah selesai dilakukan maka klik tombol "Finish".

Page 9: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

Instalasi OpenCV

1. Download terlebih dahulu software OpenCv 2.4.6

2. Setelah selesai download kita akan akan muncul jendela instalasi klik saja next maka

kita akan masuk ke proses ekstrak, seperti gambar dibawah ini :

3. Tunggu sampai proses ekstraksi selesai maka OpenCV sudah terinstall dan dapat

digunakan.

Page 10: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

Konfigurasi Pengaturan OpenCV Pada Visual Studio

1. Untuk melakukan konfigurasi pada OpenCv kita bisa melakukannya dengan masuk ke File

-> New -> Project

2. Setelah itu pilih Win32 Console Application

3. Beri nama Deteksi_tepi (ini dapat diganti sesuka kita)

4. Setelah itu kita setting Project Directories

Klik kanan project>>Properties >>Linker >>Input >>

release

opencv_features2d246.lib

opencv_highgui246.lib

opencv_core246.lib

opencv_imgproc246.lib

opencv_ml246.lib

opencv_objdetect246.lib

opencv_video246.lib

opencv_contrib246.lib

opencv_calib3d246.lib

Page 11: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

debug

opencv_features2d246.lib

opencv_highgui246d.lib

opencv_core246d.lib

opencv_imgproc246d.lib

opencv_ml246d.lib

opencv_objdetect246d.lib

opencv_video246d.lib

opencv_contrib246d.lib

opencv_calib3d246d.lib

Klik Tools -> Options -> Projects and Solutions -> VC++ Directories ->

Library

C:\opencv\build\x86\vc9\lib

Page 12: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

Include

C:\opencv\build\include

C:\opencv\include\opencv

Page 13: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

Logika Program:

#include "stdafx.h"

#include "cv.h"

#include "highgui.h"

Perintah include diatas merupakan prepocessor yang digunakan untuk melampirkan file

header

int high_switch_value = 0;

int highInt = 0;

int low_switch_value = 0;

int lowInt = 0;

Untuk mendeklarasikan variabel dengan tipe integer.

void switch_callback_h( int position ){

highInt = position;

}

void switch_callback_l( int position ){

lowInt = position;

}

Untuk mendeklarasikan fungsi deteksi tepi yang dimana posisinya dibagi menjadi 2 yaitu low

dan high

IplImage* img = cvLoadImage( "rame.jpg", 0 ); //nama gambar adalah rame.jpg

IplImage* img_b = cvCreateImage( cvSize(img->width+N-1,img->height+N-1), img-

>depth, img->nChannels );

IplImage* out = cvCreateImage( cvGetSize(img_b), IPL_DEPTH_8U, img_b->nChannels );

Untuk menyisipkan gambar yang akan diproses deteksi tepinya dengan nama rame.jpg

Page 14: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

CvPoint offset = cvPoint((N-1)/2,(N-1)/2);

cvCopyMakeBorder(img, img_b, offset, IPL_BORDER_REPLICATE, cvScalarAll(0));

Untuk menambahkan garis border

cvNamedWindow( name, 1 );

Untuk membuat sebuah window

int aperature_size = N;

double lowThresh = 20;

double highThresh = 40;

Pendeklasian variable ukuran aperature dimana untuk low adalah 20 dan high 40

cvCreateTrackbar( "High", name, &high_switch_value, 4, switch_callback_h );

cvCreateTrackbar( "Low", name, &low_switch_value, 4, switch_callback_l );

while( 1 ) {

switch( highInt ){

case 0:

highThresh = 200;

break;

case 1:

highThresh = 400;

break;

case 2:

highThresh = 600;

break;

case 3:

Page 15: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

highThresh = 800;

break;

case 4:

highThresh = 1000;

break;

}

switch( lowInt ){

case 0:

lowThresh = 0;

break;

case 1:

lowThresh = 100;

break;

case 2:

lowThresh = 200;

break;

case 3:

lowThresh = 400;

break;

case 4:

lowThresh = 600;

break;

}

Untuk membuat sebuah trackbars dimana terdapat 4 pilihan deteksi tepi pada settingan low

dan high

Page 16: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

cvCanny( img_b, out, lowThresh*N*N, highThresh*N*N, aperature_size );

cvShowImage(name, out);

if( cvWaitKey( 15 ) == 27 )

break;

}

Perintah diatas sebagai proses deteksi tepi menggunakan canny tranformation

cvReleaseImage( &img );

cvReleaseImage( &img_b );

cvReleaseImage( &out );

cvDestroyWindow( name );

return 0;

}

Program telah selesai dan siap melepas resourcenya

Page 17: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

Listing Program:

#include "stdafx.h"

#include "cv.h"

#include "highgui.h"

int high_switch_value = 0;

int highInt = 0;

int low_switch_value = 0;

int lowInt = 0;

void switch_callback_h( int position ){

highInt = position;

}

void switch_callback_l( int position ){

lowInt = position;

}

int _tmain(int argc, _TCHAR* argv[])

{

const char* name = "Edge Detection Window";

// ukuran kernel

int N = 7;

// Set up images

IplImage* img = cvLoadImage( "rame.jpg", 0 ); //nama gambar adalah rame.jpg

IplImage* img_b = cvCreateImage( cvSize(img->width+N-1,img->height+N-1), img->depth,

img->nChannels );

IplImage* out = cvCreateImage( cvGetSize(img_b), IPL_DEPTH_8U, img_b->nChannels );

// menambahkan garis border

Page 18: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

CvPoint offset = cvPoint((N-1)/2,(N-1)/2);

cvCopyMakeBorder(img, img_b, offset, IPL_BORDER_REPLICATE, cvScalarAll(0));

// Membuat Window

cvNamedWindow( name, 1 );

// Variable

int aperature_size = N;

double lowThresh = 20;

double highThresh = 40;

// Membuat trackbars

cvCreateTrackbar( "High", name, &high_switch_value, 4, switch_callback_h );

cvCreateTrackbar( "Low", name, &low_switch_value, 4, switch_callback_l );

while( 1 ) {

switch( highInt ){

case 0:

highThresh = 200;

break;

case 1:

highThresh = 400;

break;

case 2:

highThresh = 600;

break;

case 3:

highThresh = 800;

break;

case 4:

Page 19: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

highThresh = 1000;

break;

}

switch( lowInt ){

case 0:

lowThresh = 0;

break;

case 1:

lowThresh = 100;

break;

case 2:

lowThresh = 200;

break;

case 3:

lowThresh = 400

break;

case 4:

lowThresh = 600;

break;

}

// Proses deteksi tepi menggunakan canny tranformation

cvCanny( img_b, out, lowThresh*N*N, highThresh*N*N, aperature_size );

cvShowImage(name, out);

if( cvWaitKey( 15 ) == 27 )

break;

}

Page 20: Pendeteksi Tepi Citra Dengan Metode Canny  Menggunakan OpenCV

// Program selesai dan melepas resource

cvReleaseImage( &img );

cvReleaseImage( &img_b );

cvReleaseImage( &out )

cvDestroyWindow( name );

return 0;

}

Output:

Referensi:

http://pebbie.wordpress.com/

http://dosen.publikasistmikibbi.lppm.org

http://www.tenouk.com/

http://adhit8.blogspot.com/