运动分析1 背景差法(单高斯模型)

运动分析1 背景差法

标签(空格分隔): 未分类


  • 运动检测:将运动前景和背景分离。
  • 两种思路:直接利用前景 vs 先得到背景,前景 = 输入 - 背景
  • 常用的运动检测方法:背景差法、光流、帧间差分、前景建模。

背景差法(background subtraction)

原理:|当前图像-背景图像| < 阈值T,背景;|当前图像-背景图像| >= 阈值T,前景。
若已知背景(若干背景逐点均值),假设背景在图像序列中总是最经常被观测到。

单高斯模型

背景模型:每个像素用一个高斯分布描述其在不同时刻的灰度分布
运动目标检测_单高斯模型

背景模型主要有单模态多模态两种,前者在每个背景像素上的灰度分布比较集中,可以用单分布概率模型来描述,后者的分布则比较分散,需要多分布概率模型来共同描述。在许多应用场景,如水面的波纹、摇摆的树枝、飘扬的旗帜、监视器屏幕等,像素值都呈现出多模态特性。最常用的描述场景背景像素灰度分布的概率密度函数是高斯分布。

  • 背景图像的每一个像素满足高斯分布,$B(x,y)--N(u,\sigma)$, $p(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{(x-u)^2}{2 \sigma^2}}$每一个点(x,y)都包含均值u和方差$\sigma$。

  • 计算一段时间内的视频序列中每个点的均值u和方差$\sigma$,作为背景模型。

  • 对于一幅包含前景的任意图像G,对于图像上的每一个点(x,y)计算,若|G(x,y) - B(x,y)| < T,则认为是背景,否则认为是前景。

  • 背景的更新:每一帧图像都参与背景的更新。$B_t(x,y) = pB_{t-1}(x,y)+(1-p)G_t(x,y)$
    其中,p为一个常数,用来反映背景更新率,p越大,背景更新的越慢。一般情况下,背景更新后$\sigma$的变化很小,所以在更新背景以后一般不再更新$\sigma$。
  • 总结:(1)不适合背景有抖动的场景;(2)运动模糊存在时,前景有移动。
clear, close;
addpath('include_func')
fileName = 'input.avi';   

%读取视频帧
Video = VideoReader(fileName);  
nframes = Video.NumberOfFrames;  %帧数
Height = Video.Height;
Width = Video.Width;
%播放视频
figure(1);show_video(fileName);
%0. 参数
lambda = 2.5;%判断背景与前景的阈值
alpha = 0.5;%背景更新率,alpha太大,背景更新的慢。【0,1】
%1. 初始化
u = double(rgb2gray(read(Video,1)));%3通道,背景初值 = 第一帧
std = 20;
b_sigma = std*ones(size(u));%背景标准差
b_var = std^2*ones(size(u));%背景方差

%2. 背景更新
for i = 1:nframes
    fore =  zeros(size(u));%前景
    G = double(rgb2gray(read(Video,i)));%读取第i帧

    %2.1 若|G-U|>=当前std,则为前景;反之,为背景
    fore = (abs(G - u) >= lambda * b_sigma);%前景 = 当前图像 - 背景
    fore = uint8(255*fore);
    %2.2 否则,背景
    u = (1 - alpha)*u+ alpha*G;%u_t =(1-alpha)* u_t-1 + alpha*G_t
    b_var = (1 - alpha) * b_var + alpha * (G - u).^2;
    b_sigma = sqrt(b_var);

    figure(1);imshow(u,[]),title(['第',num2str(i),'帧背景']);
    figure(2);imshow(fore,[]),title(['第',num2str(i),'帧前景']);
    disk = strel('disk',1); 
    figure(3);imshow(imdilate(imerode(fore,disk),disk),[]),title(['第',num2str(i),'帧前景 先腐蚀再膨胀']);

    %将每帧前景存为*.jpg
    imwrite(uint8(fore*255),['./result/', int2str(i),'.jpg']);
end
img2avi( './result/','result.avi');
figure(1);show_video('result.avi');

这里写图片描述
对微小的变化很敏感,对光照变化敏感。

猜你喜欢

转载自blog.csdn.net/haronchou/article/details/81780261