繁体   English   中英

如何选择好的SURF功能要点?

[英]How to choose good SURF feature keypoints?

我目前正在研究对象分类问题。 我的目标是使用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;

这样,我可以减小描述符的尺寸,但是所选特征点不能代表图像,并且它们会导致较差的匹配结果。 如何通过保留良好的特征点来缩小描述符的维数? 任何帮助将不胜感激。

我完全在寻找其他东西,所以没有专家,但是我碰巧知道Matlab具有'points.selectstrongest(x)'功能,因为x是您想要的点数。 该功能选择指标最强的点。

度量是Matlab函数“ detectSURFFeatures”赋予SURFpoint的属性。 我通过OpenCV函数'vision.internal.buildable.fastHessianDetectorBuildable.fastHessianDetector_uint8'在'detectSURFFeatures'中给出了度量标准

您可以使用在功能检测中返回的每个关键点的响应值。 按照关键点的响应值对关键点进行排序应该是可行的方法,但是我从未测试过。

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

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

还有其他一些常见的方法来检查要素的对应关系,请参阅要素匹配 基本上,他们检查描述符向量之间的距离。

我认为您正在尝试做一些与功能匹配有所不同的事情,所以我建议您看一下物体检测

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM