%--------------------------------------------------------------------------

%                        基于中位数算法的运动目标检测

%                               第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的大小赋给四个变量

% 把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帧中的目标图像

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