图像处理之特征提取(三)之SIFT简单梳理
学习SIFT一段时间,有些东西理解不透彻,且网上没有清晰解释。以下内容为自己的胡思乱想,均无确切依据,辩证看待。
SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),“尺度”的直观第一印象就是大小,尺度不变就是和图片的大小没有关系,简单的SIFT的理解是最后检测出来的特征点匹配适用于所有尺寸的图像。
1.图像金字塔中的每一组中的图像分辨率相同,但高斯卷积核的σ不同,表示图像的模糊程度不同,代表了不同的尺度,但是第一印象不是说尺度代表大小吗,这里图像大小相同只是模糊程度不同,怎么代表了不同的尺度呢?相同大小的图片模糊程度不同其实包含了一部分图像大小不同的信息。
图1
如上图所示右边的图像为左边图像缩小为原来的1\4后再拉伸为原图像分辨率后的效果,表现为比原图像模糊了许多,其实右图包含的信息已经没有原图多了(细节丢失),而图像缩小拉升这个过程可以由高斯卷积核实现,最后效果为图像的模糊,结论:高斯卷积核的不同σ=图像的模糊度=图像的细节缺失=图像的尺度=部分代表图像的大小信息(最后通过拉伸恢复分辨率,但包含细节还是缩小后的信息)。这里还有一个问题,如果高斯卷积核可以代表尺度的变换,直接取合适的一系列不同的σ就可以了,SIFT中为何还要取图像金字塔呢?这里涉及到一个计算量的问题,σ越大,图像模糊需要计算的卷积范围就要越大,内存占用较多,这里用图像金字塔中的分辨率缩小图像一方面代替了部分σ作用,而且卷积计算量也成倍下降。
为什么不能全部用图像金子塔表示所有尺度,而要每组金字塔中有σ不同的分层呢?主要后边要计算LOG,DOG特征点方便。还涉及到高斯卷积核是尺度变换的唯一线性核这个论述,,这里的证明还没有找到完整版,简单的理解就是高斯卷积核的模糊效果(细节缺失)完美的可以代替操作图像分辨率大小变化带来的图像细节缺失,而且是有且仅有这一个线性卷积核,其他的都不行,丢失的东西不是太少就是太多。
2.检测到的极值点是离散空间的极值点,以下通过拟合三维二次函数来精确确定关键点的位置和尺度,同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力。上面这句话怎么理解呢?
这里的前提是通过一系列计算等我们最后特征匹配时,检测到的所有尺度的特征点是都要体现到原图上的,如下图所示,图中画出的所有特征点为在SIFT原理计算中所有尺度(图像金字塔的不同组不同层)中检测到的所有特征点,原图像中包含的特征点方便体现出来,坐标好确定(128维的描述子包含梯度方向大小信息,其中附加的有特征点的位置,尺度大小信息),金字塔上层的较小分辨率的图像的特征点是怎么在原图上确定的呢?
图2
中间肯定是包含了一系列的公式计算(这一块具体工作原理,没有研究透),但举个例子可以直观了解一下,为什么特征点的确定要亚像素级别。
用一维数组模拟DOG二维图像数据,把原极值点与上下尺度与自己尺度空间比较26个数值点,变成比较左右两个数值,模拟算法过程。如下图所示:
图3
3.尺度变化的连续性
尺度的连续性是不是必要条件?最后尺度的不连续性造成的后果是不是检测的效果不太理想,提取特征点不太充分,之间的具体关系是怎样的,可以思考一下。
经典算法博大精深,一时半会顿悟不了精髓。
参考文献:
Rachel-Zhang http://blog.csdn.net/abcjennifer/article/details/7639681/ SIFT特征提取分析;
zddhub http://blog.csdn.net/zddblog/article/details/7521424 SIFT算法详解