![](/img/trans.png)
[英]OpenCV 3.0.0 SurfFeatureDetector and SurfDescriptorExtractor Errors
[英]Does openCV SurfFeatureDetector unnecessarily extract descriptors internally?
我只是想知道,如果使用的是SurfFeatureDetector檢測關鍵點和SurfDescriptorExtractor提取SURF描述符(見下面的代碼描述這里 )將不會提取兩次描述符。
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints;
detector.detect( img, keypoints ); //detecting keypoints, extracting descriptors without returning them
SurfDescriptorExtractor extractor;
Mat descriptors;
extractor.compute( img, keypoints, descriptors ); // extracting descriptors a second time
openCV文檔說,這兩個類是SURF()類的包裝器。 SURF::operator()
被重載,一個版本僅占用關鍵點向量,另一個版本另外為描述符采用向量。 是什么讓我感興趣...然后調用cvExtractSURF()
函數,它似乎提取描述符,無論如何...(我沒有深入研究C代碼,因為我覺得很難理解,所以也許我是錯誤的),但這意味着SurfFeatureDetector
將提取描述符而不返回它們。 在SurfDescriptorExtractor
中使用SurfDescriptorExtractor
只是第二次使用,對我而言似乎效率很低。 但我是對的嗎?
您可以放心,探測器實際上並不計算描述符。 要看的關鍵語句是surf.cpp的第687行if( !descriptors ) continue;
在檢測期間不會計算特征,應該是它的方式。 這種架構很可能是因為在設計/開發自己工作之后,沖浪代碼被“添加”到OpenCV。
作為背景:請注意,探測器和特征提取器是不同的東西。 首先使用SurfFeatureDetector“檢測”點,其中提取局部特征(使用SurfDescriptorExtractor)。 你有的片段是一個很好的指南。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.