资源简介
视频跟踪完整matlab程序 可运行
视频跟踪完整matlab程序
代码片段和文件信息
clearclcclose all
%设置分割阈值和电机运行速率
alfa=0.4;v=80;
%设置串口参数
s=serial(‘COM4‘‘BaudRate‘9600‘Parity‘‘none‘‘DataBits‘8‘StopBits‘1‘Terminator‘‘CR‘);
%开启串口
try
fopen(s);
catch
fclose(s);fopen(s);
end
%创建摄像头图像输入目标
set(gcf‘doublebuffer‘‘on‘);
vid = videoinput(‘winvideo‘1);
%vid = videoinput(‘winvideo‘);
%设置图像获取的参数
get(vid);
get(getselectedsource(vid));
set(vid‘TriggerRepeat‘Inf‘ReturnedColorSpace‘‘rgb‘);
%set(vid‘TriggerRepeat‘Inf‘ReturnedColorSpace‘‘rgb‘‘ROIPosition‘[80 60 400 300]);
vid.frameGrabInterval = 5;
vid_src = getselectedsource(vid);
set(vid_src‘Tag‘‘motion detection setup‘);
%获取背景图像
%连续采集三副图像,将图像的均值图作为背景
start(vid);
data = getsnapshot(vid);
data00=im2double(data);%图像数据类型转换
data = getsnapshot(vid);
data00=data00+im2double(data);
data = getsnapshot(vid);
data00=data00+im2double(data);
data00=data00/3;
%灰度变换
fig1=rgb2gray(data00);
%fig1=sqrt(data00(::1).^2+data00(::2).^2+data00(::3).^2);
%增加对比度
minf=min(fig1(:));
maxf=max(fig1(:));
fig1=(fig1-minf)/(maxf-minf);
%获取图像分辨率
[mn]=size(fig1);
%显示背景
figure(1);imshow(fig1);
pause(5);
%采集当前图像
data = getsnapshot(vid);
flushdata(vid); %清空内存
data=im2double(data);
fig2=rgb2gray(data);
%fig2=sqrt(data(::1).^2+data(::2).^2+data(::3).^2);
minf=min(fig2(:));
maxf=max(fig2(:));
fig2=(fig2-minf)/(maxf-minf);
%显示当前图像
figure(2)imshow(fig2);
%当前图像与背景图差分
dfig=abs(fig2-fig1);
%差分后的图像二值化
dfig=im2bw(dfigalfa);
%figure(3)imshow(dfig);
%去噪
newImage = imfill(dfig ‘holes‘);
newImage =~newImage;
newImage = imfill(newImage ‘holes‘);
newImage =~newImage;
%计算图像中目标数
[labelednumobjects] = bwlabel(newImage8);
%测出目标图像参数
graindata = regionprops(labeled‘basic‘)
%获取图像中最大目标
biggrain = find([graindata.Area]==max([graindata.Area]))
%获取图像模板
temp=floor(graindata(biggrain).BoundingBox);
temp1=temp(1)+1;
temp2=temp1+temp(3)-1;
temp3=temp(2)+1;
temp4=temp3+temp(4)-1;
fig0=fig2(temp3:temp4temp1:temp2);
[m0n0]=size(fig0);
figure(3)imshow(fig0);
pause(3);
count=0;d=0;fig1=fig2;
while(count<10)
%tic
count=count+1;
%连续帧差法获取最小匹配搜索区域
data = getsnapshot(vid);
flushdata(vid);
data=im2double(data);
fig2=rgb2gray(data);
%fig2=sqrt(data(::1).^2+data(::2).^2+data(::3).^2);
minf=min(fig2(:));
maxf=max(fig2(:));
fig2=(fig2-minf)/(maxf-minf);
%如果d为0表示摄像机向右转图像向右移动
if(d==0)
%计算前帧在这一帧的位置i
aa=fig2-fig1(:1)*ones(1n);
aa=sum(aa.^2);
[tempi]=min(aa);
%帧差获得运动区域
dfig=abs(fig2(:i:n)-fig1(:1:n+1-i));
fig=fig2;fig(:i)=0;
dfig=im2bw(dfigalfa);
[IJ]=find(dfig);
%得到新搜索匹配区域
mm1=floor(max(min(I)-m0/21));
mm2=floor(min(max(I)+m0/2m));
nn1=floor(i-1+max(min(J)-n0/21));
nn2=floor(i-1+min(max(J)+n0/2n+1-i));
fig(mm1:mm2nn1)=0;
fig(mm1:mm2nn2)=0;
fig(mm1nn1:nn2)=0;
fig(mm2nn1:nn2)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4541 2009-02-18 21:29 dongtaigz12_3\dongtaigz12_3.m
目录 0 2010-04-19 10:24 dongtaigz12_3
----------- --------- ---------- ----- ----
4541 2
- 上一篇:基于神经网络的文本无关的说话人识别程序
- 下一篇:matlab 加权质心定位
评论
共有 条评论