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

目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

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

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
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: FPGA差法检测运动目标是一种广泛应用于视频监控系统中的运动物体检测算法。该算法通过比较不同视频之间的像素值差异,来检测视频中的物体运动情况。FPGA作为一种具备可编程性和高性能的硬件平台,可以为差法提供高效的实现方式。其核心原理是将两个相邻的视频进行比较,并计算出它们之间的像素点差值。当差值超过设定的阈值时,就认为物体在运动。整个算法通过FPGA硬件实现,可以大大提高运算速度和准确性,同时还具有低功耗和小尺寸等优势。 FPGA差法检测运动目标的应用非常广泛,它可以用于安防领域、智能交通系统、无人机悬浮系统、医疗器械等领域。在安防领域中,它可以用于监测危险区域的人员和车辆的移动情况。在智能交通系统中,可以用于车流量的统计和动态路况分析。在无人机悬浮系统中,可以用于跟踪目标或检测突发事件的发生。在医疗器械中,可以用于识别病人的体态变化和判断呼吸状况。 总之,FPGA差法检测运动目标在各个领域具有非常广泛的应用前景,有着巨大的市场潜力。它的高效性、准确性、低功耗以及小尺寸等优势,将有望带动智能化和自动化应用的发展。 ### 回答2: FPGA差法检测运动目标是一种基于FPGA(现场可编程门阵列)芯片的算法,它可以用于实时和高效地检测运动目标。该算法基于连续之间的差异,识别出运动目标。在该算法中,先从摄像头中获取一图像,将其存储在FPGA芯片内存中。接着,获取下一图像,计算两图像之间每个像素的绝对值差,将结果与预定的阈值进行比较,当差值超过阈值时,则判断该像素为动态目标。在多图像处理过程中,只有动态目标像素的灰度值被更新,静态目标像素的灰度值不变,从而消除了静态目标对系统的干扰。 该算法的优点是能够在硬件实现的时候获得高速的检测能力,且使用的资源较少。这种算法适用于需要实时快速检测的场合,如安全防范领域,可以实现快速发现潜在的危险。但同样也存在一些缺点,例如对于高速运动目标的检测精度可能不高,当存在误检时,算法的误检率较高。 总的来说,FPGA差法检测运动目标算法是一种高效实用的检测方法,可以应用于物体跟踪、安全监控等领域。但用户在使用时需要根据实际情况来合理调整参数和优化算法,从而提高检测结果的准确性和可靠性。 ### 回答3: FPGA(Field-Programmable Gate Array)是一种集成电路,可以根据用户要求进行重新编程,并且可以提供高度灵活性的应用。在目标检测领域中,FPGA可以使用差法来检测运动目标。 差法是通过对连续两个图像进行比较来检测对象在场景中移动的方法。在每个时刻,FPGA会将当前图像与前一进行比较,这样就可以找到两张图像之间的差异。如果这个差异超过了一个指定的阈值,那么FPGA就会判定存在运动目标的存在。 FPGA差法检测运动目标具有以下优点: 首先,由于FPGA具有高度的并行处理能力,因此可以快速处理大量数据,从而实现高效的目标检测。 其次,FPGA可以在实时性要求很高的应用中进行目标检测,比如自动驾驶领域中行人、车辆等的检测。 最后,由于FPGA可以根据用户需求进行重新编程,因此可以获得更精确的检测结果和更快的处理速度。 总之,FPGA差法检测运动目标是一种高效、准确、实时性强的检测方法,可广泛应用于安防监控、自动驾驶、智能家居等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值