OpenCV封裝了一些特徵描述子提取演算法,使得使用者能夠解決該問題時候方便使用各種演算法。這章用來計算的描述子提取被表達成一個高維空間的向量 vector.所有實現 vector 特徵描述子子提取的部分繼承了 DescriptorExtractor 介面. DescriptorExtractor class DescriptorExtractor
抽象基類 for 對映像關鍵點計算特徵描述子.
class CV_EXPORTS DescriptorExtractor{public: virtual ~DescriptorExtractor(); void compute( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const; void compute( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints, vector<Mat>& descriptors ) const; virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; virtual int descriptorSize() const = 0; virtual int descriptorType() const = 0; static Ptr<DescriptorExtractor> create( const string& descriptorExtractorType );protected: ...};
在這個介面中, 一個關鍵點的特徵描述子可以被表達成密集(dense),固定維數的向量。 大部分特徵描述子按照這種模式每隔固定個像素計算。特徵描述子的集合被表達成 Mat , 其中每一行是一個關鍵的特徵描述子. DescriptorExtractor::compute
根據檢測到的映像(第一種情況)或者映像集合(第二種情況)中的關鍵點(檢測子)計算描述子. C++: void DescriptorExtractor:: compute (const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const C++: void DescriptorExtractor:: compute (const vector<Mat>& images, vector<vector<KeyPoint>>& keypoints, vector<Mat>& descriptors ) const Parameters: image – 映像. images – 映像集.
:param keypoints:輸入的特徵關鍵點. 不能被計算特徵描述子的關鍵點被略過. 另外一些情況新的特徵關鍵點增加進來, 比如: SIFT 增加了幾個主方向上的特徵關鍵點. Parameters: descriptors – 計算特徵描述子. In the second variant of the method descriptors[i] are descriptors computed for a keypoints[i]`. Row ``j is the keypoints(or keypoints[i]) is the descriptor for keypoint j-th keypoint. DescriptorExtractor::read
從檔案點中讀取特徵描述子提取的對象. C++: void DescriptorExtractor:: read (const FileNode& fn ) Parameters: fn – 讀取的檔案點. DescriptorExtractor::write
寫入特徵描述子的提取的對象到檔案. C++: void DescriptorExtractor:: write (FileStorage& fs ) const Parameters: fs – 寫入的檔案. DescriptorExtractor::create
根據名字建立特徵描述子提取. C++: Ptr<DescriptorExtractor> DescriptorExtractor:: create (const string& descriptorExtractorType ) Parameters: descriptorExtractorType – Descriptor extractor type.
現有實現支援以下幾個類型的特徵描述子提取方法: "SIFT" – SiftDescriptorExtractor "SURF" – SurfDescriptorExtractor "ORB" – OrbDescriptorExtractor "BRIEF" – BriefDescriptorExtractor
A combined format is also supported: descriptor extractor adapter name ( "Opponent" – OpponentColorDescriptorExtractor ) + descriptor extractor name (see above), for example: "OpponentSIFT" .