Minggu, 12 Januari 2014

Deteksi Tepi Metode Sobel Menggunakan C++

Dalam proses segmentasi gambar citra dapat dilakukan menggunakan deteksi tepi salah satunya menggunakan metode sobel. Metode sobel merupakan pengembangan metode deteksi tepi Robert dengan menggunakan filter HPF (High Pass Filter) yang diberi 1 angka 0 penyangga. kelebihan dari metode sobel adalah kemampuan untuk mengurangi noise sebelum melakukan perhitangan deteksi tepi.

Metode sobel menggunakan kernel dengan ukuran 3x3 piksel untuk perhitungan gradientnya. 


Metode sobel melakukan deteksi tepi dengan memperhatikan tepi vertikal dan horisontal, berikut ini susunan piksel (x,y) metode sobel.


Kemudian untuk tahap akhir akan dilakukan proses perhitungan besaran gradient menggunakan rumus dibawah ini. 


Berikut ini adalah kode program implemtasi metode sobel menggunakan c++ dikombinasikan dengan OpenCV.
 
#include<iostream>
#include<cmath>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;
 //hitung gradient x
int xGradient(Mat image, int x, int y){
    return image.at<uchar>(y-1, x-1) +
                2*image.at<uchar>(y, x-1) +
                image.at<uchar>(y+1, x-1) -
                image.at<uchar>(y-1, x+1) -
                2*image.at<uchar>(y, x+1) -
                image.at<uchar>(y+1, x+1);
}
//hitung gradient y
int yGradient(Mat image, int x, int y){
    return image.at<uchar>(y-1, x-1) +
                2*image.at<uchar>(y-1, x) +
                image.at<uchar>(y-1, x+1) -
                image.at<uchar>(y+1, x-1) -
                2*image.at<uchar>(y+1, x) -
                image.at<uchar>(y+1, x+1);
}

int main(){
      Mat src, dst;
      int gx, gy, sum;

      // Load gambar
      src = imread("moko/3.5.jpg", CV_LOAD_IMAGE_GRAYSCALE);
      dst = src.clone();
      if( !src.data )
      { return -1; }

        for(int y = 0; y < src.rows; y++)
            for(int x = 0; x < src.cols; x++)
                dst.at<uchar>(y,x) = 0.0;

        for(int y = 1; y < src.rows - 1; y++){
            for(int x = 1; x < src.cols - 1; x++){
                gx = xGradient(src, x, y);
                gy = yGradient(src, x, y);
                sum = sqrt(gx*gx + gy*gy);
                sum = sum > 255 ? 255:sum;
                sum = sum < 0 ? 0 : sum;
                dst.at<uchar>(y,x) = sum;
            }
        }

        namedWindow("final");
        imshow("final", dst);

        namedWindow("initial");
        imshow("initial", src);

      waitKey();

    return 0;
}

Gambar asli moko (benda budaya kepulauan Alor)


Gambar hasil inisialisasi


Gambar hasil perhitungan metode Sobel

Categories:

0 komentar:

Posting Komentar