gpt4 book ai didi

java - Bruteforce 匹配是否适用于 FREAK 描述符?

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:43 24 4
gpt4 key购买 nike

我一直在 Android 智能手机上制作一个应用程序,可以比较 2 张图像(一张在 SD 卡上,一张来自相机)。在那里,我在有限数量的关键点上使用了 FREAK 描述符(我根据响应过滤掉了 500 个最佳关键点)。当我尝试将它与 BRUTEFORCE_SL2 匹配时,它返回 0 个匹配项。

这是因为 FREAK 和 Bruteforce 不能很好地协同工作吗?还是我在代码中做错了什么?

匹配发生在

MatOfDMatch matches = new MatOfDMatch();

matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_SL2);
matcher.match(descriptors,descriptors1,matches);
MatOfDMatch goedematches = new MatOfDMatch();

double max_dist = 0;
double min_dist = 100;
//if (descriptors.cols() == descriptors1.cols())
//{
for( int i = 0; i < descriptors.rows(); i++ )
{ double dist = matches.toArray()[i].distance;
if( dist < min_dist ) min_dist = dist;
if( dist > max_dist ) max_dist = dist;
}
// should only draw good matches
for( int i = 0; i < descriptors.rows(); i++ )
{ MatOfDMatch temp = new MatOfDMatch();
if( matches.toArray()[i].distance < 3*min_dist )
{ temp.fromArray(matches.toArray()[i]);
goedematches.push_back(temp);
}
// }
}

Log.d("LOG!", "Number of good matches= " + goedematches.size());

当我刚刚做的时候

matcher.match(descriptors,descriptors1,matches);

并读出匹配项

Log.d("LOG!", "Number of good matches= " + matches.size());

即使我拍了一些看起来不像我的图片的照片,我也会得到大约 450。

最佳答案

首先,FREAK 创建二进制描述符。因此,您应该使用汉明距离而不是欧几里得距离(这在这里没有意义):

matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);

汉明距离实际上会计算一个描述符与另一个描述符不同的位数。

然后,重要的是要知道匹配器只会为您在 descriptors 中找到的最佳对应 每个 描述符.所以如果你得到的匹配比预期少,你需要查看之前的步骤(特征检测和描述符提取)。

编辑:即使图像可能完全不同,您也会得到每个描述符的最佳匹配(即使这个匹配实际上是错误的)。文档中的示例代码通过测试距离是否大于 3*min_dist 来过滤掉较差的匹配项。 .但这不会消除错误的匹配!考虑有两个完全不同的图像;该算法将找到 best他们可能的匹配,即使实际上这些都是错误的匹配......如果你真的想保持“正确”的匹配,你将不得不使用更高级的过滤技术(但这是另一个问题)。

我想提的最后一件事(为了匹配器的理解)是 matcher.match()不对称:

matcher.match(descriptors,descriptors1,matches);

将为 descriptors 中的每个描述符找到 , 最佳对应descriptors1 。情况可能并非如此(您可以尝试说服自己)。

这里是我所说的“不对称”的更详细的例子:假设你有一个描述符 Ai图片上A和你匹配图像 A图片B .你会得到 Bi , 这将是 B 中的最佳对应关系对于 Ai .

现在,如果你匹配图像 B图片A , 您将在 A 中获得最佳对应关系对于 Bi .但是可能存在一个Aj ,不同于Ai ,更类似于 BiAj .

在这种情况下,匹配 AB会给信件Ai <-> Bi匹配时 BA会给信件Bi <-> Aj这显然不一样。

关于java - Bruteforce 匹配是否适用于 FREAK 描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com