SIFT算法学习笔记

建议搭配原博主的视频食用:

SIFT(尺度不变特征变换)

一.定义:

尺度不变特征转换(SIFT, Scale Invariant Feature Transform)是图像处理领域中的一种局部特征描述算法. 该方法于1999年由加拿大教授David G.Lowe提出,申请了专利,其专利属于英属哥伦比亚大学. SIFT专利在2020年3月17日之后到期,现在只需更新cv版本即可免费使用.

SIFT算法不仅只有尺度不变性,当旋转图像,改变图像亮度,移动拍摄位置时,仍可得到较好的检测效果。

二.算法应用:

手机全景图拍摄

三.算法步骤:

1.建立高斯差分金字塔

高斯金字塔的建立:

层:同样大小的图片(不同方差的高斯核(即不同尺度)对原图像进行卷积得到的)

组:由好几层同样大小图片构成.第二组的图片是第一组降采样后(隔点取点),再使用不同方差的高斯核(即不同尺度)对原图像进行卷积得到的。

组数:O=[ \log_{2}(min( M,N))] -3

M,N为原图像的宽、高。

                                             层数:S=n+3(你希望提取多少张图像(n)的特征)后文简称目标图片数

(最前面和最后免的图片没办法取极值。5张图片剩4张,所以+3)

论文中经验得出。

 高斯差分金字塔:

同一组相邻的两层像素点对应相减。(5张图片剩4张)

                                 高斯卷积核参数:      k=\sqrt[n]{2}

摄像机拍摄图片并非完全清晰,自带模糊尺度,经验值认为0.5

希望第一次高斯卷积后模糊尺度达到1.6

所以可得:

\sigma _{0}=\sqrt{1.6^{2}-0.5^{2}}=1.52

即高斯核使用1.52的尺度去卷积。(高斯核的性质:用0.5尺度高斯核卷积,再用1.52尺度高斯核卷积,相当于直接用1.6尺度高斯核卷积。)

得到第n+1层,也就是2\sigma _{0},隔点取点得到下一组的第一层。

 得到第n+1层,也就是4\sigma _{0},隔点取点得到下一组的第一层。

......

 2.关键点(key points)位置确定(最关键)

极值(最大、最小):关键点:有稳定性质,包含很多信息的点。

2.1 阈值化:

判断极值点是否是噪声(是否足够稳定)

\left | val \right |> 0.5*T/n 

 T=0.04

像素点的绝对值大于0.5*T和目标图片数

T是自己设置的,原始论文中设置为0.04.

精确定位极值点

2.2 在高斯差分金字塔中找极值

找到的极值点可能只是极值点周围的点,所以要找到亚像素位置 

2.3 调整极值点位置

在检测到的极值点X_{0}(x_{0},y_{0},\sigma _{0})^{^{T}}处做三元二阶泰勒展开:

泰勒展开:在某个点出非常好的拟合原函数,从而用原函数求得亚像素位置。

三个分量均小于0.5,认为已经收敛,停止迭代。 

2.4 舍去低对比度的点 

若 \left |f(X)) \right |< T/n ,则舍去点X

 2.5 边缘效应的去除

若不满足\frac{Tr(H)^{2}}{Det(H)}< \frac{(10+1)^{2}}{10}  ,舍去点X       (建议\gamma取10.0)

海森矩阵: 高斯差分金字塔中的图片对x,y进行的二阶偏导以及混合偏导。描述曲线的局部曲率。

消除边缘效率:曲率在两个方向上的曲率差不多,不然可能就是个边缘。

海森矩阵特征值和曲率成正比。

海森矩阵 取行列式值小于0,直接抛弃,两边曲率异号了。

\frac{(\gamma +1)^{2}}{\gamma }=\gamma +2+\frac{1}{\gamma}          是一个对勾函数

\gamma =1时对勾函数最小,\gamma > 1,所以对勾函数单增。

3.为关键点赋予方向:

统计 以特征点为圆心,高斯图像尺度1.5倍为半径的圆 内的所有像素的梯度方向及其梯度幅值。

并做1.5\sigma的高斯滤波。增加权重,使得离圆心越远,尺度影响越小。投票:结果最大的叫主方向。辅方向:超过主方向百分之八十的方向。

4.构建关键点描述符

描述符(128维向量)128个数(16*8)

因为之前确定过主方向:所以具有旋转不变性。

k近邻算法  根据描述符匹配关键点

区域取多大:三线型插值、抛物线插值等

论文中选择的是三线型插值。m是取3.d有多少个小区域8.

猜你喜欢

转载自blog.csdn.net/qq_46012097/article/details/134037243