我正在将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_dist
和max_dist
来检查两个面孔之间是否匹配,但是我不明白min_dist
和max_dist
的含义。这到底是什么意思?
为什么我们需要为单个描述符同时找到
min_dist
和max_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/