gpt4 book ai didi

c++ - FlannBasedMatcher 返回不同的结果

转载 作者:太空狗 更新时间:2023-10-29 20:59:56 24 4
gpt4 key购买 nike

在 OpenCV 中使用 FlannBasedMatcher,调用具有相同参数的匹配器时我得到了不同的结果。谁能建议我做错了什么?

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

每次循环输出的结果应该是相同的,但事实并非如此。

    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);
}
}

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

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

最佳答案

FLANN 在随机 kd-tree 算法和分层 k-means 树算法之间进行选择,以进行最优最近邻近似。算法的选择基于几个因素,例如数据集结构和搜索精度。每个算法还有一组影响搜索性能的参数。

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

关于c++ - FlannBasedMatcher 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23405686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com