Извлечение функции серфинга

Цель: сопоставление больших двоичных объектов с помощью библиотеки Surf descriptors и opencv 2.4.9.

Алгоритм: на основе следующей ссылки: шаги


#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; }

Результаты обнаружения ключевых точек. На следующем изображении количество ключевых точек очень велико, и не многие из них важны. Как я могу выбрать лучший подмножество ключевых точек, которые лучше всего описывают большой двоичный объект. Есть ли способ лучше, чем Surf? Эти капли являются бинарными введите здесь описание изображения


person Hani Goc    schedule 02.12.2014    source источник


Ответы (1)


Чем выше minHessian, тем меньше ключевых точек.

По изображениям трудно сказать, какие два входных изображения вы пытаетесь сопоставить, и какова ваша цель (сопоставление «Vo» «Vos..» с «Votre...» будет успешным? или провал?

person Rosa Gronchi    schedule 03.12.2014
comment
на данный момент я не могу махать этими изображениями. Я пытаюсь понять, как выбрать лучший подмножество ключевых точек. Как вы думаете, меньшее количество ключевых точек может дать такие же результаты? Я думаю, что я должен проверить это. ТЮ - person Hani Goc; 03.12.2014
comment
Это зависит от изображений, но более слабые ключевые точки обычно менее надежны, а меньшее количество ключевых точек сделает выбор модели более надежным/надежным. Другими эвристиками для уменьшения количества ключевых точек может быть разделение изображения на плитки и выбор до N ключевых точек на плитку (и, возможно, оставшихся K наиболее сильных ключевых точек из всего изображения). Вы также можете отбросить почти идентичные ключевые точки, поскольку они обычно представляют собой текстурированные области и их трудно сопоставить. - person Rosa Gronchi; 04.12.2014