【车辆检测】基于背景差分法实现道路行驶车辆检测附matlab代码
1 简介
该方法的基本思想是,将采集到的车辆图像的每一帧都与一个不含运动车辆的静止参考帧做差值运算,从而突出目标图像,通过分析与处理对车辆计数。其优点是算法简单、处理速度快,且差分结果能直接反应运动目标的位置、形状以及大小等,实用性较强。其不足之处在于背景图像不是一成不变的, 它会受到光线, 天气等外界因素的影响。如运用此方法,则需采用一定的算法进行背景的动态更新。如下是针对利用背景差分法可能出现的问题, 进行逐一解决。
背景的提取背景图像是背景差分法的基础, 它的获取是否理想,直接关系到最终对车辆进行计数的准确性。因此背景图像中不应该包含运动物体,但是对于道路车辆图像的处理, 多数情况下不能满足这一要求, 这就需要从已有的包含运动车辆的图像去提取出一个没有运动车辆的道路背景图像。本文选择了具有运动车辆的图像序列中的 50 帧,利用帧平均法获得没有运动车辆的背景图像。如图 2 所示。
为使我们提取的背景图像能够很好的适应不同的情况, 我们需要随着外界条件的变化对背景不断更新。本文选择的是一种基于背景差分与帧间差分相结合的更新方法, 其原理简述如下:
1) 利用帧平均法提取出背景图像作为初始背景,用当前帧图像减去背景图像, 突出目标车辆;
2) 用当前帧图像与前一帧图像做差分,结果与选定的阈值做比较, 大于阈值的为车辆的运动区域, 背景可保持, 而小于阈值的则是车辆运动区域外的部分, 背景需更新;
3) 根据二值图像的像素值利用如下公式对背景进行更新
2 部分代码
% struct get_algorithm_info_by_desc(string,cell)
algorithm_desc - string
alg_list - cell
function [alg_info] = get_algorithm_info_by_desc(algorithm_desc, alg_list)
alg_info.algorithm_id = '-';
alg_info.algorithm_name = '-';
alg_info.algorithm_time = 0;
alg_info.algorithm_desc = 0;
[r,~] = size(alg_list);
for i = 1:r
aux_algorithm_id = alg_list{i,1};
aux_algorithm_name = alg_list{i,2};
aux_algorithm_time = alg_list{i,3};
aux_algorithm_desc = alg_list{i,4};
if(strcmp(algorithm_desc,aux_algorithm_desc))
alg_info.algorithm_id = aux_algorithm_id;
alg_info.algorithm_name = aux_algorithm_name;
alg_info.algorithm_time = aux_algorithm_time;
alg_info.algorithm_desc = aux_algorithm_desc;
break;
end
end
end
% function [algorithm_id] = get_algorithm_id(algorithm)
if(length(algorithm) > 1)
algorithm_split = strsplit(algorithm,' ');
algorithm_id = strtrim(algorithm_split(1));
algorithm_id = char(algorithm_id);
else
algorithm_id = '';
end
end
3 仿真结果
4 参考文献
[1]吴凌霄, 林晨, 许福海,等. 基于背景差分的车辆计数方法的研究[J]. 自动化技术与应用, 2011, 30(010):72-75.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的仿真,相关代码问题可私信交流。部分理论引用网络文献,若有侵权联系博主删除。