KNearestNeighborMatching.Match如何工作

时间:2016-10-19 05:50:15

标签: c# computer-vision accord.net

我在这里查看了此方法的文档:http://accord-framework.net/docs/html/M_Accord_Imaging_KNearestNeighborMatching_1_Match_1.htm

描述相当简短:“匹配两组特征点。”我已经尝试了几次,首先使用SURFing两次相同图像的结果,然后通过SURFing两个不同的图像。第一次测试返回,我的预期,与SURF找到的点相比,点的匹配点少一些。第二个让我挠头,我得到的分数超过了SURF找到的最大分数。所以,显然,我不知道对这种方法有什么期望。谁能给我一个更详细的描述我可以期待什么?

我要做的是确定两个不同大小的图像有多相似。您可以在此处查看我之前提到的相关问题:Accord.NET Comparing two images to determine similarity

1 个答案:

答案 0 :(得分:0)

该方法使用k-最近邻分类算法来学习一个图像中的描述符与指示其位置的整数索引的向量之间的映射。从source code of the KNearestNeighborMatch class,您可以看到:

 // We should build the classifiers with the highest number
 // of training points. Thus, if we have more points in the
 // second image than in the first, we'll have to swap them

 if (points2.Length > points1.Length)
 {
     var aux = points1;
     points1 = points2;
     points2 = aux;
     swap = true;
 }

构建此分类器的目的是,现在您可以将任何描述符传递给它,即使是那些不在原始图像中的描述符,它也会为您提供原始图像中最接近的描述符的索引它。因此,在实践中,您可以使用此分类器从两个不同的图像中获取特征点之间的最佳匹配。

关于函数返回的点数的观察,这是explained in lines 144-154

find_package()

正如您所看到的,该方法将用作"锚点#34;对具有最多SURF描述符的图像进行成像。这是必需的,因此具有较少描述符的图像中的特征点未被分类。

回答关于如何计算两个图像之间兼容性度量的原始问题,可能是考虑点匹配的总数,两个图像之间的最佳得分之和,最小(最差)得分,最佳得分,或这些的组合(可能遵循Hausdorff distance的某些内容。)