knnMatch 如果改变查询和训练图像的位置会给出不同的结果

问题描述 投票:0回答:0

我使用 opencv C++ 的 knnMatch 来匹配 2 个图像,称为 img1 和 img2。我以为img1和img2匹配的结果和img2和img1匹配的结果一定是一样的,但是我的代码显示它们是不同的

在我的测试中,img1 比 img2 大。

在结果中,两种情况的匹配数相同,但第一个程序中的好匹配数比第二个程序多(代码如下所示)。

请帮我解释得到的结果

*Program1. img1 to img2*
    Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::BRUTEFORCE);
    matcher->knnMatch(descriptors_img1, descriptors_img2, knn_matches, 2); 

    printf("matches: %i\n", knn_matches.size());
    
    for (size_t i = 0; i < knn_matches.size(); i++)
    {
        if (knn_matches[i][0].distance < ratio_thresh * knn_matches[i][1].distance)
        {
            good_matches.push_back(knn_matches[i][0]);
        }
    }

    printf("good_matches: %i\n", good_matches.size());

Program2. img2 to img1
     Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::BRUTEFORCE);
    matcher->knnMatch(descriptors_img2, descriptors_img1, knn_matches, 2); 

    printf("matches: %i\n", knn_matches.size());
    
    for (size_t i = 0; i < knn_matches.size(); i++)
    {
        if (knn_matches[i][0].distance < ratio_thresh * knn_matches[i][1].distance)
        {
            good_matches.push_back(knn_matches[i][0]);
        }
    }

    printf("good_matches: %i\n", good_matches.size());
image size matching knn brute-force
© www.soinside.com 2019 - 2024. All rights reserved.