-
SIFT,即尺度不变特征变换算法(Scale-invariant feature transform,SIFT), 是用于图像处理领域的一种算法。SIFT具有尺度不变性,可在图像中检测出关 键点,是一种局部特征描述子。
-
其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、 手势辨识、影像追踪和动作比对
- 独特性,也就是特征点可分辨性高,类 似指纹,适合在海量数据中匹配。
- 多量性,提供的特征多。
- 高速性,就是速度快。
- 可扩展,能与其他特征向量联合使用。
- 旋转、缩放、平移不变性
- 解决图像仿射变换,投影变换 的关键的匹配
- 光照影响小
- 目标遮挡影响小
- 噪声景物影响小
-
尺度空间极值检测点检测 • 关键点定位:去除一些不好的特征点,保存下来的特征点能够满足稳定性等条件
-
关键点方向参数:获取关键点所在尺度空间的邻域,然后计算该区域的梯度和方 向,根据计算得到的结果创建方向直方图,直方图的峰值为主方向的参数
-
关键点描述符:每个关键点用一组向量(位置、尺度、方向)将这个关键点描述 出来,使其不随着光照、视角等等影响而改变
-
关键点匹配:分别对模板图和实时图建立关键点描述符集合,通过对比关键点描 述符来判断两个关键点是否相同
-
返回的关键点是一个带有很多不用属性的特殊 结构体,属性当中有坐标,方向、角度等。
-
使用sift.compute()函数来进行计算关键点描 述符
- kp,des = sift.compute(gray,kp)
-
如果未找到关键点,可使用函数 sift.detectAndCompute()直接找到关键点并 计算。
-
在第二个函数中,kp为关键点列表,des为 numpy的数组,为关键点数目×128
img = cv2.imread('harris2.png')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)#找到关键点
img=cv2.drawKeypoints(gray,kp,img)#绘制关键点
cv2.imshow('sp',img)
cv2.waitKey(0)
cv2.destroyAllWindows()