一.尺度空间理论与高斯分布的概率密度函数

1.尺度空间理论

尺度空间理论目的是模拟图像数据的多尺度特征,高斯卷积核是实现尺度变换的唯一线性核(只有高斯卷积核才能对图像近大远小,近清晰远模糊的效果),于是一副二维图像的尺度空间定义为:

(x,y)是空间坐标,σ是尺度坐标它的大小决定图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。

 

2.高斯函数的概率密度函数

一维

 方差越大,高斯分布越平缓,在高斯分布做掩膜的时候周围像素对中心像素的影响就越大(也就是中心像素没那么大权重了),这样图像就越平滑,从而图像也越模糊,这样细节就会丢失。

方差较小

方差较大

   多维

       

 

 

 

     

二.步骤

1.尺度空间的建立

在检测极值点前对原始图像的高斯平滑以致图像丢失高频信息,所以 Lowe 建议在建立尺度空间前首先对原始图像长宽扩展一倍以保留原始图像信息,增加特征点数量。尺度越大图像越模糊。 

1.1高斯金字塔的建立

 

 

 

 

就看想要在几层高斯差分金字塔中求极值了,层数越多越精确。往往尺寸大的图像组数和每组中的层数要多一些。

说明:

1.每一组图片是固定尺度的图像进行高斯模糊得到的,组内图片的不同之处在于高斯的方差不同(这里也叫做尺度不同)

对于图像的高斯模糊我们的方法有:

根据3σ原则,使用NxN的模板在图像每一个像素点处操作,其中N等于大于6σ+1的第一个奇数

 

上面这样直接与图像卷积,速度比较,同时图像边缘信息也会损失严重。后来不知哪位学者发现,可以使用分离的高斯卷积(即先用1xN的模板沿着X方向对图像卷积一次得到一个图像,然后用Nx1的模板沿着Y方向对沿着X方向卷积得到的图像再卷积一次,其中N还是等于大于6σ+1的第一个奇数),这样既省时也减小了直接卷积对图像边缘信息的严重损失。

 

2.而不同组之间的图像是通过对原图片降采样得到的(例如每隔一个像素点取一个像素点),也就是不同组之间的图像尺寸是不同的

3.高斯卷积的好处:首先个人认为图像模糊有两点原因:第一图像尺寸太小,第二图像被平滑丢掉了许多细节信息。所以如果没有高斯卷积直接对图像进行降采样,图像就会丢失掉大部分的像素点,这样就显得不够连续。而对每个尺寸的图像进行多次不同尺度的高斯平滑(高斯平滑前后的图像相对连续一些),这样前一组的最后一张图像和下一组的第一张图像就相对连续一些,这样整体的高斯金字塔图像的变化就相对连续一些

每组每层的Б的确定:

说明

1.下一组的第1层为上一组倒数第4层降采样所得,无须进行高斯模糊操作.

2.


 对图像进行Б=0.5的平滑,再对图像进行Б=1.52的平滑,总体的效果可以达到Б=1.6的平滑,它们之间满足勾股定理的关系。

1.2高斯差分金字塔的建立

2.关键点的位置确定

 

2.1.阈值化

n为1.1第二张图片左下角的n(想要在几层中提取极值点)

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

 注意要舍去第一层和最后一层

2.3.寻找亚像素的极值

1.拟合曲线

