基于梯度直方图和Canny边缘检测器的行人检测方法与流程

文档序号:17005689发布日期:2019-03-02 02:01阅读:456来源:国知局
基于梯度直方图和Canny边缘检测器的行人检测方法与流程

本发明涉及一种图像处理技术,特别是一种基于梯度直方图和canny边缘检测器的行人检测方法。



背景技术:

随着人工智能的迅速发展,机器视觉在实际生活中有着越来越广泛的应用。而人体检测算法在自动驾驶,智能监控及灾难环境下的自动搜救等都有着很好的应用前景。人类生活的环境复杂多变,人体也并非固定不变的刚体,相反,人体灵活的构造是人体的形态非常多样。背景环境的复杂多变和人体形态的多样化使得人体检测具有较高的难度。

目前主流的行人检测方法是通过提取人体的特征信息,然后用这些特征信息训练分类器,通过训练好的分类器检测图像中的人体目标。代表性的算法有hog(梯度直方图)特征,lbp(局部二值模式)特征等。此类特征主要是根据人体的轮廓信息,纹理信息等来描述人体形状。当人体存在部分遮挡或者人体偏离直立状态较大时,检测效果明显降低。分类器主要采用svm(支持向量机),adboost等方法。算法深度学习的发展,神经网络算法。但是算法复杂度很高,运算量巨大。

传统梯度直方图行人检测算法中采用离散一阶导数计算图像边缘,提取的边缘较为粗糙,梯度变化不显著的位置,提取的边缘不连续,边缘图像中包含较多噪声,不利于对图像中行人轮廓的准确描述,影响后续的行人检测效果。传统的梯度直方图行人检测算法采用全身的检测方法,行人轮廓特征中垂直特征信息占了很大比重,这使得检测过程中更容易把环境中大量存在的柱状物体误检为行人。



技术实现要素:

本发明的目的在于提供一种基于梯度直方图和canny边缘检测器的行人检测方法,本发明可以准确地描述人体特征信息,并采用分类器检测行人目标并避免由于人体信息部分遮挡造成的漏检。

实现本发明目的的技术方案为:一种基于梯度直方图和canny边缘检测器的行人检测方法,其特征在于,方法包括步骤:

步骤1,对获取的图像一次进行图像灰度化、伽马校正、图像高斯滤波的处理;

步骤2,利用canny边缘检测器提取图像的边缘信息,计算图像中的梯度直方图信息,得到描述行人特征的特征向量;

步骤3,利用包含人体头肩部分的正样本和不包含人体头肩部分的负样本训练支持向量机分类器;

步骤4,利用训练得到的分类器对所有图像的局部窗口进行检测并判断窗口中是否存在人体头肩目标。

本发明与现有技术相比,具有以下优点:(1)本发明提出的方法使用canny边缘检测器,在计算边缘图像的过程中,该检测器能够检测到更精细的图像边缘,边缘信息更完整,高斯滤波器减小了高频噪声的干扰,因此对行人轮廓描述更准确,从而提高了行人检测的效果;(2)本发明提出的方法采用人体头肩部分的局部检测方法,只检测行人头肩部分,人体头肩部分的特殊的轮廓形状更具有代表性,能够降低误检的概率;人体头肩部分能够保持相对稳定的形状,即使行人不是出于直立状态或者存在部分遮挡,也有可能检测到行人。因此本发明提出的方法能够提高检测率。

下面结合说明书附图对本发明作进一步描述。

附图说明

图1位本发明基于梯度直方图和canny边缘检测器的行人检测方法的流程图。

图2(a)是原始图像;图2(b)是传统hog算法中的边缘检测器的边缘检测效果;图2(c)是本发明方法中canny边缘检测器的边缘检测效果。

图3是本发明方法中训练所建立的正样本库中部分样本。

图4是本发明方法的训练流程。

图5是本发明方法的检测流程。

图6(a)是本发明方法的部分正确检测结果;图6(b)是本发明方法的部分漏检结果;图6(c)是本发明方法的部分误检结果。

图7是传统梯度直方图算法和本发明方法样本检测效果的统计结果。

具体实施方式

一种基于梯度直方图和canny边缘检测器的行人检测方法,包括以下步骤:

步骤1,获取图像,对图像进行预处理,分别是伽马校正,图像灰度化,图像高斯滤波,较少光照,噪声对检测结果的影响。

对图像进行灰度化将图像从rgb彩色空间转换到灰度空间,便于后续的滤波处理,同时也减少了计算量。

利用伽马校正把图像的灰度映射到亮度变化较小的范围,以减少图像光照不均匀对检测结果的影响,图像灰度空间的映射关系为:

fγ(x,y)=c·fγ(x,y)

其中fγ(x,y)为转换后的图像,f(x,y)表示灰度图像,c和γ为常数,本发明中c=1,γ=0.5。

边缘提取中涉及对噪声敏感的离散一阶导数,因此采用高斯低通滤波器滤除高频噪声,减小图像中高频噪声对真实边缘提取的干扰。高斯滤波通过高斯函数与图像卷积实现:

