簡體   English   中英

openCV SurfFeatureDetector是否在內部不必要地提取描述符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM