我正在将Opencv C++用于人脸识别应用程序。为此,我使用SURF作为描述符,并使用FlannMatcher来匹配这些点。我的代码如下,

FlannBasedMatcher matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );

double max_dist = 0; double min_dist = 100;
for( int i = 0; i < descriptors_1.rows; i++ )
{
     double dist = matches[i].distance;
     if( dist < min_dist ) min_dist = dist;
     if( dist > max_dist ) max_dist = dist;
}

在这里我们找到min_distmax_dist来检查两个面孔之间是否匹配,但是我不明白min_distmax_dist的含义。

这到底是什么意思?
为什么我们需要为单个描述符同时找到min_distmax_dist

最佳答案

如您所知,SIFT描述符是高维空间(即128)中的 vector 。在图像上运行它以找到兴趣点时,它将找到一些点作为兴趣点,并找到它们的描述符作为 vector 来描述每个点。高维空间。

第一张图片中的每个点(即A)在另一张图片中的对应点(即B)都应具有对应的内容!这意味着距离最小的人最有可能是对应的,但是并不是所有人。其中一些可能是离群值,我们期望其检测到的对应关系中具有较高的距离值,这使我们在代码中使用max_dsist。在某些类型的上下文中,您可能并不需要所有最佳匹配,因为对应点的数量可能相对较高,或者....因此,我们定义了使用min_dist进行处理的距离的下限。

希望能为您提供见识!

关于c++ - 对于SURF,FlannMatcher,min_dist和max_dist是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23148915/

10-16 10:38