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" .