三帧差分法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三帧差分法的问题
大家帮忙看看这个三帧差分法的代码哪里出了问题?参照论坛上的相邻帧差法,改造成三帧差分法。
clc;
clear;
targetavi='SampleVideo.avi'; %%原始视频
resultavi='result.avi'; %%检测结果视频%%%%%%%%%%%%%%%%%%%%%%读取视频
mov=aviread(targetavi);
%mov=mmreader(targetavi);
fnum=size(mov,2);
%%%%%%%%%%%%%%%%%%%%%%建立结果视频
aviobj = avifile(resultavi);
aviobj.Quality = 100;
aviobj.Fps = 15;
%pression='Indeo5';
pression='None';
%%%%%%%%%%%%%%%%%%%%%%帧间差分法
for i=2:fnum
x=mov(i-1).cdata(:,:,:);
y=mov(i).cdata(:,:,:);
z=mov(i+1).cdata(:,:,:);
m=rgb2gray(x);
m=medfilt2(m);
n=rgb2gray(y);
n=medfilt2(n);
o=rgb2gray(z);
o=medfilt2(o);
q=im2double(n);
w=im2double(m);
p=im2double(o);
c=q-w;%%前两帧差分
b=p-q;%%后两帧差分
t=40; %%阈值,此值可以调节
t=t/256;%%转化为double型数据
k=find(abs(c)>=t);%%find函数作用是找到图c中的值大于t的点坐标
d=find(abs(b)>=t);%%find函数作用是找到图b中的值大于t的点坐标
c(k)=255;%%二值化的一
b(d)=255;
k=find(abs(c) d=find(abs(b) c(k)=0;%%二值化的零 b(d)=0; f=c&b; imshow(f); adata=cat(3,f,f,f);%%灰度图像生成视频必加此句 aviobj = addframe(aviobj,adata);%%生成视频 hold on; drawnow; hold off; end aviobj=close(aviobj); 显示的错误提示: ??? Error using ==> avifile.addframe>getInputType at 384 Invalid input argument. Each frame must be a numeric matrix, a MA TLAB movie structure, or a handle to a figure or axis. Error in ==> avifile.addframe at 58 inputType = getInputType(varargin{i}); Error in ==> ThreeFrameDifference at 61 aviobj = addframe(aviobj,adata);%%生成视频 TOP Matlab中文函数大全上线,欢迎大 家完善!点