3
私はSURFに関するプロジェクトを行っていますが、これまでSURF機能を正しく実装しており、正しく機能評価を行っています。しかし、DESCRIPTORの評価方法はわかりません...私はC++/opencv svnを使っています。SURFのディスクリプタ評価opencv
Hereあなたは私のコード
...それはEVALUATORを使う方法を示していますが、私は私のコードでそれを使用することができませんでした(
をOpenCVのSVNからサンプルコードを見つけることができます。#include "cv.h" // include standard OpenCV headers, same as before
#include "highgui.h"
#include "ml.h"
#include <stdio.h>
#include <iostream>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <vector>
//#include "precomp.hpp"
using namespace cv; // all the new API is put into "cv" namespace. Export its content
using namespace std;
using std::cout;
using std::cerr;
using std::endl;
using std::vector;
// enable/disable use of mixed API in the code below.
#define DEMO_MIXED_API_USE 1
void warpPerspectiveRand(const Mat& src, Mat& dst, Mat& H, RNG& rng)
{
H.create(3, 3, CV_32FC1);
H.at<float>(0,0) = rng.uniform(0.8f, 1.2f);
H.at<float>(0,1) = rng.uniform(-0.1f, 0.1f);
H.at<float>(0,2) = rng.uniform(-0.1f, 0.1f)*src.cols;
H.at<float>(1,0) = rng.uniform(-0.1f, 0.1f);
H.at<float>(1,1) = rng.uniform(0.8f, 1.2f);
H.at<float>(1,2) = rng.uniform(-0.1f, 0.1f)*src.rows;
H.at<float>(2,0) = rng.uniform(-1e-4f, 1e-4f);
H.at<float>(2,1) = rng.uniform(-1e-4f, 1e-4f);
H.at<float>(2,2) = rng.uniform(0.8f, 1.2f);
warpPerspective(src, dst, H, src.size());
}
double match(const vector<KeyPoint>& /*kpts_train*/, const vector<KeyPoint>& /*kpts_query*/, DescriptorMatcher& matcher,
const Mat& train, const Mat& query, vector<DMatch>& matches)
{
double t = (double)getTickCount();
matcher.match(query, train, matches); //Using features2d
return ((double)getTickCount() - t)/getTickFrequency();
}
void simpleMatching(Ptr<DescriptorMatcher>& descriptorMatcher,
const Mat& descriptors1, const Mat& descriptors2,
vector<DMatch>& matches12);
int main(int argc, char** argv)
{
string im1_name, im2_name;
im1_name = "lena.jpg";
im2_name = "lena.jpg";
Mat img1 = imread(im1_name, 1);
Mat img2 = imread(im2_name, 1);
RNG rng = theRNG();
Mat H12;
warpPerspectiveRand(img1, img2, H12, rng);
SurfFeatureDetector detector(2000);
vector<KeyPoint> keypoints1, keypoints2;
detector.detect(img1, keypoints1);
detector.detect(img2, keypoints2);
float repeatability;
int correspCount;
evaluateFeatureDetector(img1, img2, H12, &keypoints1, &keypoints2, repeatability, correspCount);
cout << "repeatability = " << repeatability << endl;
cout << "correspCount = " << correspCount << endl;
// computing descriptors
SurfDescriptorExtractor extractor;
Mat descriptors1, descriptors2;
extractor.compute(img1, keypoints1, descriptors1);
extractor.compute(img2, keypoints2, descriptors2);
return 0;
}
だから私の質問です:SURFの記述子を評価する方法(これを行うにはどのように)私は多くの方法で試してみましたが、私はそれを行うことができませんでした。..
が記述マットを使用して、あなたにそんなに
私はそれらの機能を試してみましたが、成功した私と一緒に働いていた、私の懸念は、このようなものです:私は、関数のPtr GDM =新しいVectorDescriptorMatcherを(実装していた場合抽出器、整合器); extractorとmatcherの両方を除いて、valuateGenericDescriptorMatcher(img1、img2、H12、keypoints1、keypoints2、0、0、curve、gdm)という次の関数を実装するために、これらの2つのパラメータが必要です。だから私はここで間違っている何か考えている –
Mario
いいえ。私はあなたがこの質問を閉じて、最小限の例で新しい質問をすることをお勧めします。 – Unapiedra