Цель: Соответствующие капли с использованием Surf descriptors
и opencv 2.4.9
библиотека.Surf feature Extraction
Алгоритм: основан на следующую ссылке: 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; }
Результатов для обнаружения ключевых точек: В следующем изображении количество ключевых точек очень высоко, и не многие важный. Как я могу выбрать лучший поднабор ключевых точек, которые лучше всего описывают blob. Есть ли лучший способ, кроме Surf? Эти капли являются двоичным
на данный момент я не обрабатываю эти изображения. Я пытаюсь посмотреть, как я могу выбрать лучший поднабор ключевых точек. Чем меньше ключевых точек, как вы думаете, могут давать одинаковые результаты ? Я думаю, что я должен проверить это. TY –
Это зависит от изображений, но более слабые ключевые точки обычно менее надежны, и меньшее количество ключевых точек сделает выбор модели более надежным/надежным. Другие эвристики для снижения количества ключевых точек могут делить изображение на плитки и выбор до N ключевых точек на каждый фрагмент (и, возможно, остальные K самых сильных ключевых точек из всего изображения). Вы также можете отбросить почти идентичные ключевые точки, поскольку они обычно представляют собой текстурированные области и их трудно сопоставить. –