本文转自:http://blog.csdn.net/u011867581/article/details/21871685
1. 特征点类:
- class KeyPoint
- { Point2f pt; //坐标
- float size; //特征点邻域直径
- float angle; //特征点的方向,值为[零,三百六十),负值表示不使用
- float response;
- int octave; //特征点所在的图像金字塔的组
- int class_id; //用于聚类的id
- }
2. 存放匹配结果的结构:class KeyPoint { Point2f pt; //坐标 float size; //特征点邻域直径 float angle; //特征点的方向,值为[零,三百六十),负值表示不使用 float response; int octave; //特征点所在的图像金字塔的组 int class_id; //用于聚类的id }
-
- struct DMatch
- { //三个构造函数
- DMatch():
- queryIdx(-1),trainIdx(-1),imgIdx(-1),distance(std::numeric_limits<float>::max()) {}
- DMatch(int _queryIdx, int _trainIdx, float _distance ) :
- queryIdx( _queryIdx),trainIdx( _trainIdx), imgIdx(-1),distance( _distance) {}
- DMatch(int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) : queryIdx(_queryIdx), trainIdx( _trainIdx), imgIdx( _imgIdx),distance( _distance) {}
- int queryIdx; //此匹配对应的查询图像的特征描述子索引
- int trainIdx; //此匹配对应的训练(模板)图像的特征描述子索引
- int imgIdx; //训练图像的索引(若有多个)
- float distance; //两个特征向量之间的欧氏距离,越小表明匹配度越高。
- bool operator < (const DMatch &m) const;
- };
3. 图片中特征点欧式距离的计算公式:struct DMatch { //三个构造函数 DMatch(): queryIdx(-1),trainIdx(-1),imgIdx(-1),distance(std::numeric_limits<float>::max()) {} DMatch(int _queryIdx, int _trainIdx, float _distance ) : queryIdx( _queryIdx),trainIdx( _trainIdx), imgIdx(-1),distance( _distance) {} DMatch(int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) : queryIdx(_queryIdx), trainIdx( _trainIdx), imgIdx( _imgIdx),distance( _distance) {} int queryIdx; //此匹配对应的查询图像的特征描述子索引 int trainIdx; //此匹配对应的训练(模板)图像的特征描述子索引 int imgIdx; //训练图像的索引(若有多个) float distance; //两个特征向量之间的欧氏距离,越小表明匹配度越高。 bool operator < (const DMatch &m) const; };
0ρ = √( (x1-x2)2+(y1-y2)2 ) |x| = √( x2 + y2 )