%--------------------------------------------------------------------------
% 基于中位数算法的运动目标检测
% 第1种实现方法
%--------------------------------------------------------------------------
%*******************************读取视频数据******************************** % 调用aviread函数读取视频文件
vid = aviread('WalkingMan.avi')
size(vid(1).cdata) % 查看第1帧的大小,也是每一帧的大小
vid(1).colormap % 查看第1帧的colormap值
%*****************************数据类型的转换******************************** % 把vid的cdata字段的取值转换成一个240×360×3×80的四维数组IM
IM = cat(4,vid.cdata);
size(IM) % 查看IM的大小
[m,n,k,h] = size(IM); % 把IM的大小赋给四个变量
% 把IM转换成一个80行,240×360×3列的矩阵
I = reshape(IM,[m*n*k,h])';
%********************调用median函数求中位数,进行视频图像分割**************** I = median(I); % 求I矩阵中各列元素的中位数
I = reshape(I,[m,n,k]); % 将向量I转成240×360×3的三维数组,得到背景图像 figure; % 新建一个图形窗口
imshow(I); % 显示背景图像
figure; % 新建一个图形窗口
imshow(IM(:,:,:,1) - I); % 显示第1帧中的目标图像
%--------------------------------------------------------------------------
% 基于中位数算法的运动目标检测
% 第1种实现方法
%--------------------------------------------------------------------------
% 调用mmreader函数创建读取视频文件的多媒体阅读对象WalkManObj
WalkManObj = mmreader('WalkingMan.avi');
% 根据多媒体阅读对象WalkManObj,读取视频的各帧图像数据
IM = read(WalkManObj, [1, inf]);
[m,n,k,h] = size(IM); % 把IM的大小赋给四个变量