【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】

网友投稿 970 2022-09-09

【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】

【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】

一、背景差分法和帧间差分法的车辆运动目标检测简介

1 引言 运动目标检测是从图像序列中检测运动目标.通过运动目标检测可以得到图像中的运动目标,获取图像中的运动信息.运动目标检测在医学辅助诊断、航天航空、军事导弹精确制导、移动机器人视觉导航、智能交通等领域发挥着重要的作用.因为图像序列受光照、天气、噪声、以及阴影等因素的干扰,精准地检测运动目标显得尤为困难.

目前比较有效的目标检测方法主要是光流法、背景差分法和帧间差分法.光流法的时间复杂度较高,计算量大,实时性较差,且对光线较敏感,变化的光线会被错误地识别为光流.背景差分法和帧间差分法实现简单,且实时性较强,因此有着广泛地应用.帧间差分法只依赖于邻近的几个图像帧,稳定性较好,对环境变化适应性很强,即使在外部环境变化剧烈的情况下,仍然能够取得很好的效果.帧间差分法的缺点是帧间间隔的选取对目标识别的结果影响较大.背景差分法对背景图像的要求相对较苛刻,背景图像不允许存在运动目标,并且能实时更新适应环境的变化.但是传统的运动目标检测算法不能去除车辆运动目标的阴影部分,阴影经常被误检为车辆的一部分,影响获取正确的车辆目标信息.本文提出了将背景差分法和帧间差分法两种方法结合起来的车辆运动目标检测方法,得到去除阴影的车辆运动目标.

1 算法介绍 1.1 背景差分法 背景差分法是运动目标检测最为简单的一种方法.背景差分法的原理,由于运动目标和背景在像素值上存在较明显的差异,利用当前图像与背景图像进行差分,差分图像每一个像素的值与预先设定的阈值进行比较,如果像素值小于阈值,则判定为背景区域,反之为运动目标区域.背景差分的原理流程如下:

首先通过式(1)得到当前图像和背景图像的差分图像,即:

Ek(x,y)=|Pk(x,y)−Bk(x,y)|         (1)

首先通过式(3)得到第k帧图像Pk(x,y)和第k-1帧图像Pk−1(x,y)的差分图像Ek(x,y):

Ek(x,y)=|Pk(x,y)−Pk−1(x,y)|         (3)

2 算法改进 2.1 背景建模 直方图统计背景模型是一个常见的背景建模方法,该算法受噪声的影响较小,因此提取的背景图像较优质,但计算量大,时间复杂度较高.并且图像中较远的景物和运动目标会连接在一起,错误的把运动目标计算为背景,从而影响背景图像的质量.

2.3 图像边缘检测 常见的边缘检测算子有Prewitt算子、Roberts算子、Log算子、Canny算子及 Robert算子.相比之下,Roberts算子是一种较简单的算子,采用2×2的模板对图像进行处理,利用局部差分算子寻找边缘,并使用对角线方向相邻两像素之差来近似表示梯度幅值检测边缘.Roberts算子检测垂直边缘的效果优于斜向边缘,定位精度高.实验表明,该算子在分割边缘明显且噪声较少的图像时效果良好,边缘定位准确,相比于其他3×3算子,在不经过图像后处理时,可以给出相对较细的边缘.

EG(x,y).EG(x,y)=|EG2(x,y)−EG1(x,y)|         (12)

2.5 图像后处理 由于噪声和边缘间断的影响,得到的车辆运动目标图像不够理想,因此需要对差分后的图像进行后处理.利用中值滤波去除部分干扰,利用腐蚀和膨胀剔除部分多余边缘线条,使运动目标区域封闭且完整连续.

二、部分源代码

function varargout = EasyTrack(varargin)% EASYTRACK MATLAB code for EasyTrack.fig% EASYTRACK, by itself, creates a new EASYTRACK or raises the existing% singleton*.%% H = EASYTRACK returns the handle to a new EASYTRACK or the handle to% the existing singleton*.%% EASYTRACK('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in EASYTRACK.M with the given input arguments.%% EASYTRACK('Property','Value',...) creates a new EASYTRACK or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before EasyTrack_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to EasyTrack_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help EasyTrack% Last Modified by GUIDE v2.5 12-Jun-2022 23:54:34% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @EasyTrack_OpeningFcn, ... 'gui_OutputFcn', @EasyTrack_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});endif nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before EasyTrack is made visible.function EasyTrack_OpeningFcn(hObject, ~, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to EasyTrack (see VARARGIN)% Choose default command line output for EasyTrackhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes EasyTrack wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.function varargout = EasyTrack_OutputFcn(~, ~, handles)% varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;% 最核心的函数,检测按钮function mainB_Callback(~, ~, handles)%数据的前期准备set(handles.numText,'string',0);%计数框清零set(handles.endTime,'string',0);%结束时间清零set(handles.startTime,'string',datestr(datetime('now')));set(handles.infoP,'Visible','on');%视频获取途径的选择camSwitch=get(handles.radioCam,'value');%获取值position=handles.position;areaSwitch=handles.areaSwitch;if areaSwitch>0; BW = handles.BW;%传递二进制图end

三、运行结果

四、matlab版本及参考文献

1 matlab版本 2014a

2 参考文献 [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020. [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013. [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013. [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015. [5]罗敏,刘洞波,文浩轩,陈鑫海,宋丹.基于背景差分法和帧间差分法的车辆运动目标检测[J].湖南工程学院学报(自然科学版). 2019,29(04)

3 备注 简介此部分摘自互联网,仅供参考,若侵权,联系删除

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JSP系列之页面的注释细节
下一篇:Python学习笔记—自动化部署【新手必学】(python自动化环境搭建)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~