当我们检测到极值点之后,会发现一个问题,高斯差分金字塔是离散的(因为尺度空间和像素点都是离散的),所以找到的极值点不太准确的,很大可能在真正极值点附近(达到亚像素精度),同时去除低对比度的关键点和不稳定的边缘响应点(因为DOG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力。

亚像素极值点的获取如下:

 

 

任一维度上的偏移量小于0.5时(即x或y或 σ),终止迭代,否则:

在Lowe论文中中进行了5次迭代终止算法。有个问题,从第二次迭代就是亚像素了,亚像素的有限差分怎么求,包括最后的亚像素函数值怎么求

  

 上面的图片所有异界偏导和二阶偏导都少一个, h一般取1

 

 

 

 

 

 

注意这里面的D是f,此步将所有的边缘点给去掉了

至此就在高斯差分金字塔中找到了亚像素的极值点(x,y,Б‘)也就是关键点,这个极值点可能不在任何差分金字塔的平面。

3.关键点赋予方向

上面的高斯金字塔已经保证了特征点的尺度不变性

3.1.主方向的选取

上一步中我们已经求得差分金字塔中关键点的位置(x,y,Б‘),那么高斯金字塔中的关键点的位置也就是(x,y,Б‘‘)其中Б‘‘是最接近Б‘的(在高斯金字塔中找到一层,该层的Б与Б’最相近)注意此时的关键点个人定义为层内关键点(当然一组中肯定有好多个关键点,这里以一个关键点为例)。这里为什么不在高斯金字塔上找关键点解释如下:

以该关键点为圆心1.5Б‘为半径画个圆我们统计它们的梯度方向和梯度幅值,然后用高斯滤波对这些像素滤波,用来统计的直方图的y轴是滤波后的幅值累加,x轴的确定原则如下:

以10柱为例0~36是一个区间,37~72是一个区间....以此类推。而每个像素求过梯度方向后就可以判断它在哪个区间了(所有在0~36区间中的像素的梯度方向统一认为是36度)

如果一个像素在0~36的区间内,则横坐标为36度的那个点的幅值就加上该像素的滤波后的幅值。

 

最后柱形图中最高点为主方向,同样如果其他主体的高度有大于等于主方向80%,那么就称这个方向为辅方向,那么一个关键点就变成了两个关键点,它们同样位置同样尺度不同方向。

 

3.2描述符的确定

这里说一下旋转不变性,如果水平建立x轴,竖直建立y轴,这样就是旋转改变了,如果一个像素的梯度方向是45度,那么图像旋转一个角度后,如果还以水平为x轴,竖直为y轴,那么这个像素的梯度方向就不再是45度。如果我们将所有像素的梯度方向变成一相对梯度方向,那么就会具有旋转不变性,怎么找呢,就是将将所有像素的梯度方向中选一个梯度方向作为x轴,与之垂直的就是y轴,该梯度方向就是主方向,这样你无论怎么旋转图像,每个像素的相对梯度方向就永远不会变,这就是旋转不变性。

在关键点周围找一个正方形区域(边长为,m=3,d=4(论文中所取)Б为关键点的Б),首先将该区域旋转到主方向,也就是将主方向作为x轴(从这里也可以看出来主方向和辅方向的特征描述子也不尽相同),方便计算嘛。然后将该区域分解为4*4个子区域。然后将每个子区域还像3.1那样根据每个子区域的所有像素求解每个子区域中36度所对应的幅度,72度所对应的幅度......

 

这样每个子区域有8个方向,一个方向的幅度为一个特征向量,一共有16个子区域,也就是有128个特征向量。

 

 感觉和Census变换一样,求解的是一个相对的特征向量,当受到不同光照后,特征向量的所有值一起变,所以归一化后的值不变。

 3.3整个图像的关键点以及它的描述子的获取

将某一层的关键点(x,y,Б)映射到原图像上,该关键点的位置为(x^组数-1,y^组数-1),描述子不变,注意这已经是亚像素位置了

4.图像的匹配

将左图像的一个关键点和所有的右图像的关键点的描述子求欧式距离欧式距离最小的则为匹配点,或则用Kd树?这个我还没学后续要补上

注意:尺度不变,光照不变,旋转不变的意思是,图像和它尺度缩放,旋转,加光照,后的图像仍然能匹配得上

 

 

以上是个人一些见解,标绿的地方是不确定的地方,欢迎大家批评指正,随笔有些图是在网上上截取的,侵权删除。

感觉这个算法就是个无底洞,每次看都有新的问题,所以今后打算看看原论文,或则多读读代码。

参考文章:

1.SIFT算法 - 知乎 (zhihu.com)

2.https://www.bilibili.com/video/BV1Qb411W7cK/?p=3&spm_id_from=0.0.header_right.history_list.click

3.4.2 点特征提取-SIFT_哔哩哔哩_bilibili

4.https://blog.csdn.net/lingyunxianhe/article/details/79063547

5.SIFT 特征提取算法总结 - 飞夺泸定桥 - 博客园 (cnblogs.com)

posted on 2023-02-08 17:52  小凉拖  阅读(138)  评论(0编辑  收藏  举报