3

基本上我有:

BruteForceMatcher<L2<float>>().knnMatch(descriptor1,descriptor2,matches,2);

为了只获得好的匹配,我解析所有“匹配”向量并检查距离,如下所示:

if( (matches[i][0].distance / matches[i][1].distance) < ratio ){
  //> Good match!
}

但是什么matches[i][0].distance意思?和之间的距离matches[i][0]

我的假设

对于我的猜测,计算第一个匹配与它的 NN 之间的欧几里距离,并用阈值过滤它对我来说听起来更合乎逻辑,例如:

//> I calculate the distance between 2 nearest neighborhood and filter it based on thresold
foreach( matches : i) {
 if ( euclianDistance( matches[i][0] , matches[i][1] ) < threshold ) {
   //> good match
 }
}
4

1 回答 1

4

描述符- 是 N 维空间的一个点。

match - 是一对描述符 - 一个来自第一组,一个来自第二组(也称为训练集和查询集)。

距离- 是结构L2指向的 2 个描述符的度量match。(您将指标类型指定为 的模板参数BruteForceMatcher)。

match[i][0].distance = L2(descriptor1.row(match[i][0].trainIdx),
                          descriptor2.row(match[i][0].queryIdx))

因此,从查询集中为训练knnMatch集中的每个描述符返回两个最接近的描述符。接下来,您将过滤掉两个找到的描述符彼此接近的情况。

于 2012-06-24T10:00:22.487 回答