运动目标检测本质是采用计算机技术与图像处理手段[1], 从复杂多变的背景环境中精确地识别出感兴趣的目标. 融合帧间差分法和背景差分法的混合算法对运动目标检测[2], 结合了两种算法的优点, 不易受环境光线的影响, 但是当运动目标移动的速度过快或过慢时, 检测出的目标轮廓连通性不好且对背景图像不能实时更新. 2018年罗鸿斌等人提出一种基Vibe的改进算法[3], 该算法根据对每个前景点建立一个计数器的算法来加快对鬼影的去除, 加快了对背景建模中第一帧“鬼影”消除速度, 但是检测效率不高, 检测的实时性不够. 针对目标运动时, 可能出现其他物体的干扰及目标运动的方向不确定的情况, 目标自适应检测中存在的实时性、准确性以及抗干扰能力等问题, 提出一种基于Vibe背景建模的三帧差分算法, 也就是在传统Vibe算法基础上融入颜色和边缘特征, 然后与改进的三帧差分法结合, 该算法不仅加快 “鬼影”消除的速度, 而且提高了对运动目标检测准确性并满足实时性要求.
1 基于Vibe的背景建模当前大多数背景建模都是基于单像素的, 通过对Vibe背景建模算法的研究, 本文在传统的Vibe算法基础上融入颜色和边缘特征[4], 根据检测过程中颜色和边缘的特征的变化情况以及局部像素复杂程度, 改变了对前景的判定与背景的更新方式, 解决检测过程中前景和背景相似造成的误检.
1.1 融入颜色和边缘特征的Vibe算法Vibe背景建模算法是一种基于像素特征非参数化聚类的算法, 在模板的初始化阶段, 用视频的第一帧图像为每个像素点建立一个模型, 根据目标的运动和背景的变化, 对应像素的背景模型可以自适应选择, 同时为了避免由于检测的背景与前景相似造成的误检[5], 将目标的颜色和边缘特征加入算法, 改善了基于单一特征背景建模算法对背景描述的不准确现象.
1.2 初始化背景建模Vibe模型的初始化只需要一帧图像就能实现[6], 但像素点的时空分布信息不能在单帧图像中显现出来, 为了得到初始化模型像素点的时空分布信息, 需要随机选择一个像素点, 然后把它的领域像素点作为模型样本集的初始值, 可用式(1)表示.
${P_1}\left( x \right) = \left\{ {{V_1}} \right.\left. {(y|y \in K'\left( x \right))} \right\}$ | (1) |
其中 表示x点的空间领域, y是在空间领域中随机选取的位置. 如图1所示为Vibe背景模型.
1.3 前景检测
通过比较将当前像素值与背景模型中对应的历史像素值作为前景检测, 再判断当前像素是否为前景像素. 当读取到视频第二帧, 将图像中(x, y)处的像素v(x, y)作为中心, 以R为半径建立一个背景匹配的模型圆, 计算V(x)与B(x)中N个样本的欧氏距离, 根据像素在该模型圆范围内匹配的数量Q对该像素进行前背景的判断. 当Q<Qmin时, 该像素点是前景; 否则, 就是背景, 对结果r(x, y)的判断式用式(2)表示:
$r\left( {x,y} \right) = \left\{ \begin{array}{l} 255,\;\;Q\left\{ {M\left( {x,y} \right) \cap {C_R}\left( {V\left( x \right)} \right)} \right\} < {Q_{\min }}\\ 0,\;\;{\rm{other}} \end{array} \right.$ | (2) |
其中,
$\begin{array}{l} Q\left\{ {\left( {x,y} \right) \cap {C_R}\left( {V\left( x \right)} \right)} \right\} = \\ \left\{ \begin{array}{l} Q + 1,\;\;{{dist}}\left\{ {\left\{ {{v_i}\left( {x,y} \right)|{v_i}\left( {x,y} \right) \in M\left( {x,y} \right)} \right\},{{v}}\left( {{{x}},{{y}}} \right)} \right\} < R\\ Q,\;\;{{dist}}\left\{ {\left\{ {{v_i}\left( {x,y} \right)|{v_i}\left( {x,y} \right) \in M\left( {x,y} \right)} \right\},{{v}}\left( {{{x}},{{y}}} \right)} \right\} \ge R \end{array} \right. \end{array}$ |
该方法利用当前像素点与背景样本集中所有的像素点作对比, 如果它们的欧氏距离绝对差值处于模型圆内, 则匹配数Q+1.
1.4 背景模型自适应更新背景模型初始化完成后, 将读入的待测视频图像按照背景模型的特征提取当前帧图像中特征的集合. 在训练背景模型的时, 当读取了视频中新的一帧图像, 首先应该提取图像的颜色特征RGB(x, y)和灰度值Gray(x, y), 然后在空间中进行边缘特征计算, 为每个像素点设置自己的更新率
${L_k}({V_x}) = {\min _k}\;\;\;{{dist}}(D({V_X}),{V_X})$ | (3) |
式中,
${\overline d _{\min }}({P_x}) = \frac{1}{k}\sum\limits_{t = 1}^k {{L_k}({V_x})} $ | (4) |
背景模型的更新率可以通过设置的更新率
$U'({V_x}) = \left\{ \begin{gathered} U({V_{x1}}) + \frac{1}{{{{\overline d }_{\min }}({V_{x1}})}} \\ U({V_{x2}}) - \frac{1}{{{{\overline d }_{\min }}({V_{x2}})}} \\ \end{gathered} \right.$ | (5) |
其中,
半径阈值可以通过式(6)调节:
$R({V_x}) = \left\{ \begin{gathered} R({V_x})*(1 - {{a}}),\;\;R({V_x}) > b*{\overline d _{\min }} \\ R({V_x})*(1 + a),\;\;R({V_x}) < b*{\overline d _{\min }} \\ \end{gathered} \right.$ | (6) |
其中, a, b为固定的参数,
尽管Vibe背景建模的检测效率较高, 算法简单容易实现, 但存在“鬼影”, 如果运动目标由运动变为静止或运动速度很慢, 目标就会被背景吸收[7], 检测不出运动目标. 本文方法虽不能在检测的前几帧完全消除“鬼影”, 但由仿真图可以看出, 改进后的Vibe算法第43帧时有明显消减, 77帧时就可以完全消除. 图2为改进前后Vibe算法去除“鬼影”仿真效果图.
2 改进的三帧差分法
在对运动目标的检测过程中, 帧间差分法通过计算相邻两帧图像的差值来获得图像运动的区域, 在相邻图像中, 利用差值图像能够快速检测出目标运动引起的动态范围, 因为它检测出来的目标往往都会比实际目标大, 导致出现“虚影”现象, 而且提取出来的是前后两帧图像发生变化的部分, 发生重叠的部分并不能检测出来, 从而产生“空洞”现象. 三帧差分法是对帧间差分法的完善[8], 它对视频序列中的三帧图像两两进行差分, 再相“与”, 虽然这样检测的准确率会有所提升[9–11], 对帧差法产生的双影问题有所改善, 但是仍然存在内部有“空洞”、目标物边界轮廓不完整等现象. 现在采用一种改进的三帧差分法, 它是在三帧差分处理结果的基础上进行形态学处理对图像进行补偿, 提高了对动态目标检测精确度, 得到准确的动态目标形态特征. 改进的三帧差分法利用形态学处理可能存在的噪声和断点, 利用膨胀来解决内部空洞问题. 为了有效减少目标的缺损, 本文利用把异或后的结果进行膨胀处理, 然后再将传统的三帧差分结果和处理后的结果相“与”, 得到运动目标轮廓图, 图3为改进的三帧差分流程图.
在连续视频序列
${q_1}(x,y) = \left\{ \begin{gathered} 255,\;\;\left| {{f_k}(x,y) - {f_{k - 1}}(x,y)} \right| > T \\ 0,\;\;\left| {{f_k}(x,y) - {f_{k - 1}}(x,y)} \right| \leqslant T \\ \end{gathered} \right.$ | (7) |
同理, 将第k帧图像与第k+1帧图像灰度化再进行差分, 得到
${q_2}(x,y) = \left\{ \begin{gathered} 255,\;\;\left| {{f_{k + 1}}(x,y) - {f_k}(x,y)} \right| > T \\ 0,\;\;\left| {{f_{k + 1}}(x,y) - {f_k}(x,y)} \right| \leqslant T \\ \end{gathered} \right.$ | (8) |
获取差分后的图像, 运用二维 OTSU 阈值分割算法自动获取阈值以替代人为设定阈值, 从而更加精确的对差分图像进行二值化, 然后将得到的两幅图像灰度图相“与”得到图像
$\left\{\begin{array}{l} {q_3}\left( {x,y} \right) = {q_1}\left( {x,y} \right) \cap {q_2}\left( {x,y} \right)\\ {q_3} = \left\{ \begin{array}{l} 255,\;\;{\rm{if}}({q_1}(x,y) = 255,{q_{\rm{2}}}(x,y) = 255)\\ 0,\;\;{\rm{other}} \end{array} \right. \end{array}\right.$ | (9) |
然后再将图像
$\left\{\begin{array}{l} {q_4}(x,y) = {q_1}(x,y) \otimes {q_3}(x,y)\\ {q_4}(x,y) = \left\{ \begin{array}{l} 255,\;\;{\rm{if}}({q_1}(x,y)! = {q_3}(x,y))\\ 0,\;\;{\rm{other}} \end{array} \right. \end{array}\right.$ | (10) |
接着对图像
$dst(x,y) = \left\{ \begin{gathered} \\ \\ \end{gathered} \right.\begin{array}{*{20}{c}} {\max \;\;\;src(x + x',y + y')} \\ {(x',y'):element(x',y') \ne 0} \end{array}$ | (11) |
最后再对图像
$\left\{\begin{array}{l} q(x,y) = {q_3}(x,y) \cap {q_4}(x,y)\\ q = \left\{ \begin{array}{l} 255,\;\;{\rm{if}}({q_3}(x,y) = 255,{q_4}(x,y) = 255)\\ 0,\;\;{\rm{other}} \end{array} \right. \end{array}\right.$ | (12) |
其中, T为二维OTSU阈值分割算法自动获取的阈值. 改进的三帧差分算法是通过
尽管改进后的三帧差分法的算法仍然比较简单、执行速度也较快, 而且还具有普遍适用性, 但是在检测过程中仍然存在内部“空洞”、目标物边界轮廓不完整和对光照突变敏感等不足, 为了解决改进后的三帧差分法存在不足之处, 本文提出一种基于Vibe背景建模的三帧差分算法[12], 该算法是用Vibe对背景进行建模, Vibe背景模型算法是根据第一帧视频帧来建立模型[13], 但容易出现“鬼影”现象, 目前许多文献也针对这个不足进行了相关的研究, 现在比较常用的方法是将原算法的第一帧图像初始化改为多帧图像初始化, 或者将原算法与其他相关算法进行结合.
根据实验后的效果对比得出, 传统的Vibe算法需要经过数百帧以后才能完全消除第一帧出现的“鬼影”, 利用基于Vibe背景建模的改进三帧差分算法, 加快了消除“鬼影”的速度, 在数十帧内就可以将“鬼影”消除; 同时, 融合颜色和边缘特征的Vibe算法很大程度上改善了传统的基于单一特征背景建模算法对背景描述不准确的现象. 将这两种算法融合后, 不仅仅提升了消除“鬼影”的速度和三帧法出现的“空洞”等不足, 而且通过对检测结果进行形态学处理对图像进行补偿, 很大程度上提了对运动目标检测的准确率. 基于Vibe建模的三帧差分法流程图如图4所示.
4 实验分析
为了验证基于Vibe背景建模的改进三帧差分法对运动目标检测结果的改善, 本文以运动的行人为研究对象, 将视频划分为1组800帧的视频序列进行实验, 本文的实验平台基于微软开发的一款工具箱Visual Studio 2015(简称VS2015), 并调用第三方开源库OpenCV3.2.0, 采用C++编程语言进行算法功能实现, 操作系统为Microsoft Windows, 主机CPU为Intel(R)core(TM)i5-6300HQ, 主频为2.30 GHz.
为了验证本文提出的方法在复杂的环境下仍能够准确检测出运动目标, 本实验选取的地点为干扰较多十字路口, 采用基于Vibe背景建模的改进三帧差分法算法对运动行人进行检测. 试验过程中, 分别选取视频图像序列的第177帧、392帧和550帧进行检测效果分析. 实验结果表明本文改进的三帧差分算法优于传统的Vibe算法和传统的三帧差分法. Vibe算法检测过程中存在消除“鬼影”速度较慢和对背景描述不准确等问题. 三帧差分法检测的结果存在“空洞”和连通性不好等现象. 本文提出的算法在很大程度上弥补了以上算法的不足, 提高了运动目标检测算法的鲁棒性. 实验结果分析: 通过改进Vibe和三帧差分法的改进, 得到本文算法, 图4为文中算法-传统算法仿真对比效果图, 分别选取第177帧、第392帧和第550帧, 通过Vibe算法、三帧算法与本文算法对检测效果进行对比.
通过对比传统算法与本文仿真效果图, 并利用MER-132-30UC型号USB工业彩色相机进行多次试验, 可以得出本文算法对运动目标检测的效果明显优于传统算法.
5 结论与展望首先对传统的Vibe算法和三帧差分法的不足进行初步的改善, 通过对比改进后的Vibe算法与传统Vibe算法对图像处理的结果, 可以看出改进后的Vibe算法可以加快“鬼影”消除的速度. 然后针对两种算法存在的问题, 采用一种基于Vibe背景建模的改进三帧差分算法对运动目标检测, 提高了动态目标检测的准确性和实时性. 通过实验可以得出本文算法解决了Vibe算法消除“鬼影”速度慢和对背景描述不准确等问题, 同时解决了三帧差分法检测结果存在的“空洞”现象, 对运动目标检测准确率更高, 在智能视频监控系统领域有良好的市场应用前景. 未来进一步工作可以从动态背景环境着手采用深度学习的算法对运动目标实时检测追踪, 可以考虑复杂环境下对多运动目标检测进行研究.
[1] |
朱虹. 数字图像处理基础. 北京: 科学出版社, 2005.
|
[2] |
王伟. 复杂环境下移动机器人的动态目标检测与跟踪控制研究[硕士学位论文]. 西安: 西安建筑科技大学, 2015.
|
[3] |
罗鸿斌. 基于Vibe的改进运动目标检测算法. 自动化与仪器仪表, 2018(3): 51-54. |
[4] |
孟琦. Vibe和多特征提取相结合的微动目标检测算法研究[硕士学位论文]. 重庆: 重庆邮电大学, 2017.
|
[5] |
程武. 基于OpenCV运动目标检测与跟踪方法研究[硕士学位论文]. 沈阳: 沈阳航空航天大学, 2017.
|
[6] |
Barnich O, Van Droogenbroeck M. ViBe: A universal background subtraction algorithm for video sequences. IEEE Transactions on Image Processing, 2011, 20(6): 1709-1724. DOI:10.1109/TIP.2010.2101613 |
[7] |
张晓伟. 视频中运动目标的检测与跟踪算法研究及应用[硕士学位论文]. 济南: 山东师范大学, 2013.
|
[8] |
赵建. 基于三帧差法的运动目标检测方法研究[硕士学位论文]. 西安: 西安电子科技大学, 2013. 2–4.
|
[9] |
Betke M, Haritaoglu E, Davis LS. Real-time multiple vehicle detection and tracking from a moving vehicle. Machine Vision and Applications, 2000, 12(2): 69-83. DOI:10.1007/s001380050126 |
[10] |
Sharma L, Yadav DK, Bharti SK. An improved method for visual surveillance using background subtraction technique. Proceedings of the 2nd International Conference on Signal Processing and Integrated Networks. Noida, India. 2015. 421–426.
|
[11] |
薛丽霞, 罗艳丽, 王佐成. 基于帧间差分的自适应运动目标检测方法. 计算机应用研究, 2011, 28(4): 1551-1552, 1559. DOI:10.3969/j.issn.1001-3695.2011.04.098 |
[12] |
谢红, 原博, 解武. 一种基于改进三帧差分和ViBe算法的运动目标检测算法. 应用科技, 2016, 43(6): 46-52. |
[13] |
Ekpar F. A framework for intelligent video surveillance. Proceedings of the IEEE 8th International Conference on Computer and Information Technology Workshops. Sydney, QLD, Australia. 2008. 421–426.
|