Anda di halaman 1dari 20

UNIVERSITAS GUNADARMA

FAKULTAS TEKNOLOGI INDUSTRI

UNIVERSITAS GUNADARMA FAKULTAS TEKNOLOGI INDUSTRI Pendeteksi Tepi Citra Dengan Metode Canny Menggunakan OpenCV Nama : -

Pendeteksi Tepi Citra Dengan Metode Canny

Menggunakan OpenCV

Nama

: - Abimanyu Rio Y.

Kelas

- Fitra Reza : 4IA03

Fakultas

: Teknologi Industri

Jurusan

: Teknik Informatika

Dosen

: Eri Prasetyo Wibowo

2013

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

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.

memiliki landasan ide yang berbeda dalam menghitung gradien. Pada langkah menghitung potensi gradien citra ada dua

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

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

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 :

atau jika anda mendownload software MS Visual Studio langsung saja klik setup sehingga muncul seperti gmbar

2.

Kemudian pilih menu yang paling atas yaitu "Install Visual Studio 2008", lalu klik sehingga muncul seperti gambar berikut ini :

menu yang paling atas yaitu "Install Visual Studio 2008", lalu klik sehingga muncul seperti gambar berikut

3.

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

gambar berikut ini :

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

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

di atas sehingga muncul seperti gambar berikut ini : 5. Karena penulis menggunakan lisensi yang disediakan

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 :

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

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 :

sehingga muncul seperti gambar berikut ini : 7. Inilah proses instalasi komponen, tunggulah beberapa

7. Inilah proses instalasi komponen, tunggulah beberapa menit hingga proses benar- benar selaesai. Lalu muncul seperti gambar berikut ini :

benar selaesai. Lalu muncul seperti gambar berikut ini : 8. Instalasi telah selesai dilakukan maka klik

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

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 :

akan masuk ke proses ekstrak, seperti gambar dibawah ini : 3. Tunggu sampai proses ekstraksi selesai
akan masuk ke proses ekstrak, seperti gambar dibawah ini : 3. Tunggu sampai proses ekstraksi selesai

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

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)

3. Beri nama Deteksi_tepi (ini dapat diganti sesuka kita) 4. Setelah itu kita setting Project Directories

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

opencv_ml246.lib opencv_objdetect246.lib opencv_video246.lib opencv_contrib246.lib opencv_calib3d246.lib

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

opencv_contrib246d.lib opencv_calib3d246d.lib Klik Tools -> Options -> Projects and Solutions

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

Library

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

Tools -> Options -> Projects and Solutions -> VC++ Directories -> Library C:\opencv\build\x86\vc9\lib

Include

C:\opencv\build\include

C:\opencv\include\opencv

Include C:\opencv\build\include C:\opencv\include\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

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;

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

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

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

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;

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;

}

// Program selesai dan melepas resource

cvReleaseImage( &img );

cvReleaseImage( &img_b );

cvReleaseImage( &out )

cvDestroyWindow( name );

return 0;

}

Output:

&out ) cvDestroyWindow( name ); return 0; } Output: Referensi: http://pebbie.wordpress.com/

Referensi:

http://pebbie.wordpress.com/ http://dosen.publikasistmikibbi.lppm.org http://www.tenouk.com/ http://adhit8.blogspot.com/