简体   繁体   English

冲浪特征提取

[英]Surf feature Extraction

Objective: match blobs by using Surf descriptors and opencv 2.4.9 library. 目标:通过使用Surf descriptorsopencv 2.4.9库来匹配​​blob。

Algorithm: based on the following link: Steps 算法:基于以下链接: 步骤


#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"

using namespace cv;

void readme();

/** @function main */
int main( int argc, char** argv )
{
  if( argc != 3 )
  { readme(); return -1; }

  Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
  Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );

  if( !img_1.data || !img_2.data )
  { std::cout<< " --(!) Error reading images " << std::endl; return -1; }

  //-- Step 1: Detect the keypoints using SURF Detector
  int minHessian = 400;

  SurfFeatureDetector detector( minHessian );

  std::vector<KeyPoint> keypoints_1, keypoints_2;

  detector.detect( img_1, keypoints_1 );
  detector.detect( img_2, keypoints_2 );

  //-- Draw keypoints
  Mat img_keypoints_1; Mat img_keypoints_2;

  drawKeypoints( img_1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
  drawKeypoints( img_2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT );

  //-- Show detected (drawn) keypoints
  imshow("Keypoints 1", img_keypoints_1 );
  imshow("Keypoints 2", img_keypoints_2 );

  waitKey(0);

  return 0;
  }

  /** @function readme */
  void readme()
  { std::cout << " Usage: ./SURF_detector <img1> <img2>" << std::endl; }

Results for keypoints detection: In the following image the number of keypoints is very high and not many are important. 关键点检测的结果:在下图中,关键点的数量非常多,但并不重要。 How can I select the best sub-set of keypoints that best describe a blob. 如何选择最能描述斑点的最佳关键点子集。 Is there a better way other than Surf? 除了冲浪,还有其他更好的方法吗? These Blobs are binary 这些Blob是二进制的 在此处输入图片说明

A higher minHessian will yield fewer KeyPoints. 较高的minHessian将产生较少的KeyPoint。

It is hard to tell from the images what are the two input images you are trying to match and what exactly is your goal (will matching the "Vo" of "Vos.." with that of "Votre..." be a success or a failure? 很难从图像中分辨出您要匹配的两个输入图像是什么,以及您的目标到底是什么(将“ Vos ..”的“ Vo”与“ Votre ...”的“ Vo”匹配将是成功的)还是失败?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM