HOG和SIFT图像特征提取简述
共 6440字,需浏览 13分钟
·
2021-11-05 14:56
点击下方“AI算法与图像处理”,一起进步!
重磅干货,第一时间送达
前言 随着深度学习方法的流行,很多人对传统方法一无所知。然而传统方法仍然非常重要,这里介绍两个提取特征的传统方法--HOG和SIFT方法。
本文转载自咪付,仅用于学术分享(编辑:CV 技术指南)
如今,计算机视觉的应用在生活中已随处可见,如人脸识别考勤门禁、全态识别过闸乘地铁等。之所以能大量应用,是因为能解决问题,其本质原理是在数学上找到了一种从具体图像转换到特定数学空间的方法。这里的特定数学空间称为特征空间,该转换方法即为特征提取方法。
常见的特征提取的方法有两大类:一类是通过传统机器学习算法提取,另一类是通过深度神经网络进行提取。在大数据处理方面,深度神经网络具有更高的精准度、更广的适用领域;而在数据量相对较小的领域,传统机器学习算法速度精准度更具有优势,这是因为传统机器学习算法推理严格、计算过程可控。
本文将关注机器学习两种经典的特征提取算法:HOG和SIFT方法。
1、图像识别与特征
1.1 图像识别
图像识别是计算机视觉中的一个重要方向。简单地说,图像识别就是给一张图片让计算机认出其中的内容,包括目标的位置、语义、类别等信息。图像有静态和动态之分,这里主要讨论的是静态图像,理解了静态图像的识别原理就容易扩展到动态图像。如下图,计算机通过图像识别给出图像中有哪些目标(水果)、各目标在图像中的位置等。
1.2 图像特征
计算机看图像实际上是通过图像的一系列像素最终辨别图像有什么,是什么。当然,计算机不是直接从图像的原始像素值就能辨识出图像的内容,图像的原始像素需经过运算后,抽象出图像特征才能“看”清楚图像。图像特征的提取是非常关键的一环。
我们将通过分析两种典型的可解析性拟合算法HOG、SIFT,来直观了解图像特征提取过程。为什么选择HOG、SIFT,因为两者具有高度的相似性,都使用了梯度计算、直方图统计。
两者大体步骤对比如下:
HOG | SIFT | |
预处理1 | 图像灰度化 | 图像缩放(多个不同分辨率的图像) |
预处理2 | 图像归一化 | 高斯模糊、DoG特征图计算 |
描述子计算 | 分块计算 | 计算极值点、分块计算 |
两者特点对比如下:
对比项 | HOG | SIFT |
特征特点 | 单一尺度 | 多尺度 |
应用领域 | 目标检测 目标跟踪 | 图像匹配 三维建模 |
优点 | 图像几何和光学形变都保持良好的不变性、刚性物体特征提取效果好 | 尺度不变性、旋转不变性、亮度不变性、噪点不敏感、特征维度小、抗遮挡 |
缺点 | 特征维度大、描述子生成过程冗长、无法处理遮挡、噪点相当敏感 | 对边缘不明显,难提取特征 |
2、HOG特征
2.1 特征提取流程
2.2 图像灰度化
彩色图像一般有3个通道,分别是R(红色)、G(绿色)、B(蓝色),像素取值范围为0-255。灰度图像就只有1个通道。将彩色图像变成灰度图像,通用的灰度化公式为 :gray = 0.3×R + 0.59×G + 0.11× B 。
假设一幅RGB图像为:240×240像素,将它所有像素值组成的向量维度是:(240×240 ×3) 维。灰度化后,其所有像素值组成的向量维度则是:240×240 维,维度为RGB图像的三分之一,这就是灰度化的意义之一。
2.3 图像归一化
图像归一化是为了减少光照等的影响,降低图像局部的阴影,避免在图像的纹理强度中,局部表层曝光较大的情况。归一化的类别有:gamma空间归一化和颜色空间归一化。
标准化的Gamma压缩公式为:
根据不同的效果要求,gamma可取不同的值,常见取值有:1/2、对数等。
2.4 梯度幅值和梯度方向
计算图像横坐标和纵坐标方向的梯度,并根据横坐标和纵坐标的梯度,计算梯度大小和梯度方向。
图像中某个像素点(x,y)的水平方向梯度和垂直方向梯度的计算式分别为:
通过该像素点水平方向梯度和垂直方向梯度计算其梯度大小和方向分别如下:
在算法中,通常利用梯度算子(例如:[-1,0,1])对原图像做卷积运算,得到水平方向(x)的梯度值,再利用转置的梯度算子对原图像做卷积运算,得到竖直方向(y)的梯度值。最后通过上述公式计算该像素点的梯度大小和方向。
典型的梯度算子如下图所示:
梯度横坐标方向算子与纵坐标方向算子
梯度算子可以是多种多样的,例如还可以是[-1,1]、[1,-8,0,8,-1]等等。
2.5 窗口(win)、块(block)、胞元(cell)和箱(bin)
我们首先将灰度图像像素点划分成一个或多个窗口(win),例如划分win的大小为:64*128。一个窗口再分为多个块(block),例如划分block的大小为:16*16。一个块再分为多个细胞单元(cell),例如划分cell的大小为:8*8。
将梯度方向按一定角度分开,通常在0-180度(无向)或0-360度(有向)范围内。例如采用无向的梯度和9个直方图通道,则方向的范围划分为180/9=20度,方向即划分为9个箱(bin),如下图示,有z1 ~ z9共9个bin。
z1 ~ z9的9个bin的值代表该梯度方向上累加的梯度幅值。假如该cell区域中某个像素梯度方向为15°,梯度幅值为2,则在cell梯度向量第1个bin(Z1块)中值加2(不考虑插值)。对每个cell区域内的所有像素按其梯度方向循环累加,得到该cell区域的梯度向量值。
如下图所示:
一个窗口(win)的总HOG特征数为:block总数 × block中特征数,即:
{(window_width / step -1)*(window_height / step -1)} * {num_of_bin * (block_width/cell_width)*(block_height/cell_height)}
例如在前面的例子中:
win: 64x128; block: 16x16; cell: 8x8; 步长: 8; bin个数: 9。
则block总数为:(64/8 - 1)*(128/8 - 1)=105,
那么一个win的总特征数为:105×(9×2×2) = 3780。
2.6 插值
当计算出来的特征向量没能精准的匹配到某个bin上时,也就是说该点的特征向量在多个bin上都能投影,为了准确地该特征点在每个bin上的投影,根据插值的思想得将梯度幅值乘以对应的权重后再累加到相应的bin上。
权值的计算方式,根据图像处理中图像放大算法插值的思想,线性插值如下图所示:
以前面的例子为例,我们将直方图分成了9个直方图通道,方向的范围划分为180/9=20度,对应为9个bin,每个bin为20度。对梯度方向为15°像素点进行处理,通过计算可以得出,该点跟Z1(0~20°)、Z2(20°~40°)块bin最为接近。那么该15°像素点在Z1、Z2块bin上的权值分别为(以Z1、Z2的中心点计算权值):( 30 - 15) / 20 = 0. 75 、( 15 - 10 )/20 = 0. 25 。
同理将原图像的每个像素点跟根据插值的方式计算出权值,然后将像素点的幅值映射到整个bin中,即可完成整个bin直方图统计。
2.7 块内归一化操作
由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步地对光照、阴影和边缘进行压缩,使特征向量空间对光照,阴影和边缘变化具有鲁棒性。具体做法是把各个细胞单元组合成大的、空间上连通的区域(blocks)。这样,一个block内所有cell的特征向量串联起来便得到该block的HOG特征。这些区间是互有重叠的,这就意味着:每一个单元格的特征会以不同的结果多次出现在最后的特征向量中。归一化之后的块描述符(向量)就称之为HOG描述符。
3、SIFT算法
SIFT(Scale-invariant feature transform)特征提取算法,即尺度不变性特征变换,是Lowe在1999年提出的,并于2004年对其进行了完善总结。传统CV算法中,SIFT的应用一直居于榜首,足见其分量。
SIFT算法确立的特征点稳定性很好,不会因为尺度变化、旋转变化、光照的变化、噪音的干扰而受影响,这也是SIFT特征提取算法非常突出的优点。例如下图展示了尺度变化的图片,在左边放大的图片中采用SIFT算法确立的特征点与右边缩小的图片确立的特征点能很好实现匹配。
SIFT算法的实现步骤总的来说可分为两步:特征点检出和特征点描述(类似HOG的过程)。
3.1 特征点检出
SIFT算法的第一步是找到足够多的特征点。主要是用了DoG,就是把图像做不同程度的高斯模糊,平滑的区域一般变化不大,而纹理复杂的比如边缘、点、角之类区域一般变化很大,这样变化很大的点就是特征点。当然为了找到足够的点,还需要把图像放大、缩小几倍来重复这个步骤找特征点。
3.11构建多尺度DoG空间
首先,构建6张图片,分别是原图经不同方差高斯模糊后的图像,方差如下:
经上述方差滤波后,从左到右,图像越来越模糊。
其次,构建DoG图片。DoG图就是由上述经不同方差高斯模糊后的图像相邻两张之差得出。如下图所示,6张经高斯模糊的图片相邻两张之差得到5张DoG图。
SIFT算法解决尺度不变性,就是把上述过程拓展到多分辨率上,下图就是由两种分辨率构成的DoG空间。相同分辨率的照片组成一个尺度空间,每个尺度空间由5张递增高斯模糊处理的照片构成。以此类推,拓展到更多分辨率上时构成了多尺度DoG空间。
3.12 寻找极值点(特征点)
接下来,在多尺度DoG空间中寻找到极致点。怎么找?比较法。一幅DoG图像,让目标点跟它周围的8邻域的8个点比较,并且跟它相邻尺度的DoG图像做三维的空间比较,因此一个目标点总共会同周边26个点比较,如下图。如果目标点经过如此比较后,确实是这26个点中的极大或极小值,就认为该点是图像在该尺寸下的极值点。
按照上述比较法,找到多尺度DoG空间的所有极值点。但这些极值点都是离散的,在离散的空间中,局部极值点可能并不是真正意义上的极值点。因此,采用插值法进一步求得真正的极值点。如下图所示,利用已知的离散空间点插值得到连续空间极值点,通过对尺度空间DoG函数进行曲线拟合,进一步对函数方程求偏导,得到精确的极值点。
此外,还需要删除边缘效应的点。DoG的值会受到边缘的影响,那些边缘上的点,虽然不是斑点,但是它的DoG响应也很强。一旦特征点落在图像的边缘上,这些点就是不稳定的点。一方面图像边缘上的点是很难定位的,具有定位歧义性;另一方面这样的点很容易受到噪声的干扰而变得不稳定,所以要把这部分点删除。我们利用横跨边缘的地方,在沿边缘方向与垂直边缘方向表现出极大与极小的主曲率这一特性。所以通过计算特征点处主曲率的比值即可以区分其是否在边缘上。
3.2 获取特征点描述
检出足够多的特征点后,我们就可以开始计算这些特征点的特征得到对应特征点的描述。这一步和HOG算法类似,即以检出的特征点为中心选16x16的区域作为local patch,这个区域又可以均分为4x4个子区域。对于每一个关键点,都拥有位置、尺度以及方向三个信息。为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照变化、视角变化等等。这个描述子不但包括关键点,也包含关键点周围对其有贡献的像素点,并且描述符应该有较高的独特性,以便于提高特征点正确匹配的概率。
3.21 选取特征点的方向
采集特征点所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。梯度的幅值和方向如下:
在完成特征点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。子区域中各个像素的梯度都可以分到8个bin(类似HOG算法)里面。
梯度直方图将0~360度的方向范围分为36个柱,其中每柱10度。如图所示,直方图的峰值则代表了该特征点处邻域梯度的主方向,即作为该特征点的方向,其他的达到最大值80%的方向可作为辅助方向。
3.22 选取特征点的方向
SIFT描述子是特征点邻域高斯图像梯度统计结果的一种表示。通过对特征点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。
特征描述子与特征点所在的尺度有关,因此,对梯度的求取应在特征点对应的高斯图像上进行。将关键点附近的邻域划分为d*d(Lowe建议d=4)个子区域,每个子区域做为一个种子点,每个种子点有8个方向。
每一个小格都代表了特征点邻域所在的尺度空间的一个像素 ,箭头方向代表了像素梯度方向,箭头长度代表该像素的幅值。然后在4×4的窗口内计算8个方向的梯度方向直方图。绘制每个梯度方向的累加可形成一个种子点。这样就可以对每个特征点形成一个4*4*8=128维的描述子。
4、特征的使用
特征的提取是为了解决问题,计算机视觉的问题分为两个经典类别:分类、回归。
4.1 分类
分类是人脸识别中最常用的一种手段,即特征数据匹配,即在数据库中找到最相似的特征数据,即认为该最相似的特征数据对应的图像与我们要识别的图像最接近,从而判断出人脸图像的ID。
HOG特征通常结合SVM分类器在行人识别中应用效果非常好。将检测窗口中所有重叠的块进行HOG特征采集,并将它们结合成最终的特征向量供分类使用。分类算法常采用SVM分类器SVMLight。
如下图所示:在特征检索匹配时,我们认为同一物体的不同图像是相近的(同一辆车的不同时刻、角度的图像),而同类的物体之间是相近的(都是车的图像)。理想的图像匹配算法应该认为两幅同一物体的图像之间相似度很高,而两幅不同物体的图像之间相似度很低。
4.2 回归
回归问题在计算机视觉中的主要应用是感知出各个目标的位置、语义等信息(环境感知)。是目标检测常用的算法,起到的作用是预测boundingbox的信息。深度学习领域的yolo系列、retinanet等one-state目标检测,以及rcnn系列等two-state目标检测,整体的框架基本上都是特征提取+回归。
当然回归这里所说的特征提取就不仅是前面介绍的HOG、SIFT特征,更多的是深度神经网络输出的特征。
5、总结
特征提取是计算机视觉算法中非常重要的一环,根据解决问题的不同、特征提取的方法也是多种多样。不管是人工特征、传统机器学习、深度学习,本质都是拟合,只是拟合路径的方式不同,由人工设计到可解释拟合到只关心输入输出的自动拟合。
深度神经网络的拟合上限比传统学习的上限高,HOG、SIFT可以视为拟合路径的特定路径,这个特定路径方法有逻辑性。深度网络拟合路径没有限制,通过训练的方式找到合适拟合路径。
也是因为深度神经网络拟合上限很大以及传统机器学习拟合路径可控的原因,在有限数据样本上,传统的机器学习的表现能力有很多方面是强于深度学习的。
交流群
欢迎加入公众号读者群一起和同行交流,目前有美颜、三维视觉、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群
个人微信(如果没有备注不拉群!) 请注明:地区+学校/企业+研究方向+昵称
下载1:何恺明顶会分享
在「AI算法与图像处理」公众号后台回复:何恺明,即可下载。总共有6份PDF,涉及 ResNet、Mask RCNN等经典工作的总结分析
下载2:终身受益的编程指南:Google编程风格指南
在「AI算法与图像处理」公众号后台回复:c++,即可下载。历经十年考验,最权威的编程规范!
下载3 CVPR2021 在「AI算法与图像处理」公众号后台回复:CVPR,即可下载1467篇CVPR 2020论文 和 CVPR 2021 最新论文