17

OpenCV2.4.2バージョンでリリースされたばかりのFreak記述子を使用するアプリケーションを開発しています。

ドキュメントには、次の2 つの関数のみが表示されます。

  • クラス コンストラクター

  • ややこしい方法selectPairs()

独自の検出器を使用してから、検出されたキーポイントを渡す FREAK 記述子を呼び出したいのですが、クラスがどのように機能するかが明確にわかりません。

質問:

厳密に使用する必要がありますselectPairs()か? 電話するだけでいいのFREAK.compute()?どちらがselectPairsを使用しているのかよくわかりません。

4

2 に答える 2

18

論文をめくってパラグラフ 4.2 を見たところ、可能なすべてのペアを取得するのは負担が大きすぎるため、記述子で評価する受容野のペアを選択する方法を著者が設定していることがわかりました。selectPairs() 関数を使用すると、このペアのセットを再計算できます。

その後、元の記事のこの段落を正確に指しているドキュメントを読んでください。また、ドキュメント内のいくつかのコメントは、FREAK ディスクリプタですぐに使用できる、オフラインで学習されたペアのセットが既に利用可能であることを示しています。したがって、少なくとも最初は、事前に計算されたペアを使用して、メソッドから取得したキーポイントのリストを引数として FREAK.compute に渡すことができると思います。

結果が期待外れである場合は、元の論文 (段落 2.1) で使用されているキーポイント選択方法を試してから、最終的に独自のペアのセットを学習することができます。

于 2012-09-20T09:35:04.043 に答える
16
#include "iostream"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "cv.h"
#include "highgui.h"
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/nonfree/features2d.hpp>
#include <opencv2/flann/flann.hpp>
#include <opencv2/legacy/legacy.hpp>
#include <vector>


using namespace cv;
using namespace std;

int main()
{
    Mat image1,image2;
    image1 = imread("C:\\lena.jpg",0);
    image2 = imread("C:\\lena1.bmp",0);

    vector<KeyPoint> keypointsA,keypointsB;
    Mat descriptorsA,descriptorsB;

    std::vector<DMatch> matches;

    OrbFeatureDetector detector(400);

    FREAK extractor;

    BruteForceMatcher<Hamming> matcher;

    detector.detect(image1,keypointsA);
    detector.detect(image2,keypointsB);

    extractor.compute(image1,keypointsA,descriptorsA);
    extractor.compute(image2,keypointsB,descriptorsB);

    matcher.match(descriptorsA, descriptorsB, matches);

    int nofmatches = 30;
    nth_element(matches.begin(),matches.begin()+nofmatches,matches.end());
    matches.erase(matches.begin()+nofmatches+1,matches.end());

    Mat imgMatch;
    drawMatches(image1, keypointsA, image2, keypointsB, matches, imgMatch);

    imshow("matches", imgMatch);
    waitKey(0);

    return 0;
}

これは、2 つの画像のポイントを一致させる単純なアプリケーションです...キーポイントを検出するために Orb を使用し、それらのキーポイントの記述子として FREAK を使用しました...次に、2 つの画像の対応するポイントを検出するために brutforcematching を使用しました...上位 30 ポイントを取得しましたベストマッチ...これがあなたの助けになることを願っています...

于 2012-09-19T17:10:54.557 に答える