matlab中视频帧间差分

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%本程序主要用于从视频中读入帧,并且进行从任意位置的连续两帧差分,差分的结果于阈值比较,从而提取出运动目标的轮廓,处理车的效果比人的效果要好
%参数设置 N:处理连续的6帧,start从第100帧开始处理,阈值设置threshold=20
clear all;
clc;
aviinfo('traffic1.avi')                                %显示视频的信息,视频使用aviread读取之前通过winavi9.0将格式转换为ZJmedia uncompress RGB24
avi=aviread('traffic1.avi');                           %使用aviread读取视频,注意视频的格式,aviread读取的视频有格式限制
N=6;                                             %考虑6帧的帧间差分法(需要读取前7帧)
start=20;                                        %start=100,从第100+1帧开始连续读7帧
threshold=50;
for k=1+start:N+1+start                         %处理从第101到第107帧                   
        avi(k).cdata=rgb2gray(avi(k).cdata);      %将彩色图像转换为灰度图像
        %avi(k-start).cdata=avi(k).cdata;
end
  [hang,lie]=size(avi(1+start).cdata);            %以avi(1+start).cdata的格式生成一个矩阵
 
  alldiff=zeros(hang,lie,N);                       %生成一个三维的矩阵alldiff用于存储最终的各个帧的差分结果        
 
for k=1+start:N+start
  diff=abs(avi(k).cdata-avi(k+1).cdata);           %邻帧差分

           %idiff=diff>20;                          %二值化,阈值选择为20,阈值调整
           idiff=diff>threshold;                           %idiff中的数据位逻辑值,diff中的数值为unit8
           alldiff(:,:,k)=double(idiff);           %存储各帧的差分结果,这里为什么要转换成double型的?????
end

%观察帧间差分的二值化结果,这里观察前五帧的相邻两帧差分二值化结果
for k=1+start:N+start
subplot(3,2,k-start),imshow(alldiff(:,:,k)),%title('第1,2帧差分')
title(strcat(num2str(k),'帧','-',num2str(k+1),'帧'));
end

 

  • 0
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值