c++ - SURF、FlannMatcher的min_dist和max_dist是什么意思

标签 c++ opencv image-processing surf

我正在使用 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 描述符是高维空间中的 vector ,即 128。当您在图像上运行它以查找兴趣点时,它会找到一些点作为兴趣点,并将它们的描述符作为 vector 来描述这一点在高维空间中。

第一张图片中的每个点,比如 A,都应该在另一张图片中有一个对应点,比如 B!这意味着,那些距离最小的人最有可能是通讯员但是 不是所有。其中一些可能是异常值,我们希望在其检测到的对应关系中具有较高的距离值。这使得我们在代码中使用max_dsist。在某些类型的上下文中,您可能不想要所有的最佳匹配,因为对应点的数量可能相对较多,或者......所以我们定义了一个距离的下限,我们用最小距离

我希望这能给你带来洞察力!

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

相关文章:

c++ - 与 `std::chrono` 类型相比,为什么使用 `float` 进行时差测量会给出更多有效数字的 `double` 类型?

c++ - 用C++将数据读入双数组

opencv - 无法创建 cvblobslib.lib

iphone - iphone 应用程序图像中的颜色替换

opencv - 如何使用RpLIDAR(2d Lidar)和图像处理来测量房间尺寸

结构中带有变量的cout的c++顺序会更改内容吗?

c# - 从窗口句柄获取真实文本

c++ - OpenCV WebAssembly

c++ - 在 OpenCV 中进行边缘检测后找到最佳感兴趣区域

php - 什么是带有引擎的现代 OOP php 图像处理库?