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


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

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

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

    1 算法介绍
    1.1 背景差分法

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

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

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

    然后根据式(2)对差分图像Ek(x,y)的像素值与给定的阈值进行比较,对差分图像进行二值化,T为给定的阈值,1代表运动目标区域,0代表背景区域.
    在这里插入图片描述
    1.2 帧间差分法
    帧间差分法是差分连续两帧来获得运动目标区域.当图像序列中出现运动目标时,两帧之间就会出现较明显地变化.两帧差分得到差分图像,差分图像再通过设定的阈值进行判断,进行图像二值化,来确定图像序列中有无运动目标.

    首先通过式(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)

    然后根据式(4)对差分图像Ek(x,y)的像素值与给定的阈值进行比较,对差分图像进行二值化,T为给定阈值,1代表运动目标区域,0代表背景区域.
    在这里插入图片描述

    2 算法改进
    2.1 背景建模

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

    单高斯背景模型的思想是假设图像中每个像素点的像素值出现的概率服从高斯分布,将像素点的颜色值看作一个随机过程X.设I(x,y,t)表示像素点(x,y,t)在t时刻的像素值,则有:
    在这里插入图片描述
    其中μt和σt为t时刻该像素高斯分布的期望值和标准差.单高斯背景模型仅适用于背景单一不变的场合.基于以上两种背景建模方法的缺陷,以及实验效果,采用均值背景模型来获取背景.算法思想是将车辆运动目标当作噪声,通过累积平均消除噪声,运用包含运动目标的图像序列通过取平均来获取背景图像.简而言之,就是将图像序列所有的像素点求和,取平均值来表示背景.再将平均值与阈值相比较,最后得到背景模型.假如对应位置的像素值超过背景模型中的阈值范围,就认为它是车辆运动目标.公式如下:
    在这里插入图片描述
    其中Bk 表示背景图像,N表示帧的数目,image(x,y)表示在第i帧图像序列中的所有(x,y)像素点所构成的整幅背景图像.

    2.2 背景差分二值化
    通过均值背景法获取背景模型之后,将当前图像帧Pk(i,j,k)与背景图像Bk(i,j,k)进行式(7)背景差分运算.再通过式(8)进行像素灰度值与阈值的比较,进行二值化,得到车辆运动目标.其表达式为:
    在这里插入图片描述
    车辆运动目标时的敏感程度.

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

    对图像函数f(x,y)中的每一个像素元素,通过公式(9)获取该元素的梯度值:
    在这里插入图片描述
    其中,Δxf,Δyf分别为:
    在这里插入图片描述
    2.4 边缘图像差分
    分别对背景差分二值化图像与对背景差分图像进行边缘检测,得到了两张边缘图像EG1(x,y)和EG2(x,y).再对两张边缘图像进行帧间差分运算得到

    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 EDIT
    gui_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});
    end
    
    if 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 EasyTrack
    handles.output = hObject;
    
    
    % Update handles structure
    guidata(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 structure
    varargout{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              
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    三、运行结果

    在这里插入图片描述

    四、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 备注
    简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 相关阅读:
    【李沐论文精读】GPT、GPT-2和GPT-3论文精读
    径向基函数(RBF)插值
    考研专业课之C语言(郝斌)
    UVM中uvm_config_db在sequence中的使用
    文献 | 关于心理活动符号学,你知道多少?
    【WSN】基于LGNDO算法实现传感器物理路由优化附matlab代码
    汉字风格迁移篇--SAFont:使用自我注意机制的自动字体合成
    Unittest(单元测试)
    随笔-我的哼哈二将无了
    民安智库(第三方公众满意度调查)产业园客户满意度调查
  • 原文地址:https://blog.csdn.net/TIQCmatlab/article/details/125463190