SIFT特征点我看了不下六次,每次都看一半就不看了,现在还是半懂不懂,当然和我个人数学水平、知识积累、懒惰的个性有关。
不过SIFT确实包含了很多内容,如高斯金字塔、DOG、矩阵求导以及黑塞矩阵,要求较深的矩阵知识和图像处理知识,如果是初学者我建议先不要看SIFT特征,一方面确实是浪费时间,另一方面是必须要有一定的编程能力、高等数学知识和图像处理理解,才能明白SIFT的深层含义。
黑塞矩阵和拉普拉斯算子
拉普拉斯算子是椭圆形算子,具有旋转不变性,也称为散度,在数字图像上,这个值的正负关系到函数的梯度是增加还是减少,是各方向梯度的总和,说明了图像一阶导数上的变化快慢,本身是图像二阶导数。
注意他并没有指明方向,也就说某个方向的梯度也许是增加,但另一个方向的梯度或许是下降,然而总的梯度是上升的。
关于拉普拉斯的问题建议看一下这篇文章:
https://zhuanlan.zhihu.com/p/67336297
黑塞矩阵包含了拉普拉斯算子,他的特征值说明了变化最快和最慢的两个方向,也就是所说的主曲率方向,其实还是在说图像一阶导数变化快慢的问题,不过指定了两个变化方向。
关于黑塞矩阵建议看一下这篇文章写得不错:
https://blog.csdn.net/lwzkiller/article/details/55050275
SIFT特征
https://www.cnblogs.com/wangguchangqing/p/4853263.html#4048547
就是尺度旋转不变性。
如何实现尺度不变性?答案是高斯金字塔。
如何实现旋转不变性?答案是特征描述及DOG。
高斯金字塔就是降采样的过程,方差越大,物体就越模糊。没什么好说的。
DOG是简化的拉普拉斯算子,我们只想把图像一阶导数上局部变化最快的点(也就是梯度变化最快的点)作为特征点,这个问题必须要对图像二次求导,DOG简化了二次求导的问题,也能得到这种特征点。
SIFT给出的分层搜索局部极大DOG特征点有一个问题,就是该值有可能只是极小范围内的某一个较大值,首先要得到他的极大值,这样才算合格。
所以SIFT用泰勒公式拟合了小范围内的DOG函数,求取了附近的极大值,并做了阈值比较。
黑塞矩阵消除边缘响应,依靠特征值比率剔除一些特征点,这些特征点一般化是边缘点剧烈变化的点,至于为什么筛选这些点。我不知道,可能剧烈的边缘影响匹配。
生成特征描述,比较简单,不写感悟了。
最后可以用欧式距离实现匹配,匹配结果不满意就有RANSAC(搞个单应矩阵)或者最近邻点比次近邻点改善结果。