运动检测-时间差分法

原理:

时间差分法其实就是让视频的两帧做差,从而得到变化的像素,再取一个阈值,小于阈值的变化值忽略,大于阈值的变化值保留下来。它的优点就是算法简单,速度快。

本程序中,阈值是通过多次实验得到的一个针对本视频比较好的一个值,这种方法自适应性比较差,这也是它的一个缺点。代码如下:

%本程序是主程序,用于实现时间差分法进行运行检测

path='e:\test-pic\hall.yuv';
start=1;
stop=30;
yuvx=288;
yuvy=352;
pic1=rgb2gray(loadYUV(path,yuvx,yuvy,start,1));


%%%%%%%%%%%%%%%%%%
%构建高斯滤波算子
%%%%%%%%%%%%%%%%%%
sigma=1;
Gx=floor(3*sigma+0.5);
x=-1*Gx:1*Gx;
y=x;
[x,y]=meshgrid(x,y);
z=1/(2*pi*sigma^2)*exp(-1*(x.^2+y.^2)/(2*sigma.^2));
    %高斯算子归一化
z_sum=sum(sum(z));
z=z/z_sum;
mesh(z);
pic1=filter2(z,pic1);

%求时间图像
for i=2:stop-start
    pic2_rgb=loadYUV(path,yuvx,yuvy,start+i,1);
    pic2=rgb2gray(pic2_rgb);
    pic2=filter2(z,pic2);
    picmove=abs(pic2-pic1);
    pic1=pic2;
    
    picmove(picmove<20)=0;
    picmove(picmove>20)=255;
    
    %显示
    figure(1);
    str=strcat('第',num2str(start+i),'帧');
    %text(1,1);
    subplot(1,2,1);
    imshow(pic2_rgb);
    title(str);
    
    subplot(1,2,2);
    imshow(uint8(picmove));
    pause(0.03);
end

实验效果图如下,这是一个监控的图像,背景是固定的,画面中只有人是移动的,可以看出,摄像头固定的情况下,时间差分法还是比较理想的。

运动检测-时间差分法_第1张图片





你可能感兴趣的:(计算机视觉)