簡體   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