文章目录[隐藏]
一. 概述
这里主要记录自己的一些感悟,不是很系统。想要详细系统的理论,请参考文末的《图像处理之特征提取》。
个人不是专业cv工程师,很多细节没有深究,描述可能不严谨。
在总结物体检测算法之前先把基础的特征点理论整理一下。
二. HOG
求取前先灰度化然后Gamma校正,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰。
HOG主要捕获轮廓信息。统计每个cell的梯度直方图,然后若干个cell直方图组成一个block的descriptor。所有block组成整幅图片的descriptor。
这里注意,同一个block之间的cell之间像素不重叠,但是不同的block之间回有像素重叠。其实每个block更像是一个滑窗,滑窗的步长一般小于block边长。
滑窗和block关系参考下图(图中的cell是8X8,每4个cell组成一个block,水平和垂直上的滑窗步长都是8):
那么一个图像的HOG特征维数是多少呢?
这段计算来自参考资料中的《目标检测的图像特征提取之(一)HOG特征》
把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。最后将所有块的特征串联起来,就得到了人体的特征。例如,对于64X128的图像而言,每16X16的像素组成一个cell,每2X2个cell组成一个块,因为每个cell有9个特征,所以每个块内有4X9=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64X128的图片,总共有36X7X15=3780个特征。
注意
上面举例说的是64X128图像对应的HOG特征。但是64X128可能是一个更大图片的滑动窗口,这个滑动窗口用于物体检测,比如:
由于大滑动窗口之间是由很多重合的,所以opnecv里实现HOG的时候使用了很高明的缓存技术加速计算过程。
特点
对图像几何的和光学的形变都能保持很好的不变性,适合检测行人这种居于有一定刚性的物体,可以容许行人有一些细微的肢体动作。
缺点也有,计算量大,无法处理遮挡。
一个检测行人的效果图:
三. SIFT
SIFT特征提取的实质
在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出、不会因光照、仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。
构造过程
通过构建高斯金字塔,保证图像在任何尺度都能有对应的特征点,即保证尺度不变性。为了实现旋转不变性,需要根据检测到的关键点的局部图像结构为特征点赋值。具体做法是用梯度方向直方图。
关键点描述子不但包括关键点,还包括关键点周围对其有贡献的像素点。为了保证旋转不变性,要以特征点为中心,在附近领域内旋转θ角(即旋转为特征点的方向),然后计算采样区域的梯度直方图,形成n维SIFT特征矢量(如128-SIFT)。特征向量形成后,为了去除光照变化的影响,需要对它们进行归一化处理。
下图演示的是旋转到特征点的主方向:
下图演示的是求取128维梯度向量:
最终每个关键点的值分为几部分:位置(xy坐标)、尺度(高斯参数)、主方向、和方向梯度描述子(128维)
SIFT特征提取的优点
下面3段主要来自《图像处理之特征提取》
- SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;
- 独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;
- 多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;
- 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;
- 可扩展性,可以很方便的与其他形式的特征向量进行联合;
- 需要较少的经验主义知识,易于开发。
SIFT特征提取的缺点
- 实时性不高,因为要不断地要进行下采样和插值等操作;
- 有时特征点较少(比如模糊图像);
- 对边缘光滑的目标无法准确提取特征(比如边缘平滑的图像,检测出的特征点过少,对圆更是无能为力)。
SIFT特征提取可以解决的问题:
目标的自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别跟踪的性能。而SIFT算法在一定程度上可解决:
- 目标的旋转、缩放、平移(RST)
- 图像仿射/投影变换(视点viewpoint)
- 光照影响(illumination)
- 目标遮挡(occlusion)
- 杂物场景(clutter)
- 噪声
改进
近来不断有人改进,其中最著名的有 SURF(计算量小,运算速度快,提取的特征点几乎与SIFT相同)和 CSIFT(彩色尺度特征不变变换,顾名思义,可以解决基于彩色图像的SIFT问题)。
应用
SIFT可用于3维地图重建、图片矫正、全景拼接等
SIFT / HOG 比较
共同点
都是基于图像中梯度方向直方图的特征提取方法
不同点
SIFT提取的关键点是角点(个人理解:应该是角点+梯度直方图),HOG提取的是边缘特征。
SIFT 特征通常与使用SIFT检测器得到的兴趣点一起使用。这些兴趣点与一个特定的方向和尺度相关联。通常是在对一个图像中的方形区域通过相应的方向和尺度变换后,再计算该区域的SIFT特征。
结合SIFT和HOG方法,可以发现SIFT对于复杂环境下物体的特征提取具有良好的特性;而HOG对于刚性物体的特征提取具有良好的特性。
四.其它传统特征提取的方法
4.1 SURF
前面提到SITF的缺点是如果不借助硬件加速或专门的图像处理器很难达到实现,所以人们就要想办法对SITF算子进行改进,SURF算子便是对SIFT的改进,不过改进之后在算法的运行时间上还是没有质的飞跃。后面要介绍的ORB特征描述算子在运行时间上才是一种质的飞跃。
SURF最终生成的特征点的特征向量维度为64维。
4.2 ORB
ORB特征描述算法的运行时间远优于SIFT与SURF,可用于实时性特征检测。ORB特征基于FAST角点的特征点检测与描述技术,具有尺度与旋转不变性,同时对噪声及透视仿射也具有不变性
ORB特征检测主要分为以下两个步骤:
- 方向FAST特征点检测: FAST角点检测是一种基于机器学习的快速角点特征检测算法;
- BRIEF特征描述: BRIEF描述子主要是通过随机选取兴趣点周围区域的若干点来组成小兴趣区域,将这些小兴趣区域的灰度二值化并解析成二进制码串,将串特征作为该特征点的描述子,BRIEF描述子选取关键点附近的区域并对每一位比较其强度大小,然后根据图像块中两个二进制点来判断当前关键点编码是0还是1.因为BRIEF描述子的所有编码都是二进制数的,这样就节省了计算机存储空间。
4.3 LBP
LBP(Local Binary Pattern),局部二值模式是一种描述图像局部纹理的特征算子,该算子是由T.Ojala等人于1994年首次提出的,后经过发展改进可应用于图像特征分析,该算子具有旋转不变性与灰度不变性(不怕光照变化)等显著优点。
LBP特征描述的是一种灰度范围内的图像处理操作技术。LBP特征是高效的图像特征分析方法,经过改进与发展已经应用于多个领域之中,特别是人脸识别、表情识别、行人检测领域已经取得了成功。
LBP牲征将窗口中心点与邻域点的关系进行比较,重新编码形成新特征以消除对外界场景对图像的影响,因此一定程度上解决了复杂场景下(光照变换)特征描述问题。
LBP算法根据窗口领域的不同分为经曲LBP和圆形LBP两种。下面分别介绍:
经典LBP
经典LBP的算子窗口为3×3的正方形窗口,以窗口中心像素为阈值,将其相邻8领域像素灰度与中心像素值比较,若中心像素值小于周围像素值,则该中心像素位置被标记为1,否则为0(显然这种规则下,对于中心点大于或等于这两种情况,算法无法区分,后续经过改进引入LBP+与LBP-因子用来区分这两种情况)。图像经过这种遍历操作后,图像就被二值化了,每一个窗口中心的8邻域点都可以由8位二进制数来表示,即可产生256种LBP码,这个LBP码值可以用来反映窗口的区域纹理信息。LBP具体在生成的过程中,先将愿意图像划分为若干个子区域,子区域窗口可根据原图像的尺寸进行调整,而不一定非得为3×3的正方形窗口。一般对于512×640的图像,子区域窗口区域选取大小为16×16.
圆形LBP
经典LBP用正方形8-领域来描述图像的纹理特征,其缺点是难以满足不同尺寸和频率的需求。Ojala等人对经典LBP进行了改进,提出了将3×3的正方形窗口领域扩展到任意圆形领域。由于圆形LBP采样点在圆形边界上,那么必然会导致部分计算出来的采样点坐标不是整数,因此这里就需要对得到的坐标像素点值进行处理,常用的处理方法是最近邻插值或双线性插值。
放一张SIFT/HOG/LBP优缺点、适用范围对比图:
4.4 HAAR
人脸检测最为经典的算法Haar-like特征+Adaboost。这是最为常用的物体检测的方法(最初用于人脸检测),也是用的最多的方法。
- 训练过程: 输入图像->图像预处理->提取特征->训练分类器(二分类)->得到训练好的模型;
- 测试过程:输入图像->图像预处理->提取特征->导入模型->二分类(是不是所要检测的物体)。
Haar-like特征是很简单的,无非就是那么几种,如两矩形特征、三矩形特征、对角特征。后来,还加入了边缘特征、线特征、中心环绕特征等。使用积分图可以加速计算特征。最后,使用集成的方法Adaboost进行训练。
上图中两个矩形特征,表示出人脸的某些特征。比如中间一幅表示眼睛区域的颜色比脸颊区域的颜色深,右边一幅表示鼻梁两侧比鼻梁的颜色要深。
特征模板可以在子窗口内以“任意”尺寸“任意”放置,每一种形态称为一个特征。
个人理解:
- HAAR特征只是使用特征模板,计算图像颜色的深浅模式,模板以不同的大小和位置在子图像中滑动,计算出特征值来,交给boost分类器。其实HAAR与LBP还是有点像的,都是灰度差。
- HAAR计算的模式也决定它对旋转没有很好的适应性
总结
我觉得以上特征中主要分为两类:点和面
点
SIFT、SURF、ORB提取的是关键点的信息,可以用于表示某些图像的细节(或者指纹)。这几个特征可用于图像匹配和3维建模等算法。
面
HOG、LBP、HAAR提取的是面的信息,可以表示一块区域是什么样的,所以这几个特征可以用于人脸、人体等物体识别。
其中HAAR特征不是很好可视化,另外两种都可以比较容易的可视化出来。
参考资料
- 一个比较好的概述,本文的主要来源:图像处理之特征提取
- HOG计算介绍:目标检测的图像特征提取之(一)HOG特征
- HOG参数简介及Hog特征维数的计算
- 这里基本把HOG的计算过程说明白了:opencv源码解析之(6):hog源码分析
- SIFT主要图片来源:sift特征提取算法
- 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现
- 浅析人脸检测之Haar分类器方法
- Haar特征与积分图
- 利用积分图像法快速计算Haar特征
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuanlulu/article/details/82148429
暂无评论