首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlannBasedMatcher返回不同结果

FlannBasedMatcher返回不同结果
EN

Stack Overflow用户
提问于 2014-05-01 10:09:08
回答 1查看 1.8K关注 0票数 4

使用FlannBasedMatcher在OpenCV中,我得到了不同的结果,用相同的参数调用匹配器。有人能告诉我我做错了什么吗?

下面的代码展示了一个我遇到的问题的最小例子--它是我如何使用FlannBasedMatcher的简单代表--这不是真正的代码:)

每次循环的结果输出应该是相同的,但它们不是。

代码语言:javascript
复制
    int const k = std::min(query_descriptors.rows,
                      std::min(train_descriptors.rows, 2));

    cv::Mat query_descriptors_original = query_descriptors.clone();
    cv::Mat train_descriptors_original = train_descriptors.clone();
    for (int loop=0; loop<2; ++loop)
    {
        cv::FlannBasedMatcher matcher;
        matcher.add(std::vector<cv::Mat>(1, train_descriptors));

        std::vector<matches_t> knnMatches;
        matcher.knnMatch(query_descriptors,  knnMatches, k);

        matches.clear();
        for (auto const &knn : knnMatches)
        {
            matches.push_back(knn[0]);
            std::cout << knn[0].queryIdx << ',' << knn[0].trainIdx << '\n';
        }
        std::cout << '\n';

        assert(cv::countNonZero(query_descriptors != query_descriptors_original) == 0);
        assert(cv::countNonZero(train_descriptors != train_descriptors_original) == 0);
    }
}

输出,虽然我不认为会有帮助(?),是

代码语言:javascript
复制
0,27
1,170
2,100
3,100
4,123
5,100
6,191
7,71
8,191
9,67
10,27
11,45
12,302
13,190
14,248
15,158
16,262
17,248
18,211
19,67
20,248
21,275

0,2
1,200
2,224
3,302
4,130
5,302
6,191
7,195
8,191
9,195
10,200
11,45
12,248
13,277
14,248
15,255
16,262
17,248
18,182
19,14
20,54
21,284
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-01 11:29:05

FLANN选择随机kd-树算法和层次k-均值树算法进行最优近邻逼近。算法的选择基于数据集结构和搜索精度等因素。每种算法都有一组影响搜索性能的参数。

这意味着它使用一个随机函数来匹配,这就是为什么每次得到不同的结果;)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23405686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档