基于背景差分法和三帧差分法的目标检测方法matlab仿真

本文探讨了背景差分法和三帧差分法在目标检测中的应用,通过MATLAB仿真分析了两种方法的优缺点。理论基础部分介绍了这两种方法的基本原理和实现步骤,核心程序展示了MATLAB代码实现。仿真结果显示,改进的算法能提供更清晰的目标检测效果,但不同方法在实时性和准确性上存在差异。文章指出了阈值选择、动态背景和部分遮挡等问题对检测效果的影响,强调了在实际应用中需根据场景优化参数。
摘要由CSDN通过智能技术生成

目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

         基于背景差分法和三帧差分法是常见的目标检测方法,它们在视频图像中用于检测运动目标,特别是在静态背景下运动的目标。

1. 基于背景差分法:

       基于背景差分法是一种简单但有效的目标检测方法,适用于背景相对静态、目标相对运动的场景。基本思想是将当前帧图像与背景模型进行差分,从而获得目标运动的像素。

原理:

  1. 背景建模:通过一段时间内的图像帧,建立背景模型,可以使用简单的平均值或高斯模型。

  2. 差分运算:将当前帧图像与背景模型进行逐像素差分运算。差分图像中的高像素值表示可能是目标。

  3. 阈值判决:对差分图像进行阈值化处理,将高于阈值的像素标记为目标像素。

2. 三帧差分法:

三帧差分法是基于背景差分法的扩展,它引入了更多的帧来消除瞬时噪声和误检测。

       基于背景减除法的目标检测算法,其主要通过通过设置和背景图像的像素比较相似的背景参数模型,接着将当前帧以及背景图差分开来,从而获得运动物体的运动区域。 基于背景减除法的目标检测算法,首选选择视频的第一帧作为初始背景,

通过MATLAB仿真,可以获得如下的背景更新仿真结果。 

       从图4.2的仿真结果可知,当参数a较小的时候,可以获得较为清晰的背景更新效果,而当较大的时候,背景中存在明显的目标残影,通过仿真测试,设置参数的值为0.0002。 

       基于帧间差分的目标检测仿真算法,三帧间使用以像素为基础的时间差分利用闭值化来获取图像中的运动范围。三帧差法,其主要通过相邻三帧划分成一组之后开始差分,如下公式所示,可以高效的获取出中间帧运动物体的形状。

        通过MATLAB仿真,可以获得如下的仿真结果:

     从仿真结果克制,对于体积比较大、色彩一样的运动物体,或许会在在物体内部产生空洞,让运动物体缺失。而且移动目标目标的外型在运动方向上被拉伸,让获得的图像的面积大于真实目标的面积。在两帧图像相继出现的时间段内,假如物体的运动速度非常快,导致原来被隐藏的背景表露出来,就会形成“鬼影”。从外,获得的目标中仍然存在较多的干扰噪声,因此,需要对检测结果进行形体学处理,最终获得如下的仿真结果:

        从上述两个章节的仿真结果可追,背景差分法在使用的时候,比较难获取绝对静止的背景,并且假如目标长久的不移动位置,或者背景中的物体离开,会导致误检。而三帧差分法获得的运动目标大于实际物体,当物体移动缓慢,相邻两帧间之间会产生空洞、漏检的情况,导致获得的目标信息不正确的后果。结合背景差分法和三帧差分法的目标检测方法,这里对本文所提出的改进算法进行matlab仿真,通过如下的公式实现目标检测。

                                                    

二、核心程序

%下面几行分别为清理指令窗口,清理内存,关闭现有图像,忽略警告,调用函数库
clc;
clear;
close all;
warning off;
addpath 'func\'

%下面的语句为读取视频时间较长,将读取后的视频保存到mat文件中,进行快速读取
SEL = 0;
if SEL == 1
   [pixel_rgb,pixel_gray,frameNum] = get_AVI('vedio\02.avi');
   save v1.mat pixel_rgb pixel_gray frameNum
else
   load v1.mat  
end


