帧差法的实现非常简单:
如图可见,由目标运动引起的运动变化区域包括运动目标在前后两帧中的共同位置(图中黑色区域)、在当前帧中新显露出的背景区域和新覆盖的背景区域三部分。
数学原理:
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Author: Ziheng H. Shen @Tsinghua Univ. %HybridGaussModel @Digital Image Process Practice %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc;close all;clear all; video = VideoReader('768x576.avi'); numFrame = video.NumberOfFrames; %% 计算帧差 for i = 1 : 1: numFrame frame0 = read(video,i); frame1 = read(video,i+1); frameSub = abs(rgb2gray(frame1)-rgb2gray(frame0)); %使用最大类间方差法找合适阈值 thr = graythresh(frameSub); object = im2bw(frameSub, thr); %利用形态学进行二值图像处理 disk = strel('disk',1); figure(i); subplot(1,3,1);imshow(frame0,[]); subplot(1,3,2);imshow(frame1,[]); subplot(1,3,3);imshow(imdilate(imdilate(imerode(object,disk),disk),disk)); end输出结果:
