【问题标题】:How to choose good SURF feature keypoints?如何选择好的 SURF 特征关键点?
【发布时间】:2015-08-23 16:50:17
【问题描述】:

我目前正在研究对象分类问题。我的目标是使用 SURF 描述符在 opencv 中训练基于 MLP 的人工神经网络并生成对象分类模型。到目前为止,我已经实现了以下目标:

我正在使用以下代码计算 SURF 关键点:

vector<KeyPoint> computeSURFKeypoints(Mat image) {
    SurfFeatureDetector surfdetector(400, 4, 2, true, false);
    vector<KeyPoint> keypoints;
    surfdetector.detect(image, keypoints);
    return keypoints;
}

我使用以下代码在这些关键点上计算 SURF 描述符:

Mat computeSURFDescriptors(Mat image, vector<KeyPoint> keypoints) {
    SurfDescriptorExtractor extractor;
    Mat descriptors;
    extractor.compute(image, keypoints, descriptors);
    return descriptors;
}

我面临的问题是描述符的大小因图像而异。对于每个特征点,描述符包含 64 个元素。为了训练神经网络,我希望描述符的大小是固定的。为此,我使用 PCA 来减小描述符大小,如下所示:

Mat projection_result;
PCA pca(descriptors, Mat(), CV_PCA_DATA_AS_COL, 64);
pca.project(descriptors,projection_result);
return projection_result;

这样做,我可以减少描述符的维度,但是选择的特征点不能代表图像,它们会导致匹配结果不佳。如何通过保留好的特征点来降低描述符的维度?任何帮助将不胜感激。

【问题讨论】:

  • 你说“......描述符的大小因图像而异。描述符包含每个特征点的 64 个元素”这是没有意义的。SURF 描述符是 64 或 128 个元素。您将扩展标志标记为 True,因此您应该获得 128 个元素。我猜你在谈论不同数量的功能?
  • 描述符 count 因图像而异(不是大小)。为了克服这个问题,通常会应用 Bag-of-Words 聚类(最终,将包含到您的字典的距离的固定 N-dim 向量输入到您的 ml 中)
  • @berak:请详细说明一下?也许发布您的想法的答案?
  • 例如看看here

标签: opencv neural-network pca feature-extraction surf


【解决方案1】:

我正在寻找完全不同的东西,所以没有专家,但我碰巧知道 Matlab 有一个功能'points.selectstrongest(x)',x 是你想要的点数。该功能选择具有最强度量的点。

度量是 Matlab 函数“detectSURFFeatures”赋予 SURFpoints 的属性。 I Metric 由 OpenCV 函数 'vision.internal.buildable.fastHessianDetectorBuildable.fastHessianDetector_uint8' 在 'detectSURFFeatures' 中给出

【讨论】:

  • 对不起,这与 matlab 无关
  • 另外,opencv 没有名为vision.internal.buildable.fastHessianDetectorBuildable.fastHessianDetector_uint8的函数
【解决方案2】:

您可以使用特征检测中返回的每个关键点的响应值。根据响应值对关键点进行排序应该是可行的方法,但是我从未对此进行过测试。

见:https://github.com/Itseez/opencv/blob/master/modules/core/include/opencv2/core/types.hpp#L697

【讨论】:

    【解决方案3】:

    假设您在每张图像中谈论不同数量的 关键点(而不是不同的描述符长度)。关键点的数量相同没有多大意义,它不是一对一的连接。所以,我不知道做 PCA 背后的想法是什么,在每张图像中你会得到不同的结果。

    还有一些其他常用的方法来检查特征对应关系,请参阅Feature matching。基本上,他们检查描述符向量之间的距离。

    我认为您正在尝试做一些不同于特征匹配的事情,所以我建议您查看object detection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      相关资源
      最近更新 更多