4

ORB 特徴検出器と抽出器を使用して、グレースケール画像のリストから特徴を取得しています。問題は、同じ画像を複数回検出/抽出しようとすると、同じ画像から異なる機能が得られることです。そのため、後で検出に使用することはできません。

コード:

bmp=BitmapFactory.decodeResource(getResources(),R.drawable.t1);
Utils.bitmapToMat(bmp, mat);
FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
detector.detect(mat, keypoints);
DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB);
extractor.compute(mat, keypoints, features);

多分誰かがそれについての洞察を持っていますか?

4

1 に答える 1

2

これは当てはまりません..一貫したパフォーマンスが得られるはずです。ただし、2 つの画像で Orb Feature Detector と Orb Descriptor Extractor を使用するコードを共有しています。それらを一致させるには、任意のマッチャーを使用できます。これがお役に立てば幸いです...

#include "iostream"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#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;
    imageA = imread("C:\\lena.jpg",0);
    imageB = imread("C:\\lena1.bmp",0);

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

    std::vector<DMatch> matches;

    OrbFeatureDetector detector;

    OrbDescriptorExtractor extractor;

    BruteForceMatcher<Hamming> matcher;

    detector.detect(imageA,keypointsA);
    detector.detect(imageB,keypointsB);

    extractor.compute(imageA,keypointsA,descriptorsA);
    extractor.compute(imageB,keypointsB,descriptorsB);

    return 0;
 }
于 2013-01-14T07:39:20.623 に答える