SIFT (Scale Invariant Feature Transform)
sift,尺度不变特征,通过检测空间域与尺度域上的局部极大值作为特征,常于图像特征匹配,应用领域为目标识别(匹配),图像融合,图像拼接,图像检索等。假设对一幅图像进行sift特征提取,得到N个sift特征点,每个sift特征点的存储结构为128维的向量,则该图像的sift特征描述为N*128个向量。
在OpenCV里,sift的提取主要使用一下语句:(注:头文件需包含#include <opencv2\nonfree\features2d.hpp>,且在我的电脑上VS2012对于Opencv不是太友好,出现assertion fail***dbgheap.c***大概是堆的内存有问题之类的异常中断,后来换成VS2010就好了)
cv::SiftFeatureDetector siftdtc; //构造sift检测器
std::vector<cv::KeyPoint> kp1; //存储sift特征keypoints的向量
siftdtc.detect(image,kp1); //检测image的sift特征,并将特征存于向量kp1中
drawKeypoints(image,kp1,out); //画特征点在cv::Mat out上
cv::imshow("out",out);
生成这一图像是不是有些许成就感了?接下来分析下opencv的代码: