Feature Detection

SIFT


Sudah lama sekali sejak terakhir saya membuat konten di blog ini yah? kembali lagi bersama saya Giusti Arya P. Kali ini saya akan membahas tentang Featur Detection dengan menggunakan metode SIFT (Scale Invariant Feature Transform)   Apa saja yang dibutuhkan untuk melakukan projek ini??
Yang dibutuhkan untuk melakukan projek ini adalah:
  1.     Laptop atau Komputer
  2.     Visual Studio 2013
  3.     Library OpenCV3.1
  4.     CMake 3.12V
Hasil gambar untuk fitur detection sift

Pastikan kita telah mengintall Library OpenCV3.1 dengan CMake. 
1. Langkah pertama adalah membuka Visual Studio 2013 lalu buat New Project beri nama dan klik finish.

2. Masukkan Code dibawah ini pada kolom yang tersedia ^^
3. Berikut sebagai Header
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
#include "opencv2/highgui.hpp"
#include <opencv2\opencv.hpp>

using namespace cv;
using namespace cv::xfeatures2d;

4. Masukkan fungsi fungsi berikut di dalam int main(){...}
5. Masukkan fungsi untuk load 2 image dan resize
Mat image1 = imread("1.jpg", CV_LOAD_IMAGE_COLOR);
Mat image2 = imread("7.jpg", CV_LOAD_IMAGE_COLOR);
resize(image1, image1, Size(330, 600));
resize(image2, image2, Size(400, 700));
*untuk langkah ke 5 pastikan terlebih dahulu ada gambar untuk diload didalam folder debug 
                               
                                                   1.jpg                                                7.jpg

6. Fungsi keypoint pada tiap
if (!image1.data || !image2.data){
                return -1;}
        int minHessian = 25;
        Ptr<SIFT> detector = SIFT::create(minHessian);

        std::vector<KeyPoint> kpoint_1, kpoint_2;

        detector->detect(image1, kpoint_1);
        detector->detect(image2, kpoint_2);

7. Masukkan representasi vector  antar gambar
Ptr<SIFT> extractor = SIFT::create();
        Mat descriptors_1, descriptors_2;

        extractor->compute(image1, kpoint_1, descriptors_1);
        extractor->compute(image2, kpoint_2, descriptors_2);

BFMatcher matcher(NORM_L2);
        std::vector< DMatch > matches;
        matcher.match(descriptors_1, descriptors_2, matches);

8. Masukkan garis dan menampilkan window pergambungan kedua gambar
Mat img_matches;
        drawMatches(image1, kpoint_1, image2, kpoint_2, matches, img_matches);

        imshow("Matches", img_matches);
9. Build program diatas lalu run

Cara kerja dari SIFT Detector sebagai berikut:
      SIFT Detector mendeteksi titik titik berdasarkan kekontrasan warna dan intensitas warna pada gambar yang akan menentukan letak Keypoints. Tiap titik dicari vectornya menggunakan descriptor. Setelah ditemukan vectornya lalu dibandingkan kedua gambar tersebut dengan menggunakan fungsi BFMatcher, setelah dibandingkan Keypoint antar kedua gambar lalu dibuat garis yang menyambungkan Keypoints yang bernilai sama dengan fungsi drawMatches.
        Key Localization dilakukan oleh dectector digunakan untuk mencaro KeyPoint dan letak dari KeyPoint. Descriptor berfungsi sebagai pencari nilai vector dari KeyPoint. KeyPoint match adalah mencocokan vector dari kedua gambar untuk menunjukan objek pada gambar 1 yang ada pada gambar.

Related Posts: