我一直在为 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。