参考文章:[sift、surf、orb 特征提取及最优特征点匹配]
最近刚刚入门三维重建,在SFM算法的代码中注意到了feature_type( feature extraction method)这个参数,想细致了解一下这几种特征提取算法,在这里做一下笔记,文章中删除线 的标记都是一些我存疑的点,还请大家评论区不吝赐教。
SIFT
简介
SIFT(Scale-Invariant Feature Transform)——尺度不变特征变换,是一种计算机视觉的特征提取算法,用来侦测与描述图像中的局部特征。
实质上,它是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向 。SIFT所查找到的关键点是一些十分突出、不会因光照、仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。
特征提取步骤
1.尺度空间的极值检测
尺度空间指一个变化尺度σ的二维高斯函数G(x,y,σ)与原图像I(x,y)卷积(即高斯模糊)后形成的空间:

L = G*I相当于对图片进行了滤波操作,不同的σ对图片进行的滤波程度不同。

经过不同程度滤波后的图片进行减法运算,得到DOG图

尺度不变特征应该既是空间域上又是尺度域上的局部极值。极值检测的大致原理是根据不同尺度下的高斯模糊化图像差异(Difference of Gaussians,DoG)寻找局部极值,这个点不仅要在图像域上是最大值,还要在尺度域上为最大值,寻找方法如图示,这些找到的极值所对应的点被称为关键点或特征点。

2.关键点定位
在不同尺寸空间下可能找出过多的关键点,有些关键点可能相对不易辨识或易受噪声干扰。该步借由关键点附近像素的信息、关键点的尺寸、关键点的主曲率来定位各个关键点,借此消除位于边上或是易受噪声干扰的关键点。

讲真。。。下面这张图说的有些看不懂,可能是我有些图像处理的基础知识没掌握

(r + 1)2/r的值在两个特征值相等的时候最小,随着r的增大而增大,因此,为了检测主曲率是否在某域值r下,只需检测:

if (α+β)/ αβ> (r+1)2/r, throw it out. 在Lowe的文章中,取r=10。
3. 方向定位
为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个基准方向。通过计算关键点局部邻域的方向直方图,寻找直方图中最大值的方向作为关键点的主方向。
上一步中确定了每幅图中的特征点,为每个特征点计算一个方向,依照这个方向做进一步的计算, 利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性。

在实际计算时,我们在以关键点为中心的邻域窗口内采样,并用直方图统计邻域像素的梯度方向。梯度直方图的范围是0~360度,其中每45度一个柱,总共8个柱, 或者每10度一个柱,总共36个柱。Lowe论文中还提到要使用高斯函数对直方图进行平滑,减少突变的影响。直方图的峰值则代表了该关键点处邻域梯度的主方向,即作为该关键点的方向。
4. 关键点描述子
找到关键点的位置、尺寸并赋予关键点方向后,将可确保其移动、缩放、旋转的不变性。此外还需要为关键点建立一个描述子向量,使其在不同光线与视角下皆能保持其不变性。SIFT描述子是关键点邻域高斯图像梯度统计结果的一种表示,见下图。通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。Lowe在原论文中建议描述子使用在关键点尺度空间内44的窗口中计算的8个方向的梯度信息,共44*8=128维向量表征。(opencv中实现的也是128维)

直方图中的峰值就是主方向,其他的达到最大值80%的方向可作为辅助方向
该步中将建立所有scale中特征点的描述子(128维)。
通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。

首先将坐标轴旋转为关键点的方向,以确保旋转不变性。以关键点为中心取8×8的窗口。(有个问题,为什么这样就能保证旋转不变性了)
这样就可以对每个feature形成一个4x4x8=128维的描述子,每一维都可以表示4*4个格子中一个的scale. 将这个向量归一化之后,就进一步去除了光照的影响。


具体可以参考这篇博客:https://www.cnblogs.com/liuchaogege/p/5155739.html***
Code
特征提取
def sift(filename):
img = cv2.imread(filename) # 读取文件
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转化为灰度图
sift = cv2.xfeatures2d_SIFT.create()
keyPoint, descriptor
1万+





被折叠的 条评论
为什么被折叠?