fg(x,y)=g(x,y)*fγ(x,y)

其中,fg(x,y)表示平滑后的图像,*为卷积运算符号,g(x,y)为高斯函数,σ为高斯函数的标准差。

步骤2,利用canny边缘检测器提取图像的边缘信息,计算图像中的梯度直方图信息,得到描述行人特征的特征向量。

利用图像中每个像素左右相邻,上下相邻像素分别计算该像素在x、y方向的梯度,得到x、y方向的梯度图像gx(x,y)、gy(x,y):

gx(x,y)=fg(x+1,y)-fg(x-1,y)

gy(x,y)=fg(x,y+1)-fg(x,y-1)

其中gx(x,y)、gy(x,y)分别是x、y方向的梯度图像。

非最大值抑制,取出图像中的一点o,点o在梯度幅值图像m(x,y)中的梯度幅值为mo,在梯度方向图像α(x,y)中对应的梯度方向为αo。过o点作一条直线,该直线与o点的八邻域点形成的矩形相交于a、b两个亚像素点。利用与a、b点相邻的o点的八邻域点进行线性插值,计算得到两个亚像素点的值ma和mb。比较中心点像素mo与两个亚像素点ma和mb,若mo>ma和mo>mb同时成立,则保留为边缘像素;否则为孤立点,舍弃该像素。对梯度图像中所有像素点执行上述操作,就得到非最大抑制后的图像gm(x,y)。

双阈值分割,设置一个高阈值,一个低阈值,对非最大抑制后的图像进行分割。若像素值大于高阈值,保留像素值,否则置为零,得到高阈值梯度图像;若像素值大于低阈值但小于高阈值,保留像素值,否则置为零,得到低阈值梯度图像。计算如下:

其中gh(x,y)为高阈值图像,gl(x,y)为低阈值图像,th为高阈值,tl为低阈值,高阈值是低阈值的三倍。

图像边缘连接,高阈值图像gh中的非零像素点是确定的边缘点,定义为强像素点,低阈值图像gl中的非零像素点是不确定的边缘点,定义为弱像素点。取高阈值图像中的一个强像素点,判断与该点位置相对应的低阈值图像的像素点的八邻域是否存在弱像素点,若存在,则把存在的弱像素点置为强像素点,然后重复上述操作,否则置为零。然后在高阈值图像中取下一个强像素点,重复上述操作,直到遍历整幅图像。最后把低阈值图像中的强像素加入高阈值图像中,得到最终的边缘梯度图像g(x,y),方向梯度图也相应地保留对应的像素点,得到梯度方向图α(x,y)。

统计图像的梯度直方图,计算图像特征向量。步骤如下:

首先把0~180°空间方向均匀地划分到9个方向,然后采用固定大小的滑动窗口遍历梯度方向图,把滑动窗口内像素的梯度方向统计到这9个方向。统计到这9个方向是为了获得区域内边缘的整体走向,将边缘信息量化为特征向量。

利用固定大小的块滑动遍历窗口,每个块被分为四个单元,对每个单元进行梯度直方图的统计投票。投票的值为对应的梯度幅值,权重由像素点的位置坐标和梯度方向决定。将四个单元中统计的梯度直方图综合得到一个36维的特征向量,当块遍历了整个窗口,就得一个更高维数的向量。归一化该向量,就得到了特征向量。重复上面的步骤,窗口遍历整幅图像,就得到了所有窗口的特征向量。统计指的是梯度直方图通过统计梯度方向得来的,这36维的特征向量包含这个块内梯度方向的信息的统计分布,即反映了该区域内边缘的整体走向。一个检测窗口中所有块的特征向量组合为一个高维向量。

每个单元的边界位置与相邻的单元也有像关性,只利用当前单元的像素计算梯度直方图而忽略其与相邻单元之间的关系,就会产生区域混叠效应,这会使后面计算的特征向量产生突变。因此需要用权重来修正结果。对块的每个单元设置权重,以消除混叠效应,具体方法为:

步骤s101,设一个像素的坐标为(x,y),像素点(x,y)所在单元的中心像素点为(x1,y1),像素点(x,y)的梯度方向为θ,θ位于θ1和θ2两个方向之间,其中θ1<θ2;

步骤s102,像素点(x,y)向四个单元投票的位置权重分别

其中,dx和dy分别为单元的长度和宽度;

步骤s103,θ1方向的投票权重为θ2方向的投票权重为

步骤3,利用包含人体头肩部分的正样本,不包含人体头肩部分的负样本训练支持向量机分类器。

制作正负样本图像,裁剪数据库中的正训练样本,只保留人体的头肩部分,将其作为正样本。对数据库中的负训练样本,随机进行裁剪,得到的负样本。

把正负样本分别标上“1”和“0”标签,按照步骤(3)提取正负样本的特征向量,组合形成一个特征矩阵,正负样本的标签相应地组成一个对应的矩阵,把两个矩阵输入到支持向量机,训练得到一个分类器,该分类器即为初步的分类器。

