opencv - OpenCV中的描述符匹配器训练器中使用的算法

标签 opencv computer-vision

下面的代码段显示了训练对象识别中使用的描述符匹配器的基础。

detector = cv.FeatureDetector('ORB');
extractor = cv.DescriptorExtractor('ORB');
matcher = cv.DescriptorMatcher('BruteForce-Hamming')

for(i=1 to N)
{
   detector(i) = detector.detect(image(i));
   descriptor(i) = extractor.compute(image(i),detector(i));
   matcher.add(descriptor(i));

}
matcher.train();

该代码在语法上不正确,但是我想知道train()matcher函数在这里如何工作。

最佳答案

matcher.train();因为Bruteforce匹配器的实现是无效的,没有索引或未构建KD树,所以匹配根据识别为描述符的两个关键点之间的汉明距离进行。如果您使用基于FLANN的匹配器,则方法matcher.train();构建索引,这些索引用于匹配关键点。如果要为应用程序使用基于FLANN的匹配器,则以下是将基于FLANN的匹配与二进制描述符(ORB,FREAK,BRISK)一起使用的语法。

  // paramerters for LSH index
 //LshIndexParams(int table_number, int key_size, int multi_probe_level);    
FlannBasedMatcher matcher(new flann::LshIndexParams(20,10,2));

如果您的训练集中的描述符数量少于(即小于100000),则建议使用bruteforce匹配器,因为如果您使用基于FLANN的匹配,则大多数时间将浪费在构建和检索索引上,因此应用程序性能将下降坠落

关于opencv - OpenCV中的描述符匹配器训练器中使用的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21371213/

相关文章:

objective-c - 将字典从 Objective C 文件返回到 Swift?

c++ - OpenCV imread 问题

video - 视频动态渲染有多难?

computer-vision - 高 mAP@50,但精度和召回率低。这是什么意思,什么指标应该更重要?

opencv - 相机校准和重新映射是否会产生针孔相机模型?

java - 使用 OpenCv 和 android 进行图像识别

iphone - 跟踪 iphone 相机运动

python-3.x - 如何定义 BGR 颜色范围?将颜色代码映射到颜色名称

c++ - 将检测到的文本设置为比图像暗 - ccv

python - 如何计算图像中的错误?