Feature2DToolbox.VoteForUniqueness如何工作?

围春

有人可以向我解释Feature2DToolbox.VoteForUniqueness如何工作吗?

这是使用它的源代码:

BruteForceMatcher<float> matcher = new BruteForceMatcher<float>(DistanceType.L2);
matcher.Add(modelfeature);
indices = new Matrix<int>(destfeature.Rows, 2);
dist = new Matrix<float>(destfeature.Rows, 2);
matcher.KnnMatch(destfeature, indices, dist, 2, null);
mask = new Matrix<byte>(dist.Rows, 1);
mask.SetValue(255);
Features2DToolbox.VoteForUniqueness(dist, 0.8, mask);

我想做一本手册:

indices = new Matrix<int>(destfeature.Rows, 2);
dist = new Matrix<float>(destfeature.Rows, 2);
for (int i = 0; i < destfeature.Rows; i++)
{
    dist[i, 0] = float.MaxValue;
    dist[i, 1] = float.MaxValue;
    indices[i, 0] = -1;
    indices[i, 1] = -1;
    for (int j = 0; j < modelfeature.Rows; j++)
    {
        float temp = 0;
        for (int k = 0; k < 128; k++)
        {
             temp = temp +(float) Math.Pow(modelfeature[j, k] - destfeature[i, k], 2.0);
        }
        temp =(float) Math.Sqrt(temp);
        if (temp < dist[i, 0])
        {
             dist[i, 1] = dist[i, 0];
             indices[i, 1] = indices[i, 0];
             dist[i, 0] = temp;
             indices[i, 0] = j;
        }
        else if (temp < dist[i, 1])
        {
             dist[i, 1] = temp;
             indices[i, 1] = j;
        }
    }
}
mask = new Matrix<byte>(dist.Rows, 1);
for (int i = 0; i < dist.Rows; i++)
{
    if (dist[i, 0] < dist[i, 1] * 0.8)
    {
        mask[i, 0] = 255;
    }
    else
    {
        mask[i, 0] = 0;
    }
}

在我犯错之前已经编辑过的是,我将dist [i,1]除以dist [i,0],如果大于0.8,则为true。

奥利维尔·A

“ VoteForUniqueness”的想法是过滤不明确的匹配。假设您想将图像A的点与图像B的点进行匹配。

下面是它的工作原理 :

  • “ KnnMatch”正在为图像B中的图像A的每个点寻找2个最近邻居。
  • 在图像B中,如果第一邻居和第二邻居太相似(距离比小于0.8),我们认为我们不知道哪个是最匹配的,所以匹配被过滤(删除)。

值得一提的是,当我们谈论最近的邻居和距离时,我们谈论的是点的特征(而不是位置)之间的距离。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

pbkdf2如何工作?

来自分类Dev

Symfony2会话固定如何工作?

来自分类Dev

免费结帐在Opencart 2中如何工作?

来自分类Dev

sort -k 1,2如何工作?

来自分类Dev

Angular 2更改检测如何工作?

来自分类Dev

导入如何在Angular 2中工作?

来自分类Dev

Yii2 Url :: remember()如何工作?

来自分类Dev

Angular 2 @Injectable()-它如何工作

来自分类Dev

Markdown2如何使“ extras”工作?

来自分类Dev

ggplot2中的“ +”如何工作?

来自分类Dev

ngSwitch在Angular2中如何工作?

来自分类Dev

Linux C中的read(2)如何工作?

来自分类Dev

sort -k 1,2如何工作?

来自分类Dev

ggplot2中的“ +”如何工作?

来自分类Dev

如何使此代码在python 2中工作

来自分类Dev

如何使hostapd WPA2正常工作?

来自分类Dev

Yii2 Url :: remember()如何工作?

来自分类Dev

浮动2(或更多)div如何工作?

来自分类Dev

如果1 = 2 = 3那么(...)如何工作

来自分类Dev

如何让 RxJava2 Completable andThen() 工作?

来自分类Dev

(395,-2) 在 python 3 中如何工作?

来自分类Dev

stride=2 的 2x2 deconv kernel 如何工作?

来自分类Dev

2> r和2r>如何工作?

来自分类Dev

cv2.approxPolyDP(),cv2.arcLength()如何工作

来自分类Dev

"(\xyz -> [x,y,z]) <$> (+3) <*> (*2) <*> (/2) $ 5 " 是如何工作的?

来自分类Dev

如何从JSON导入的数据将工作表1附加到Google表格的工作表2中

来自分类Dev

如何将工作表1的值相加并在工作表2上显示总计?

来自分类Dev

Excel:如何比较来自2个不同工作簿的工作表之间的差异

来自分类Dev

如何删除统一的2D工作区动画?