目标检测基于matlabgui背景差分算法视频运动物体跟踪含matlab源码1915期(代码片段)

海神之光 海神之光     2022-12-06     277

关键词:

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

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 = Main_object_tracking(varargin)
% _____________________________________________________
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @Main_object_tracking_OpeningFcn, ...
    'gui_OutputFcn',  @Main_object_tracking_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin && ischar(varargin1)
    gui_State.gui_Callback = str2func(varargin1);
end

if nargout
    [varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
    gui_mainfcn(gui_State, varargin:);
end
% End initialization code - DO NOT EDIT

% --- Executes just before Main_object_tracking is made visible.
function Main_object_tracking_OpeningFcn(hObject, eventdata, handles, varargin)
movegui(hObject,'center')
imaqreset
% ID of video source
handles.fuente=2;
%Disable "Start" and "Stop" buttons
set(handles.inicio,'Enable','off');
set(handles.parar,'Enable','off');
set(hObject,'UserData',0)
set(handles.axes1,'XTickLabel',[],'YTickLabel',[])
% Choose default command line output for Main_object_tracking
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.
function varargout = Main_object_tracking_OutputFcn(hObject, eventdata, handles)
% Get default command line output from handles structure
varargout1 = handles.output;

% --- FUNCTION TO GET BACKGROUND
function cap_fondo_Callback(hObject, eventdata, handles)
% Reset imaq device
imaqreset
set(hObject,'UserData',0) %User data 0 (1 stop capture)
% Enable "Start" and "Stop" buttons
set(handles.inicio,'Enable','off');
set(handles.parar,'Enable','off');
% Disable current button
set(hObject,'Enable','off');
% Get default source
sel_fuente=handles.fuente;
switch sel_fuente
    % _________________________________________________________________
    case 1 %WEB CAM        
        % Open GUI to select the camera to use
        sel_camera
        %
        uiwait
        % Bring the camera features
        % id= Camera ID
        % es_web_ext= indicator if laptop or external camera
        global id es_web_ext
        % Determine format depending on the type of camera to use
        if es_web_ext==0
            formato='YUY2_176x144';
        else
            formato='RGB24_320x240';
        end
        try
            % Create video object
            vid = videoinput('winvideo',id,formato);
            % Update handles
            guidata(hObject, handles);            
        catch
            % Message on error
            msgbox('Check the connection of the camera','Camera')
            % Remove axis labels
            set(handles.axes1,'XTick',[ ],'YTick',[ ])
        end
        % Specify how often to acquire frame from video stream
        vid.FrameGrabInterval = 1;
        set(vid,'TriggerRepeat',Inf);
        % Start capture
        % _______Get Background_________
        vid.FramesPerTrigger=50;
        start(vid);
        data = getdata(vid,50);
        if es_web_ext==0
            fondo=double(ycbcr2rgb(data(:,:,:,50)));
        else
            fondo=double(data(:,:,:,50));
        end
        % Set last image as background
        % Show background
        imshow(uint8(fondo))
        % Reset video object
        stop(vid);
        clear vid
        imaqreset
    case 2%VIDEO AVI
        [nombre, ruta]=uigetfile('*.avi','SELECT VIDEO AVI');
        if nombre == 0 %If press cancel button, return
            set(hObject,'Enable','on');
            set(handles.inicio,'Enable','on');
            set(handles.parar,'Enable','on');
            return
        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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

车辆计数基于matlabgui背景差分法道路行驶多车辆检测含matlab源码1911期(代码片段)

一、背景差分法和帧间差分法的车辆运动目标检测简介1引言运动目标检测是从图像序列中检测运动目标.通过运动目标检测可以得到图像中的运动目标,获取图像中的运动信息.运动目标检测在医学辅助诊断、航天航空、军事导弹... 查看详情

火灾检测基于matlabgui火灾检测(带面板)含matlab源码1646期(代码片段)

一、火灾检测简介1案例背景接触式火灾探测器对环境有一定要求,且常适用于室内空间。目前,利用视频图像与计算机视觉技术相结合,进行火灾的检测和常规探查成为本领域的研究新方向。针对烟雾区域稀疏、扩散缓慢的特征,现... 查看详情

运动对象检测和描述

运动图像检测基于背景减法目标跟踪,背景分割器:KNN、MOG2和GMGBasicmotiondetectionandtrackingwithPythonandOpenCV使用背景减除进行目标检测用OpenCV实现多目标追踪(C++/Python)通过形态学改善图像过滤,追踪人脸,检测前景/背景区域和深度... 查看详情

数字图像处理帧差法与kirsch边缘检测实现运动目标识别与分割(代码片段)

...用视频流时域连续性,通过相邻帧的时域变化来检测运动目标。在摄像头静止的情况下,常用的方法有帧差法和减背景法。    帧差法比较直观实用,对光照的变化干扰不敏感,但是对目标的检测不准确,对于缓慢... 查看详情

目标跟踪检测算法(一)——传统方法

...ttps://blog.csdn.net/qq_34919792/article/details/89893214【嵌牛导读】目标跟踪算法研究难点与挑战在于实际复杂的应用环境、背景相似干扰、光照条件的变化、遮挡等外界因素以及目标姿态变化,外观变形,尺度变化、平面外旋转、平面内... 查看详情

运动目标检测_混合高斯背景建模

...40;和标准差)表示背景,然后使用统计差分(如3σ原则)进行目标像素判断,可以对复杂动态背景进行建模,计算量较大。在混合高斯背景模型中,认为像素之间的颜色信息互不相关,对各像素点的处理都是相互独立的。对于视频图... 查看详情