%参数alpha取值
alpha    = 0.00002;
%迭代次数
maxer    = 170;
%你那个算法中三个门限值。
T1       = 15;
T2       = 70;
T3       = 10;
%初始背景
B0       = pixel_gray(:,:,1);
%初始背景大小
[r,c]    = size(B0);
%背景更新初始化
B        = zeros(r,c,maxer);
%背景更新第一帧为B0
B(:,:,1) = B0;
%开始迭代
for i = 3:140
    i
    %背景提取
    tmps   = double(abs(pixel_gray(:,:,i) - pixel_gray(:,:,i-1)));
    %和门限T1进行对比
    d      = zeros(r,c);
    [x0,y0]= find(tmps >= T1);%得到大于T1的区域
    [x1,y1]= find(tmps <  T1);%小于门限T1的区域
    %对于大于T1的部分,赋值为1,且背景不变
    for m = 1:length(x0)
        d(x0(m),y0(m))   = 1;
        B(x0(m),y0(m),i) = B(x0(m),y0(m),i-1);
    end
    %对于小于T1的部分,赋值为0,且背景根据公式进行更新
    for m = 1:length(x1)
        d(x1(m),y1(m))   = 0;
        B(x1(m),y1(m),i) = alpha*double(pixel_gray(x1(m),y1(m),i)) + (1-alpha)*B(x1(m),y1(m),i-1);
    end  
    %背景减除获取运动目标
    tmps2    = double(abs(double(pixel_gray(:,:,i)) - B(:,:,i)));
    %背景减除获取运动目标和门限T2进行对比
    d2       = zeros(r,c);
    [x02,y02]= find(tmps2 >= T2);%得到大于T2的区域
    [x12,y12]= find(tmps2 <  T2);%小于门限T2的区域
    %对于大于T2的部分,赋值为1
    for m = 1:length(x02)
        d2(x02(m),y02(m))   = 0;
    end
     %对于小于T2的部分,赋值为0
    for m = 1:length(x12)
        d2(x12(m),y12(m))   = 1;
    end  
    %心态学处理,删除噪声,填充目标区域中的一些小的空洞
    d2         = bwareaopen(d2,300);
    se         = strel('disk',2);
    d2         = imdilate(d2,se);
    d2         = imfill(d2,'holes');
    
    %三帧差分获取目标
    tmps3_1    = abs(double(pixel_gray(:,:,i))   - double(pixel_gray(:,:,i-1)));
    tmps3_2    = abs(double(pixel_gray(:,:,i+1)) - double(pixel_gray(:,:,i)));
 
    d3_1       = zeros(r,c);
    d3_2       = zeros(r,c);
    %三帧差分获取目标和门限T3进行对比
    [x03,y03]= find(tmps3_1 >= T3);
    [x13,y13]= find(tmps3_1 <  T3);
    %对于大于T3的部分,赋值为1
    for m = 1:length(x03)
        d3_1(x03(m),y03(m))   = 1;
    end
    %对于小于T3的部分,赋值为0
    for m = 1:length(x13)
        d3_1(x13(m),y13(m))   = 0;
    end  
    %三帧差分获取目标和门限T3进行对比
    [x04,y04]= find(tmps3_2 >= T3);
    [x14,y14]= find(tmps3_2 <  T3);
    %对于大于T3的部分,赋值为1
    for m = 1:length(x04)
        d3_2(x04(m),y04(m))   = 1;
    end
    %对于小于T3的部分,赋值为0
    for m = 1:length(x14)
        d3_2(x14(m),y14(m))   = 0;
    end      
    [x15,y15] = find(d3_1 == 1);
    BD        = zeros(r,c);
    for m = 1:length(x15)
        BD(x15(m),y15(m)) = 1;
    end
    clear x15 y15
    [x15,y15] = find(d3_2 == 1);
    for m = 1:length(x15)
        BD(x15(m),y15(m)) = 1;
    end    
    %形态学滤波
    BD         = bwareaopen(BD,200);
    BD         = imfill(BD,'holes');

    %运动目标检测
    [x16,y16] = find(d2 == 1);
    [x17,y17] = find(BD == 1);
    
    Cf        = zeros(r,c);
    for m = 1:length(x16)
        Cf(x16(m),y16(m)) = 1;
    end
    for m = 1:length(x17)
        Cf(x17(m),y17(m)) = 1;
    end    
    
    SE1     = strel('ball',10,10);
    Cf      = imerode(Cf,SE1,'same');  

    %跟踪显示
    Cf2     = func_track(pixel_rgb(:,:,:,i),Cf);

    %下面的语句是显示上述各个步骤的图像处理效果
    figure(1);
    subplot(231);
    imshow(pixel_gray(:,:,i));title('原图');
    subplot(232);
    imshow(B(:,:,i),[]);title('背景提取');
    subplot(233);
    imshow(d2,[]);title('背景差获取运动目标');   
    subplot(234);
    imshow(BD,[]);title('三帧差分获取目标');   
    subplot(235);
    imshow(Cf,[]);title('最终提取效果');       
    subplot(236);
    imshow(Cf2,[]);title('最终目标跟踪效果');     
    drawnow;
    %内存清理
    clear x0 y0 x1 y1 x02 y02 x12 y12 x03 y03 x13 y13 x04 y04 x14 y14 x15 y15 x16 y16 x17 y17
