Real Time Canny Edge Detector dengan JavaCV

Sekilas Canny Edge Detector

Edge detection (deteksi tepi) merupakan salah satu proses penting di computer vision, yaitu proses menghilangkan noise, useless data, dan frekuensi gambar. Canny Edge Detector merupakan salah satu metode deteksi tepi gambar yang dipublikasikan oleh John Canny pada jurnal yang berjudul A Computational Approach of Edge Detection pada tahun 1986.

Metode ini dikenal dan terbukti memiliki hasil deteksi tepi terbaik [2][3] dibanding metode deteksi tepi lain lain seperti Laplace Gaussian, Robert, Prewitt, dan Sobel.

Untuk melakukan proses deteksi tepi Canny Edge Detector melakukan 6 tahap pemrosesan, yaitu:

  1. Smoothing and Filter out any noise with Gaussian Filter
  2. Find the edge strength
  3. Finding the edge direction
  4. Relate the edge direction
  5. Non maximum surpression
  6. Eliminate streaking

Implementasi

Pada JavaCV fungsi Canny Edge Detector dirumuskan dengan


cvCanny(IplImage grayImage, IplImage cannyResult, int threshold1, int threshold2, int aperture_size);

Real time Canny Edge Detector

Untuk mendapat hasil yang maksimal sebelum melakukan proses deteksi tepi diperlukan proses preprocessing tambahan, langkahnya:

  1. Konversi ke format Grayscale, cvCvtColor()
  2. Smoothing, cvSmooth()
  3. Thresholding, cvThreshold()
  4. baru kemudian Canny Edge, cvCanny()

import java.awt.event.*;
import com.googlecode.javacv.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;

public class RealTimeEdgeDetection{
private static volatile boolean isRunning = true;
public static void main(String[] args){
System.out.println("Starting OpenCV...");
try {
//Inisialisasi Canvas untuk menampilkan gambar original
CanvasFrame canvas = new CanvasFrame("Camera Capture");
canvas.addWindowListener(
new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e){
isRunning = false;
}
}
);

//Inisialisasi Canvas untuk menampilkan gambar yang telah diproses canny
CanvasFrame canvas2 = new CanvasFrame("Canny Edge Detection");
canvas2.addWindowListener(
new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e){
isRunning = false;
}
}
);

System.out.println("Starting frame grabber...");
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(CV_CAP_ANY); //koneksi dengan webcam
grabber.start(); //mulai mengambil gambar
IplImage frame;
while(isRunning) {
if ((frame = grabber.grab()) == null){
break;
}
else{
//inisialisasi gambar
IplImage grayImage = cvCreateImage(cvGetSize(frame), frame.depth(), 1);
IplImage canny = cvCreateImage(cvGetSize(frame), frame.depth(), 1);

cvCvtColor(frame, grayImage, CV_BGR2GRAY); //grayscaling proses gambar original
cvSmooth(grayImage, grayImage, CV_MEDIAN, 13); //smoothing
cvThreshold( grayImage, grayImage, 100, 255, CV_THRESH_BINARY ); //thresholding
cvCanny(grayImage, canny, 150, 150, 3); //Proses Canny Edge Detector

//menampilkan gambar ke Jframe
canvas.showImage(frame);
canvas2.showImage(canny);
}
}
grabber.stop(); //stop ambil gambar
canvas.dispose(); //dekonstruksi canvas
canvas2.dispose(); //dekonstruksi canvas
}
catch(Exception e){
System.out.println(e);
}
}
}

Hasil

Canny edge detection threshold=100-150 aperture=3
(klik untuk perbesar gambar)

Canny edge detection threshold=100-150 aperture=3 (preprocessing)
(klik untuk perbesar gambar)

Sumber

[1] Canny, John. 1986. A Computational Approach of Edge Detection

[2] Juneja Mamta dan Parvinder Singh. 2009. Performance Evaluation of Edge Detection Techniques for Images in Spatial Domain

[3] Ehsan Nadernejad. 2008. Edge Detection Techniques: Evaluations and Comparisons

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s