老王的专栏

The dots will somehow connect in your future. 公众号: 老王AI路(AICourseOldWang)

用OpenCV提取图片SIFT特征

包括角点检测和计算特征描述子两个过程。

vector<KeyPoint> keyPoint;
Ptr<FeatureDetector> featureDetector;
featureDetector = FeatureDetector::create("FAST");
featureDetector->detect(image, keyPoint);//角点检测
Mat descriptors;
Ptr<DescriptorExtractor> descriptorExtractor;
descriptorExtractor = DescriptorExtractor::create("SIFT");
descriptorExtractor->compute(image, keyPoint, descriptors);//计算特征描述子
KeyPoint有如下参数:
pt(x,y):关键点的坐标
size:该点直径的大小
angle:角度,表示关键点的方向,为了保证方向不变性,SIFT算法通过对关键点周围领域进行梯度运算,
求得该点方向。-1为初值。
response:响应程序,代表该点强度大小。我的理解是该点在图片多个关键点中的权重。"reponse" is indeed an indicator of "how good" (roughly speaking, in terms of corner-ness) a point is.
octave代表是从金字塔哪一层提取得到的数据。
class_id:当要对图片进行分类时,我们可以用class_id对每个特征点进行区分,未设定时为-1,需要自己设定。

descriptorExtractor对关键点周围领域内的像素分块进行梯度运算,得到128维的特征向量。
根据David G.Lowe的建议,对每个关键点,在其周围,用4x4=16个格子进行描述,每个格子包含8个方向的信息,即16x8=128个信息,这就是128维的SIFT特征向量。
阅读更多
个人分类: C/C++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

用OpenCV提取图片SIFT特征

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