VIBE背景建模MATALB代码

VIBE模型

Vibe 是一种通用的运动目标检测算法,对于视频流类型、颜色空间、场景内容没有特定要求。首次将随机选择机制引入到背景建模中,通过随机选择样本估计背景模型的方式描述实际场景的随机波动性。通过调节时间二次抽样因子,使极少的样本值就能覆盖所有的背景样本,兼顾了准确率和计算负载。抑噪能力强,噪声等干扰信息在传播之前须与背景模型相匹配,显而易见,无法匹配,从而抑制了干扰信息的传播。VIBE是一种像素级的背景建模、前景检测算法,该算法主要不同之处是背景模型的更新策略,随机选择需要替换的像素的样本,随机选择邻域像素进行更新。
背景模型的初始化:存储一个样本集(像素点、及该像素的邻域)。
背景检测过程:每个新的像素值和样本集比较判断是否属于背景。1)计算新像素值和样本集中每个样本值的距离,若距离小于阈值,则近似样本点数目增加。2)如果近似样本点数目大于阈值,则认为新的像素点为背景。
背景模型更新:1)无记忆更新策略。每次确定需要更新像素点的背景模型时,以新的像素值随机取代该像素点样本集的一个样本值。2)时间取样更新策略:并不是每处理一帧数据,都需要更新处理,而是按一定的更新率更新背景模型。当一个像素点被判定为背景时,它有1/rate的概率更新背景模型。rate是时间采样因子,一般取值为16。3)空间邻域更新策略:针对需要更新像素点,随机的选择一个该像素点邻域的背景模型,以新的像素点更新被选中的背景模型。
VIBE模型主要优点:1、思想简单,易于实现。2、样本衰减最优。3、运算效率高。
主要的缺点:1、静止目标易为背景。2、阴影前景。3、运动目标不完整问题。

VIBE背景建模

clear,close all;
% [filename,pathname] = uigetfile('*.avi','choose the video name:');%选择视频
video = VideoReader('person1.mp4');%改为自己的路径
height = video.Height;
width = video.Width;

%参数
NumFrames = video.NumberOfFrames;
%原视频
for f = 1 : NumFrames
    imageRGB1 = read(video,f);
    figure(1),imshow(imageRGB1,[]);
end
%
cardinality = 2;%基数
r = 20;%给定半径
n = 20;
%


%初始化
bg = zeros(height,width,n);
for  nn = 1 : n
    imrgb = read(video,nn);
    imgray = rgb2gray(imrgb);
    bg(:,:,nn) = imgray;
end
bgpad = padarray(bg,[1 1],'replicate');

%随机更新

for f = n+1 : NumFrames
    imageRGB = read(video,f);
    image = rgb2gray(imageRGB);
    for i = 1:height
        for j = 1:width
            div = abs(bg(i,j,:) - double(image(i,j)));
            logic = div < r;
            bignum =  sum(logic);
            if bignum > cardinality
%                 随机选择初始化背景中的一个点用新点进行替换
%                 rnum = rand(n,1);
%                 maxnum = find(rnum  == max(rnum));
                randz = randi(n);
                %bg(i,j,int8(rand(1)*n)) = image(i,j);
                bgpad(i+1,j+1,randz) = image(i,j);
%                 随机改变(i,j)邻域
                randy = randi([-1 1]);
                randx = randi([-1 1]);
                bgpad(i+1+randy,j+1+randx,randz) = image(i,j);    
%                
            end
        end
    end
    randbg = randi(n);
    out = bgpad(2:height+1,2:width+1,randbg);%背景
    figure(2),imshow(out,[]);
    drawnow;
end
finalbg = mean(bgpad(2:height+1,2:width+1),3);%背景
figure(3),imshow(finalbg,[]);
drawnow;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值