建议搭配原博主的视频食用:
一.定义:
尺度不变特征转换(SIFT, Scale Invariant Feature Transform)是图像处理领域中的一种局部特征描述算法. 该方法于1999年由加拿大教授David G.Lowe提出,申请了专利,其专利属于英属哥伦比亚大学. SIFT专利在2020年3月17日之后到期,现在只需更新cv版本即可免费使用.
SIFT算法不仅只有尺度不变性,当旋转图像,改变图像亮度,移动拍摄位置时,仍可得到较好的检测效果。
二.算法应用:
手机全景图拍摄
三.算法步骤:
1.建立高斯差分金字塔
高斯金字塔的建立:
层:同样大小的图片(不同方差的高斯核(即不同尺度)对原图像进行卷积得到的)
组:由好几层同样大小图片构成.第二组的图片是第一组降采样后(隔点取点),再使用不同方差的高斯核(即不同尺度)对原图像进行卷积得到的。
组数:
M,N为原图像的宽、高。
层数:(你希望提取多少张图像(n)的特征)后文简称目标图片数
(最前面和最后免的图片没办法取极值。5张图片剩4张,所以+3)
论文中经验得出。
高斯差分金字塔:
同一组相邻的两层像素点对应相减。(5张图片剩4张)
高斯卷积核参数:
摄像机拍摄图片并非完全清晰,自带模糊尺度,经验值认为0.5
希望第一次高斯卷积后模糊尺度达到1.6
所以可得:
即高斯核使用1.52的尺度去卷积。(高斯核的性质:用0.5尺度高斯核卷积,再用1.52尺度高斯核卷积,相当于直接用1.6尺度高斯核卷积。)
得到第n+1层,也就是,隔点取点得到下一组的第一层。
得到第n+1层,也就是,隔点取点得到下一组的第一层。
......
2.关键点(key points)位置确定(最关键)
极值(最大、最小):关键点:有稳定性质,包含很多信息的点。
2.1 阈值化:
判断极值点是否是噪声(是否足够稳定)
像素点的绝对值大于0.5*T和目标图片数
T是自己设置的,原始论文中设置为0.04.
精确定位极值点
2.2 在高斯差分金字塔中找极值
找到的极值点可能只是极值点周围的点,所以要找到亚像素位置
2.3 调整极值点位置
在检测到的极值点处做三元二阶泰勒展开:
泰勒展开:在某个点出非常好的拟合原函数,从而用原函数求得亚像素位置。
三个分量均小于0.5,认为已经收敛,停止迭代。
2.4 舍去低对比度的点
若 ,则舍去点X
2.5 边缘效应的去除
若不满足 ,舍去点X (建议取10.0)
海森矩阵: 高斯差分金字塔中的图片对x,y进行的二阶偏导以及混合偏导。描述曲线的局部曲率。
消除边缘效率:曲率在两个方向上的曲率差不多,不然可能就是个边缘。
海森矩阵特征值和曲率成正比。
海森矩阵 取行列式值小于0,直接抛弃,两边曲率异号了。
是一个对勾函数
时对勾函数最小,,所以对勾函数单增。
3.为关键点赋予方向:
统计 以特征点为圆心,高斯图像尺度1.5倍为半径的圆 内的所有像素的梯度方向及其梯度幅值。
并做的高斯滤波。增加权重,使得离圆心越远,尺度影响越小。投票:结果最大的叫主方向。辅方向:超过主方向百分之八十的方向。
4.构建关键点描述符
描述符(128维向量)128个数(16*8)
因为之前确定过主方向:所以具有旋转不变性。
k近邻算法 根据描述符匹配关键点
区域取多大:三线型插值、抛物线插值等
论文中选择的是三线型插值。m是取3.d有多少个小区域8.