2

以下に示すコードを使用して、一致する機能を見つけることができます。2 つの画像の類似度を計算したいと考えています。私はOpenCVが初めてです。どんな種類の助けも高く評価されます。

    FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
    DescriptorExtractor extractor = DescriptorExtractor
            .create(DescriptorExtractor.ORB);

    detector.detect(image1, keypoints1);
    detector.detect(image2, keypoints2);

    extractor.compute(image1, keypoints1, descriptors1);
    extractor.compute(image2, keypoints2, descriptors2);

    DescriptorMatcher matcher = DescriptorMatcher
            .create(DescriptorMatcher.BRUTEFORCE_HAMMING);

    MatOfDMatch matches = new MatOfDMatch();
    matcher.match(descriptors1, descriptors2, matches);

同じ目的で使用できる他のライブラリはありますか?

4

2 に答える 2

2

特徴点を使用してパーセンテージ自体を計算できるとは思いません。ただし、「類似度」を計算することはできます。

まず、何らかの方法で悪い一致を除外する必要があります (ホモグラフィ変換を使用して、一致を幾何学的に検証します)。次に、この「類似度」を計算する独自の方法を確立できます。

たとえば、マッチ間のハミング距離を単純に合計できます。また、特徴点の位置を使用することもできます。画像A上の特徴点Aiが画像B上の対応Biを持っているとします。Aiの座標は(Xa, Ya)で、Biの座標は(Xb, Yb)です。画像を類似させるには、(Xa, Ya)を(Xb, Yb) にできるだけ近づける必要があります。スコアは次のようになります。

Score = HammingDist / DistanceBetween(Point(Xa, Ya), Point(Xb, Yb))

HammingDistそしてもちろん、 にもっと重みを付けたいと思うかもしれませんDistanceBetween。実験する必要があります。

于 2013-05-03T05:50:45.847 に答える