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