資源簡介
視頻跟蹤完整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 加權質心定位
評論
共有 條評論