A10-33

三、仿真结论

 

       从图的仿真结果可知,改进算法可以获得较为清晰的目标检测效果,整个检测结果,不存在目标空洞,也不存在噪声干扰,此外,对于区域面积较小的脚部区域也获得了完整的检测效果。最后,根据图的检测结果进行目标的跟踪,这个部分的仿真结果如图所示。将三种算法进行性能对比,分别从仿真时间,仿真性能两个方面进行对比。

       三种算法的仿真时间分别为0.213秒,0.153秒, 0.414秒。从仿真结果可知,三帧差法由于其算法结构较为简单,因此仿真时间最短,而本文所提出的改进算法,同时结合了背景差法和三帧差分法,因此其仿真时间最长,但是其仿真效果最好。

       通过上面的仿真结果可知:

优势:

  • 简单:这两种方法都相对简单,容易实现。
  • 适应性强:适用于相对静态背景下的运动目标检测,如监控摄像头等场景。
  • 实时性:计算开销较小,适用于实时应用。

难点和局限性:

  • 阈值选择:阈值的选择对于减少误报和漏报很关键,但往往需要根据具体场景进行调整。
  • 动态背景:当背景发生变化时,这些方法可能会导致误检测。
  • 部分遮挡:当目标被部分遮挡时,这些方法可能无法准确检测。

       总的来说,基于背景差分法和三帧差分法是一些简单但实用的目标检测方法,尤其适用于静态背景下的运动目标检测。在实际应用中,可以根据具体情况选择合适的方法,并进行参数调优以获得更好的检测结果。

  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于MATLAB的有限差分法热传导仿真与分析的研究,国内外都有较多的关注和发展。 在国内,很多研究机构和高校都在开展有限差分法热传导仿真与分析的研究。例如,清华大学、北京航空航天大学、哈尔滨工业大学等一流院校都有相关团队在进行研究。这些团队在MATLAB平台上开发了各种基于有限差分法的热传导仿真工具,并且对其进行了改进和优化,使其更适用于不同的应用场景。他们通过该方法研究了不同材料的热传导特性,如导热材料、复合材料等的热传导行为。此外,他们还将有限差分法与其他方法相结合,如有限元法、蒙特卡洛方法等,来解决更加复杂的热传导问题。 在国外,美国、英国、德国等发达国家也在该领域进行了广泛的研究。国外的研究主要聚焦于开发更高效、更准确的有限差分法算法,并将其应用于实际工程中。他们通过对热传导问题的仿真与分析,帮助工程师优化设计和提高效率。此外,国外的研究还注重与其他学科的交叉研究,如热流体力学、材料科学等,以寻求更全面的解决方案。 总体而言,基于MATLAB的有限差分法热传导仿真与分析的国内外研究现状都较为活跃。通过不断提升算法和与其他方法的结合,研究者们不仅能更好地理解热传导行为,还能为实际工程提供更优化的设计和解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值