我正在使用 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 描述符是高维空间中的 vector ,即 128。当您在图像上运行它以查找兴趣点时,它会找到一些点作为兴趣点,并将它们的描述符作为 vector 来描述这一点在高维空间中。
第一张图片中的每个点,比如 A
,都应该在另一张图片中有一个对应点,比如 B
!这意味着,那些距离最小的人最有可能是通讯员,但是 不是所有。其中一些可能是异常值,我们希望在其检测到的对应关系中具有较高的距离值。这使得我们在代码中使用max_dsist
。在某些类型的上下文中,您可能不想要所有的最佳匹配,因为对应点的数量可能相对较多,或者......所以我们定义了一个距离的下限,我们用最小距离
。
我希望这能给你带来洞察力!
关于c++ - SURF、FlannMatcher的min_dist和max_dist是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23148915/