前言 随着深度学习方法的流行,很多人对传统方法一无所知。然而传统方法仍然非常重要,这里介绍两个提取特征的传统方法--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可以视为拟合路径的特定路径,这个特定路径方法有逻辑性。深度网络拟合路径没有限制,通过训练的方式找到合适拟合路径。

也是因为深度神经网络拟合上限很大以及传统机器学习拟合路径可控的原因,在有限数据样本上,传统的机器学习的表现能力有很多方面是强于深度学习的。

本文仅做学术分享,如有侵权,请联系删文。

3D视觉精品课程推荐:

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列、手眼标定、相机标定、激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

HOG和SIFT图像特征提取简述相关推荐

  1. 图像金字塔(pyramid)与 SIFT 图像特征提取(feature extractor)

    David Lowe(SIFT 的提出者) 0. 图像金字塔变换(matlab) matlab 对图像金字塔变换接口的支持(impyramid),十分简单好用. 其支持在reduce和expand两种 ...

  2. 经典算法研究系列:图像特征提取与匹配之SIFT算法

     尺度不变特征转换(Scale-invariant feature transform 或 SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置 ...

  3. 图像特征提取与匹配之SIFT算法

    推荐阅读: David G. Lowe, "Distinctive image features from scale-invariant keypoints,"  Interna ...

  4. 经典算法研究系列:九、图像特征提取与匹配之SIFT算法

    经典算法研究系列:九.SIFT算法研究 作者:July.二零一一年二月十五日. 推荐阅读: David G. Lowe, "Distinctive image features from s ...

  5. 机器视觉特征提取:HOG、SIFT、SURF、ORB、LBP、HAAR

    来源:机器学习AI算法工程 本文约6200字,建议阅读10+分钟 本文为你介绍不同的机器视觉特征提取方法及其区别. 目录 一.SIFT(尺度不变特征变换) 二.HOG(方向梯度直方图) 三.SIFT和 ...

  6. 图像特征提取算法—HOG

    图像特征提取算法-HOG 一 图像基本概念 1.1特征 边缘,角,区域.但不同的目的对应着的不同的特征,边缘特征,颜色特征,梯度方向分布等. 每个物体,我们总可以用一些词语或部件来描述它,比如人脸的特 ...

  7. Python人脸图像特征提取(HOG、Dlib、CNN方法)

    Python人脸图像特征提取(HOG.Dlib.CNN方法) 一.HOG人脸图像特征提取 1.HOG特征: 1) 主要思想: 2) 实现方法: 3) 性能提高: 4) 优点 2.HOG特征提取算法的实 ...

  8. 图像特征提取与匹配——SIFT算法

    图像特征提取与匹配--SIFT算法 尺度不变特征转换(Scale-invariant feature transform 或 SIFT)是一种用来侦测与描述影像中局部性特征的算法,它在空间尺度中寻找极 ...

  9. matlab vlfeat hog,vlfeat-0.9.20-bin 特征提取的工具包,实现各种 ,如hog,lbp,sift. matlab 242万源代码下载- www.pudn.com...

    文件名称: vlfeat-0.9.20-bin下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 17828 KB 上传时间: 2015-07-21 下载次数: ...

最新文章

  1. Data guard概念篇一(转载)
  2. as工程放到源码编译_UE4 Program 类型工程的限制和解决方法
  3. java爬虫面试题_使用Java实现网络爬虫
  4. C语言18个经典问题答录
  5. HTML5新增的主体结构元素
  6. 13 python初学(函数)
  7. ASP.NET教程11
  8. 学好Linux决心书
  9. 简单FTP服务器(ccd) v1.0
  10. .jar文件无法运行的解决方法
  11. python get函数 i_Python高阶技巧,你 GET了吗?
  12. Win10 解决端口占用问题
  13. 高等数学(第七版)同济大学 总习题六 个人解答
  14. 小米原装系统镜像列表
  15. 2022保研经验帖——吉大、华师、浙大、中大、南航/理、东南、南开等
  16. 树莓派(Raspberry pi) 使用Pi Imager安装烧录操作系统
  17. ANSYS Electronics Suite 2021 R2
  18. 量化交易入门阶段:好事要成双——双均线策略
  19. Linux下软连接的概念
  20. ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi

热门文章

  1. Mac iStat Menu 注册码
  2. 各个数据库取前10行记录
  3. django学习笔记1
  4. reentrantlock 使用
  5. 为什么数据库连接池不采用IO多路复用?
  6. SpringBoot巧用 @Async 提升API接口并发能力!
  7. 深入浅出 MyBatis 的一级、二级缓存机制
  8. Netty 如何做到单机秒级接收 35 万个对象?
  9. 前百度员工失业太久求鼓励!网友:我也曾失业多时!坚持就是胜利!
  10. 妥~阿里程序员常用的 15 款开发者工具