KNearestNeighborMatching.匹配工作

本文关键字:工作 KNearestNeighborMatching | 更新日期: 2023-09-27 18:13:54

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

描述相当简短:"匹配两组特征点。"我已经尝试过几次了,第一次是用浏览同一张图片两次的结果,第二次是浏览两张不同的图片。正如我所料,第一次测试返回的匹配点比SURF找到的点少一些。第二个让我挠头,我得到的分数比SURF找到的最高分数还要多。显然,我不知道这个方法能得到什么。谁能给我一个更详细的描述,我可以期待什么?

我想做的是确定两个不同大小的图像有多相似。你可以看到我之前提出的一个相关问题:Accord。. NET比较两个图像确定相似性

KNearestNeighborMatching.匹配工作

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

/// <summary>
///   Creates a nearest neighbor algorithm with the feature points as
///   inputs and their respective indices a the corresponding output.
/// </summary>
/// 
protected virtual IMulticlassScoreClassifier<T> CreateNeighbors(T[] features)
{
    int[] outputs = Vector.Range(0, features.Length);
    // Create a k-Nearest Neighbor classifier to classify points
    // in the second image to nearest points in the first image
    return new KNearestNeighbors<T>(K, Distance).Learn(features, outputs);
}

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

关于函数返回的点数的观察,这在第144-154行中解释:

 // 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;
 }

因此,正如您所看到的,该方法将使用具有最多SURF描述符的图像作为"锚"图像。这是必要的,这样图像中没有描述符数量较少的特征点未被分类。

回答关于如何计算两幅图像之间兼容性度量的原始问题,一种可能性是考虑点匹配的总数,两幅图像之间的最佳分数之和,最小(最差)分数,最佳分数,或这些的组合(可能沿着Hausdorff距离)。