无论输入如何,LSH匹配器都会不断返回相同的图像索引集

时间:2019-09-04 03:18:56

标签: opencv orb flann

我正在使用基于Flann的匹配器来搜索图像。这是我在C ++中定义匹配器的方式

cv::FlannBasedMatcher matcher(cv::makePtr<cv::flann::LshIndexParams>(50, 10, 2));

然后我使用添加功能添加大约60张图像。我已经使用ORB为每个图像提取了大约200个特征。我正在使用32位二进制描述符(ORB的默认值)。

matcher.add(databaseDescriptors);

一旦我添加了每个图像,我就会训练匹配器。

matcher.train();

这时我开始搜索描述符匹配项。

matcher.knnMatch(queryDescriptors, matches, 2);

我在queryDescriptors矩阵中有400个传入的描述符。然后,我使用Lowe的比率来计算距离:

   if (matches[i].size() >= 2 && matches[i][0].distance < 0.7f * matches[i][1].distance) {
        validMatches.push_back(matches[i][1]);
    }

这会产生意外的结果。我发现无论输入描述符是什么,我总是从imgIdx对象中获得相同的cv::DMatch值。为什么会这样呢?不管输入什么,为什么flann总是返回相同的imgIdx

使用LSH的flann是否无法搜索(60 * 200)= 12,000个描述符?我训练匹配器的方式有问题吗?

0 个答案:

没有答案