利用初步的分类器检测负样本训练负样本,分类错误的样本,被视为困难样本,将其保存作为困难样本。

将困难样本标上“0”的标签,加入到负样本中,然后利用支持向量机再次训练分类器,得到最终的分类器。

步骤4,训练得到的分类器检测图像的局部窗口,判断窗口中是否存在人体头肩目标,遍历整个图像,获得最终结果。

由于图像中行人的尺寸并不固定,需要对输入图像进行多尺度变换,建立具有不同分辨率的图像金字塔:

{i1,i2,i3,...,in}

其中in为不同分辨率的图像。

对每个尺度的图像,利用步骤(2)计算图像的特征向量,然后利用步骤(3)训练得到的分类器进行计算并判断:

s=j1×m×km×1

其中j1×m为窗口内的m维的特征向量,km×1为m维的分类器,t为检测阈值。

完成图像中所有窗口的计算,就得到了初步检测结果。

最后为了避免同一个目标的重复检测,对初步检测的结果进行方框聚类,即通过检测到的目标位置的相似度,合并得到单个检测框,即得到了最终的检测结果。

下面结合本发明的仿真实例对本发明做进一步的说明。

本发明使用opencv3.3,visualstudio2013编译环境,windows764位操作系统,酷睿i32.4ghz的cpu,4g内存实验环境。测试样本为inria样本库中的测试样本。本文的检测标准为检测结果的包围盒与标记的包围盒之间重叠的面积大于等于50%即可视为成功检测到目标。

如图1所示,第一步对输入图像进行gamma校正,从而减少外界光照强度的变化对边缘检测过程产生干扰。然后利用canny算子计算图像的梯度图像,梯度图像包括梯度幅值图像和梯度方向图像。之后对梯度图像每个检测窗口大小的区域进行方向梯度直方图统计,统计的结果即表示该窗口内的轮廓特征信息。为了便于统一标准,需要对方向梯度直方图归一化,得到最终的特征向量。最后通过svm分类器的分类计算得出各窗口中是否有人的检测结果,综合所有窗口的结果,就得到了最终整幅图像的检测结果,并标记出来。

图2(a)是原始图像。图2(b)是传统hog算法中的边缘检测器的边缘检测效果。图2(c)是本发明方法中canny边缘检测器的边缘检测效果。

由图2可以看出canny边缘检测器提取的边缘比传统hog算法中的边缘检测器的效果要好得多。首先canny算法检测的边缘有更少的噪声,传统hog算法中的边缘检测器检测到的边缘则有较多的噪声。另外从人体轮廓边缘的效果上来看,传统hog算法中的边缘检测器的检测结果在手臂,肩部,腿部位置的线条较多间隙,某些轮廓处的线条甚至已经消失了,而canny算法的边缘线条更加完整,可以清晰地描绘出人体轮廓。

图3是本发明方法中训练所建立的正样本库中部分样本。本发明以法国inria研究所的行人检测数据库为原始数据库,建立了自己的人体头肩样本库。该样本库包含1394个正样本和1218个负样本,正负样本的尺寸均为64ⅹ64,其中正样本由inria的训练正样本剪切得到,负样本则是对inria的训练负样本随机剪切得到。

如图4所示,分类器的训练流程如下:第一步对正样本和负样本提取特征向量,所有向量组成一个二维的特征向量矩阵,所有样本的标签组成一个一维的矩阵,正样本的标签为用“1”表示,负样本的标签用“0”表示。将这两个矩阵输入支持向量机训练,得到一个分类器,用该分类器去检测负样本,会在负样本中检测到目标,这些检测到的结果极为困难样本,把困难样本加入到训练样本中,再次训练,就得到了最终的训练参数。

图5展示了行人检测的过程。首先要对图片进行多尺度变换,然后在不同尺度下实现检测,检测结果必然有同一个目标的重复检测,所以把最终的检测窗口进行合并,得到最终的检测结果。

图6展示了部分样本的检测结果。

图7为传统hog算法和本发明方法测试效果的统计。本发明方法采用

inria数据库中的测试样本进行了测试,测试样本包括288张带有人的图片,其中共标记了589个正样本目标。为了更好评价算法,我们绘制了漏检率(1-召回率或假阴性/(假阴性+真阳性))和每张图片里的误检数(fppi)的双对数曲线。从图中可以看出,本发明的方法的准确率要高于传统hog算法。当fppi为1时,本发明方法的漏检率要比hog算法低6.1%。这是由于本发明方法采用的边缘检测准确,并且采用局部检测。准确的边缘提高了检测到行人的概率,局部检测降低了误检的概率。

表1展示了本发明方法和传统hog算法的检测过程的运行时间。以640ⅹ480的图片作为检测样本。表中列出了5组运行时间和平均时间,可以看出本发明方法和传统hog算法耗时基本相同,即本发明方法没有增加检测的复杂度。所以满足实时性要求。

表1

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1