研究生的方向是计算机视觉和图像处理,虽然现在基本都是依赖深度学习的方法,但是传统的一些图像算法里的一些概念还是要简要了解一些,深入理解可以查看链接参考大佬们写的教程。
SIFT
SIFT的全称是Scale Invariant Feature Transform,即尺度不变特征变换。SIFT可以提取位置、尺度、旋转不变量,具有极好的稳定性,具体关于SIFT的了解可以参考这些:1.https://blog.csdn.net/weixin_38404120/article/details/73740612 2.https://www.cnblogs.com/wangguchangqing/p/4853263.html 等。SIFT的主要过程是这样的:
1.构建DOG尺度空间,并检测极值点。首先构造DOG尺度空间,使用不同的高斯模糊获得不同的尺度空间,通过不同的尺度空间获得在不同尺度上获得不同尺度都存在的特征点。特征点检测一般使用LoG算子,但是这种方法计算量较大,所以在实际过程里使用DoG(差分高斯)来近似计算LOG,通过计算同一层不同的高斯模糊图之间的差来得到LoG空间,并在对多个该空间下图像比较得到极值点(即大于或小于所有相同尺度和相邻尺度所有的相邻点)。
2.删除不稳定的极值点。这里主要是去除低对比度的特征点和不稳定边缘的特征点,本质是通过尺度LOG函数拟合极值点,去除DOG局部曲率不对称的点。对于前者,通过泰勒展开式去除变化小于某阈值的部分,对于后者,去除最大特征值和最小特征值比值大于某阈值的部分。
3.确定特征点的主方向,以特征点为中心,一定范围的大小为半径,计算该区域内各个像素的梯度幅值和相角,然后使用直方图对梯度幅角进行统计。横轴为梯度的方向(一般有八个或十个),纵轴为对应梯度幅值的累加值,直方图中最高峰对应的方向就是特征点的方向。同时峰值超过最高峰百分之80的方向可以作为辅助方向。这样每个特征点可以得到三个信息,即位置、尺度和方向,一个SIFT特征区域包括三个值,即位置、半径(关键点的尺度)和主方向,其他方向也可以赋值给复制后的特征点,这样一个特征点就产生了多个坐标、尺度相等但方向不同的特征点。
4.生成特征点的描述子。首先将坐标轴旋转为特征点的方向,以特征点为中心的16×16的窗口的像素的梯度幅值和方向,将窗口内的像素分成16块,每块是其像素内8个方向的直方图统计,共可形成128维的特征向量。这样对特征点周围分块可以形成独特性的向量,具有唯一性,从而增强了算法的抗噪能力。
HOG
HOG是方向梯度直方图的简称,通过计算和统计区域梯度方向的直方图来构成特征。其主要思想是,在一幅图像上,局部目标的表象和形状能够被梯度或边缘的方向密度分布很好的描述。和其他特征描述方法相比,HOG的优点在于,由于HOG是在图像局部方格单元上操作,所以其对图像的几何和光学形变都能保持很好的不变性,允许物体出现微小的变化。关于HOG详细可以参考:1.https://blog.csdn.net/u012336567/article/details/55809016
2.https://blog.csdn.net/zhufanqie/article/details/8474528
HOG的具体步骤简要如下,详细可参考上面的博客:
1.对图像进行归一化,这个归一化主要是为了减少光照因素的影响。由于颜色信息的作用在获得特征中的作用不大,因此这里先将图像转换成灰度图。
2.计算图像梯度。这一步主要是计算图像横坐标和纵坐标方向梯度,并据此计算每个像素位置的方向梯度值,求导还能进一步弱化光照的作用。通常会使用简单的模板,如[-1,1]这样的。
3.为每个cell建立梯度方向直方图。这里是将图像分成若干个cell,每个cell为8*8的像素大小(一般是矩形的),按梯度方向将360度分成九个单元,每个单元20度,如某个像素梯度为20-40度,那么直方图第二个计数就+1,每个像素都是用梯度方向在直方图里进行加权投影,如果梯度大小为2(同样条件下),那么直方图第二个计数就不是+1而是+2了。这里加权是使用插值的方法,按照当前像素梯度方向的大小、像素在cell中的x和y坐标这三个值进行插值,被用来插值的是像素的梯度幅度,从而避免直方图在cell边界和直方图量化边界发生突变。
4.在上面处理完成之后,梯度强度变化的范围依然比较大,所以这里要对梯度强度进行归一化,归一化能够进一步地对光照、阴影和边缘进行压缩。这里采用的方法是将cell合并成更大的block,一个block里所有的cell特征串联起来便得到该block的HOG特征,这些block之间是存在重叠的。这也就意味着,每一个单元格的特征会以不同归一化的结果多次出现在最后的特征里,对于R-HOG,其主要表征参数包括:每个区间中cell的数目、每个cell中像素点的数目,每个cell直方图通道数。
5.最后是将所有block的HOG特征进行收集,并将它们结合成最后的特征向量供分类使用。
总结一下HOG和SIFT的区别:
1.SIFT是基于关键点特征向量的描述,而HOG则是将图像分成许多小块,统计这些小块的梯度直方图。
2.SIFT需要对图像尺度空间下像素求极值点,HOG不需要。