图像处理-边缘检测-文献阅读笔记

...能小车运动轨迹跟踪方法研究[D].陕西:西安石油大学,2020.目标检测算法:二帧差分法、三帧差分法、高斯混合模型(GMM)背景差分法、ViBe背景差分法和光流法目标跟踪算法:跟踪:研究了Meanshift跟踪算法、Camshift跟... 查看详情

目标跟踪基于背景消减的图像帧间差分法目标检测及matlab仿真

...的构成部分为:三帧差分、获取背景和更新、背景消减、目标检测等。先是使用三帧差分以及背景消减计算源图像,接着把使用这两种方式获得二值化模版的图像逻辑“或”获得中间模板图像,接着以特定的模型为基础从而来对... 查看详情

运动目标检测跟踪主流算法

不全,需要慢慢补充 一.运动目标检测 (一)背景差 1.帧差2.GMM等 背景减算法可以对背景的光照变化、噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标。因此对于固定摄... 查看详情

图像工程——目标检测与目标跟踪

...衰减最优;运算效率高算法缺点:把阴影当做前景;运动目标不完整。优点:算法实现简单,程序设计复杂度低,运行速度快;动态环境自适应性强,对场景光线变化不敏感。优点:实时性高将单个目标的跟踪问题看作是MDP过程... 查看详情

目标检测算法是啥?

目标检测算法是先通过训练集学习一个分类器,然后在测试图像中以不同scale的窗口滑动扫描整个图像;每次扫描做一下分类,判断一下当前的这个窗口是否为要检测的目标。检测算法的核心是分类,分类的核心一个是用什么特... 查看详情

毕设题目:matlab手势识别

...去噪和信息增强。然后,利用分割算法获取图像中的目标手势。通过视频处理和分析得到当前手势的分类和描述,最后通过手势识别算法对目标手势进行识别。基于手势的手势识别主要由手势分割、手势分析和手势识别... 查看详情

手势识别基于matlabpca+lda手语检测识别含matlab源码1551期(代码片段)

...去噪和信息增强。然后,利用分割算法获取图像中的目标手势。通过视频处理和分析得到当前手势的分类和描述,最后通过手势识别算法对目标手势进行识别。基于手势的手势识别主要由手势分割、手势分析和手势识别... 查看详情

无人机视频图像运动目标检测算法综述------2019年-------------

...#xff1a;目前,国内外学者利用无人机视频图像开展运动目标检测大多将研究重点放在典型运动目标——车辆上,例如美国[3]德国[4]等,我国也开展了利用无人机检测运动车辆的研究[5]。1997年,美国设立VSAM视觉监控项目。将摄... 查看详情

目标跟踪基于kalman滤波跟踪视频运动目标matlab代码(代码片段)

...过帧差法对运动物体的识别,定位,利用卡尔曼滤波算法对目标运动进行预测,跟踪,从而控制摄像头转动,跟踪目标物,使目标物体始终出现监控画面的中心.在此采用卡尔曼滤算法,进行目标运动的预估,利用Matlab对其仿真.仿真结果显... 查看详情

动态背景视频流中的运动/变化检测

】动态背景视频流中的运动/变化检测【英文标题】:Motion/changedetectioninvideostreamingwithdynamicbackground【发布时间】:2021-03-3118:19:34【问题描述】:我想使用OpenCV检测视频流中背景处于动态运动中的运动。因此会产生误报结果,例如... 查看详情

求基于opencv的三帧差分算法代码

...45差分,两个差值相与参考技术ADetector虚类):实现前景检测,2.团块检测模块(CvBlobDetector虚类):实现运动物体(团块)的的检测3.团块跟踪模块(CvBlobTracker虚类):实现运动物体跟踪4.团块运动轨迹产生模块(CvBlobTrackGen虚... 查看详情

运动目标检测——光流法与opencv代码实现

参考技术A运动目标的检测的其主要目的是获取目标对象的运动参数(位置、速度、加速度等)及运动轨迹,通过进一步分析处理,实现对目标行为更高层级上的理解。运动目标检测技术目的是从序列图像中将变化区域从背景图... 查看详情