2014-04-18 460 views
1

我正在使用Opencv C++,用于人脸识别应用程序。为此,我使用SURF作为描述符,使用FlannMatcher来匹配点。我的代码如下,SURF的min_dist和max_dist是什么意思,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; 
} 

在这里,我们检查是否有匹配两个faces.But之间,我不明白这是什么min_distmax_dist手段寻找min_distmax_dist

这究竟意味着什么? 为什么我们需要为单个描述符找到min_distmax_dist

+0

这是一个不好的例子。如果没有这个“max_dist”和“min_dist”,有一个更好的方法来区分好匹配和坏匹配。 http://stackoverflow.com/a/19815769/1983544 –

回答

2

正如您所知,SIFT描述符是一个高维空间中的向量,例如128.当您在图像上运行它以找到兴趣点时,它会找到一些点作为兴趣点并将它们的描述符作为每个向量在高维空间中描述这一点。

第一张图像中的每个点(例如A)都应在其他图像中对应,例如B!这意味着,那些距离最近的人最有可能是通讯员,但是并非所有人都是。其中一些可能是异常值,我们预计在其检测到的对应关系中具有高距离值。这使得我们在我们的代码中使用max_dsist。在某些类型的情况下,您可能不希望所有的匹配,因为对应点的数量可能相对较高,或....因此,我们定义了一个与min_dist所做的距离的下限。

我希望能给你洞察!

+1

非常感谢您的快速响应,这真的很有用 – user3228547

+0

@ user3228547,欢迎您:) – Hadi