基于帧间差分算法的运动目标检测方法研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、绪论
视觉是人类感受周围复杂环境变化最直接有效的手段之一。随着计算机和电子技术的普及,诸如视频和图像的各种数字视觉数据急剧增加。面对日益增多的视觉数据,光靠人眼是辨别不过来的。这时我们就需要用计算机视觉的方式来自动识别。由此同时我们就需要在此基础上提出相应的目标检测技术,这种目标检测就是在物体运动的同时同步检测运动目标,这是实时检材中检测手段,可以将其目标检测信息提取出来。
几十年来专家学者坚持不懈刻苦钻研,目标检测方面收获了丰硕的成果,截止目前,关于该研究较为权威的期刊杂志包括 PAML ,IVC;召开的相关会议有ECCV;也有在这方面颇有建树的个人研究比如说;Gibson提出的光流法,以后的学者在他的基础上实施并且进一步完善了该方法;Jain等人踩在前人研究的基石,提出了帧差法,并且实施了具体论证实验,对此方法加以强化佐证;高凯良针对于运动车辆的锁定研究了相应的检测方法;吴君钦主张适用的移动目标检测算法涉及邻近五帧差值算法与背景结合消除算法,上述算法能较好适用于静态背景下的目标检测。以上介绍了很多种有关目标检测技术的算法,然而没有任何一种算法适用于所有情况下的运动目标检测。因此,运动目标检测的关键在于:如何根据现有的相关理论知识,结合具体场景的特点,寻找合适的方法,从而满足实际应用的需求。
二、目标检测理论基础
(一)目标检测概述
目标检测需要的一般操作是:(1)检测当前图像中是否具备待测目标。(2)关于待测目标的具体位置应该明确。一个好的目标检测算法的需要解决实时性和可靠性两个基本问题。目标检测方法大概可以分为两大类,即对已知运动目标的检测和对未知运动目标的检测。对已知运动目标来说主要应用于对检材样本的分析方面,对未知运动目标来说主要运用于视频监控方面的检测等。行业中最为普遍使用的方法包括相邻帧差法,背景消除法,mean-shift法[1]。
(二)灰度化
灰度图像是一种特殊的彩色图像,其中R,G,B三基色的色彩分量全部相等。图像中的每个像素的数值则是由1个字节,即8位数据显示的。彩色图像经过灰度处理形成灰度图像,这一过渡调节过程即为灰度化处理。由于彩色图像中具有大量的像素值,且这些数值之中都包含有R,G,B三个基色分量,而每个分量的取值有255种,基于此每个像素点则含有255*255*255种取值范围[2]。而灰度图像是一种特殊的彩色图像,因为这种图像R,G,B三个分量相等这一属性。因此在目标检测过程中,为降低图像运算的复杂度,减少信息处理量,普遍地的做法
是需要先将大量格式不一的图像统一转化为灰度图像,使得图像的计算量大大缩减,这样操作之后,虽然灰度图像与彩色图像色彩不同,但两者都可以就图像的特征信息精准反映。图像灰度化处理可用四种方法来实现:
(1)最大值法:
(2)平均值法:
(3)加权平均法:
Matlab中可以使用自带rgb2gray函数对目标边缘检测,用法如下:
I=rgb2gray(img);
其中img为RGB图像;I为灰度化后的图像。
(三)二值化
二值图像,按名字来理解只有两个值,0和1, 0表示背景,而1表示前景。图像二值化的原理是:先设置适当的阈值将灰度图像划定为目标跟背景两部分。阈值的划定标准则要求要在最大限度的保存数据信息的同时,将背景和噪声干扰限制到最小范围。图像灰度级的变化并不会影响整体图像的特征信息。因此,在目标检测中,为便于存储以及提高运算速度,我们常常将灰度图像转化为二值图像。图像二值化可用三种方法来实现:
方法一:固定阈值
设置阈值T并逐个扫描图像的像素值,像素值为0则将意味着数值小于T,像素值设置为255则意味着其数值大于或等于T。阈值T是一种动态区域选择,不同图像阈值的选择需要定量分析;
方法二:像素平均值
计算图像像素的平均值K,将K设置为阈值对图像分割;
方法三:灰度直方图
首先绘制图像灰度直方图,然后统计像素值找到图像的两个最高峰,最后确定两个峰值之间的最低峰谷值作为阈值。
Matlab中对图像进行二值化处理操作借助 im2bw函数,用法如下:
BW=im2bw(I,level);
其中I为灰度图像;BW为二值图像;参数level是一个介于0-1之间的参数,也就是图像分割的阈值,默认情况下,它的取值为0.5。
(四)形态学处理
噪声作为一种影响因素,会导致被实施二值化操作后的图像出现许多异常突出的小区域和小缝隙,形态学观点的引入恰好克服了这一麻烦。它借助腐蚀、膨胀、开启、闭合等基本运算手段,实现了开运算提取运动目标,腐蚀运算消除异常突出的区域,膨胀运算充斥填实缝隙。
1.腐蚀
A为原始图像,B为结构元素,A被B腐蚀的过程如图1所示:
图中阴影部分为A被 B腐蚀的结果。阴影部分包含在A的范围之内且比A小,看起来A像是被剥掉了一层[3]。Matlab中可以使用自带imerode函数对图像腐蚀,用法如下:
bw1=imread(‘…’);
se=strel(‘line’,10,90);
bw2=imerode(bw,se);
其中bw1为二值图像;se为生成的结构元素;bw2为腐蚀后的图像。
2. 膨胀
A为原始图像,B为结构元素,A被B膨胀的过程如图1所示:
A被B膨胀的结果为图中阴影部分。阴影部分包括A的所有范围且比A大,看起来A像是膨胀了一圈。Matlab中
可以使用自带imdilate函数对图像腐蚀,用法如下:
bw1=imread(‘…’);
se=strel(‘line’,10,90);
bw2=imdilate(bw,se);
其中bw1为二值图像;se为生成的结构元素;bw2为膨胀后的图像。
3. 开启
开启就是对图像先进行腐蚀操作然后再对图像进行膨胀操作[4],它有以下特点:
(1)开启运算可以用来消除孤立的小点;
(2)通过不同大小的结构元素来进行开启运算,得到的效果也会不同;
(3)Matlab中使用imopen函数对图像进行开启操作。
4. 闭合
闭合就是对图像先进行膨胀操作然后再对图像进行腐蚀操作[5],它有以下特点:
(1)闭合运算可以用来封闭小裂缝;
(2)通过不同大小的结构元素来进行闭合运算,得到的滤波效果也会不同;
(3)Matlab中使用imclose函数对图像进行开启操作。
三、帧差法基本原理
(一)相邻帧差法
相邻帧差法的原理是对视频图像进行差值运算,针对图像视频的邻域的帧值去实现差值获得图像轮廓。具体操作是:首先计算出第k帧与第k-1帧图像之间的差值会得到差分图像Dk,继而对Dk实施二值化处理,最后凭借滤波处理或数学形态学运算获取图像。
相邻帧差法有以下优点:(1)能够方便应用在实时系统中,算法比较简单,运算速度较快;(2)相邻帧之间由于间隔误差太小,光照时间或者光照强度都大体一致,这就使得我们可以排除环境因素。
相邻帧差法存在的问题:(1)由于邻近帧值之间时间缝隙过短,同一运动目标的在邻近帧逐之间会有一定重复,但这种重复部分检测相当困难,只能检测出前后两帧中目标的在各自帧中没有重复部分,提取出的目标会在运动方向上前后拉长;(2)物体有时移动速度较快,就会出现在同一个待测区域中同时出现两个检测目标,这其中一个检测目标属于伪目标,属于模糊检测。(3)当运动目标颜色与背景颜色二者相类似时,极有可能在目标的内部产生缝隙。其具体运行如图3所示:
(二)三帧差法
三帧差法是在两帧差分法的基础上改进得到的,这是由于两帧差法适用对象具有局限性,只能检测运动目标较为缓慢的场景。但当运动速率提高时,检测目标对象由于在邻近两帧区域的位置差异变大,图像邻近帧之间通过差值计算后未必会得到完整的运动目标,在这种环境三帧差法应用而生。
三帧差法和相邻帧差法的原理大体类似,但它们两者差异也很明显。移动速度较快的目标检测更侧重于三帧差法的适用范围之内,这样可以优化运动物体的轮廓。但三帧算法也有一定程度的缺:即会受到背颜色的影响,当运动目标的颜色与背景颜色相同或者类似是,就会在目标图像的内部生成误差缝隙
。
三帧差法的实现:
(1)前两帧图像按位相减得到图像1;
(2)后两帧图像按位相减得到图像2;
(3)对图像1和图像2按位进行“与”操作得到图像3;
(4)对图像3形态学处理以完善图像轮廓信息;
(5)得到运动目标。
其流程图如图4所示:
四、改进的三帧差法
(一)算法的基本流程
在我们原本使用的三帧差分法中,涉及的一个主要的数据选择就是阈值T。阈值T的选择关系到图像噪声参数对实验检测结果的影响。假设提供的阈值T过小,则无法有效消除差分图像产生的背景噪声;假设提供的阈值T过大,则又可能会将图像中移动目标的数据信息掩藏,无法充分显示有效信息导致实验混乱,并且一般来说阈值T也无法正常适应场景中光线变化等情况[6]。基于上述问题,研究者发现传统的三帧算法已经不能满足现在目标的精准检测,所以有关学者提出可以结合边缘检测与自适应阈值,去改进传统的三帧差法。
改进的三帧算法具体实施办法是:对图像相邻三帧像素分别运用Sobel算子去实施边缘检测,接着对前两帧图像按顺序做差值运算得到图像1,后两帧图像按顺序做差值运算得到图像2;最后对提取到的图像1和图像2进行逻辑与运算[7],或者借助数学形态学运算,滤波操作获取最终目标图像。其具体运行过程如图5所示:
(二)边缘检测
边缘主要存在于目标与目标,目标与背景之间。在数字图像中,使得图像像素值发生骤变的区域都可以统称为边缘区域。边缘与边界,边缘轮廓这几者之间含义不同,虽说有相似之处,但也并非可以混为一谈。边界特指区域中全部像素的集合。而边缘有界定条件为前提,换句话说就是只有当一幅图像是二值图像时,边缘与边界才可相提并论。而对于轮廓而言,轮廓则表示的是物体的所有边界,是由许多个边缘点接连拼构而成完整的形状。
由于人眼的特殊视觉特性,所以观察物体时我们都是先通过获取物体的轮廓信号,继而根据物体中个体的细节去区分不同物体的差异信号,再通过差异信号在脑海形成目标图像。比如在我们眼睛所处前面站立着几个身体特征各不相同的学生,但我们一眼看过去马上就能知道每个人的高矮胖瘦,并且获取脸部和衣着等信息。这就能属于上述所阐述的人眼视觉特性。
边缘检测就是将图像边缘用一定的检测方式提取出来。现如今最为流行的边缘检测包括Canny方法和Sobel方法。这其中Canny方法很容易屏蔽噪声的干扰,能相对比较轻松地检测图像的弱化边缘信息。这是由于此方法相对独立和别具一格的优点特征:使用两种互不干涉彼此的阈值对目标图像实现边缘检测