opencv中SIFT,KeyPoint和DMatch结构体

1.SIFT.create()

static Ptr< SIFT > 	create (int nfeatures=0, int nOctaveLayers=3, double contrastThreshold=0.04, double edgeThreshold=10, double sigma=1.6)

nfeatures:特征点数目(算法对检测出的特征点排名,返回最好的nfeatures个特征点)。 
nOctaveLayers:金字塔中每组的层数(算法中会自己计算这个值)。 
contrastThreshold:过滤掉较差的特征点的对阈值。contrastThreshold越大,返回的特征点越少。 
edgeThreshold:过滤掉边缘效应的阈值。edgeThreshold越大,特征点越多。 
sigma:金字塔第0层图像高斯滤波系数
 

2.KeyPoint

KeyPoint (Point2f _pt, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1)

pt    特征子在图像参考系中的位置
size    特征子邻域的直径
angle    特征子方向,范围为0-360
response    响应强度,值越大,代表特征子越好
octave    代表特征子位于金字塔哪一层
class_id    当要对图片进行分类时,用class_id对每个关键点进行区分,默认为-1

3.DMatch

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; // query descriptor index
    int trainIdx; // train descriptor index
    int imgIdx;   // train image index

    float distance;

    // less is better
    bool operator<( const DMatch &m ) const;
};

注释解释的已经比较清楚,query就是match函数前面那个描述子,train就是后面那个。distance代表这两个描述子之间的欧式距离。

4.调参及优化

https://blog.csdn.net/yangtrees/article/details/19928191

猜你喜欢

转载自blog.csdn.net/banzhuan133/article/details/87652214
今日推荐