91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

運動目標檢測在計算機視覺,圖像處理,模式識別等多領域有著廣泛的應用,經歷了多年的研究和探索,針對運動目標檢測的算法層出不窮,我們也積累了許多相關的算法。但是我們還遠沒有完成對這個充滿挑戰的領域的探索。本文對運動目標檢測的技術進行了一定的研究,實現了基于canny算子和光流法相結合的運動目標檢測方法。為了能夠準確把握這個行業的動態,本文首先介紹了運動目標檢測的三大經典方法:背景相減法,幀差法,光流法。同時比較了各自的優缺點。幀差法具有易實現,計算量小的優點,但是卻無法準確的檢測出運動目標的完整輪廓。光流法具有對不斷運動的運動目標進行目標檢測,但是它卻有很大的計算量,同時對噪聲也比較敏感。為了可以對運動目標進行更好的識別,我們提出了邊緣檢測算子與光流法相結合的新方法。在對多種邊緣檢測算子進行了了解之后,我們確定了利用canny算子進行邊緣檢測,并且結合光流法進行運動目標檢測的方法。在用canny算子檢測出運動物體邊緣之后,借助光流法計算出物體的運動場,同時結合最大類間方差法分辨出運動目標和背景,接著將物體的邊緣信息和物體的運動信息進行融合,最后運用數學形態學的方法對結果進行處理,得到最終的運動目標。通過實驗,我們發現該方法既克服了幀差法不能準確檢測出運動物體輪廓,和光流法抗噪聲能力差的缺點,可以準確檢測運動目標,對運動目標具有更好的檢測效果

資源截圖

代碼片段和文件信息

clear?all
videofile=‘people.avi‘;%讀取視頻文件
%videofile=‘carreco.avi‘;
%videofile=‘viptraffic.avi‘;
info=mmfileinfo(videofile);%獲取視頻文件信息
cols=info.Video.Width;%列數
rows=info.Video.Height;%行數
%創建視頻對象,讀取視頻文件
hreader=vision.VideoFileReader(videofile‘ImageColorSpace‘‘RGB‘‘VideoOutputDataType‘‘single‘);
%創建光流對象用于檢測運動方向和速度
hflow=vision.OpticalFlow(‘OutputValue‘‘Horizontal?and?vertical?components?in?complex?form‘‘ReferenceframeDelay‘3‘Method‘‘Horn-Schunck‘);
%創建兩個均值對象,用于分析光流矢量
hmean1=vision.Mean;
hmean2=vision.Mean(‘RunningMean‘true);
%創建均值濾波對象
hfilter=vision.MedianFilter;
%創建形態學關閉對象,填充分割以后的汽車空洞
hclose=vision.MorphologicalClose(‘Neighborhood‘strel(‘line‘545));
%創建BLOB分析對象,用于從視頻中分割汽車
hblob=vision.BlobAnalysis;
hblob.CentroidOutputPort=false;?
hblob.AreaOutputPort=true;
hblob.BoundingBoxOutputPort=true;
hblob.OutputDataType=‘double‘;
hblob.MinimumBlobArea=250;
hblob.MaximumBlobArea=3600;
hblob.MaximumCount=80;
%創建形態學腐蝕對象,移除不需要的對象
herode=vision.MorphologicalErode(‘Neighborhood‘strel(‘square‘2));
%創建形狀嵌入對象,在視頻中添加形狀,框出汽車邊界。
hshape1=vision.ShapeInserter(‘BorderColor‘‘Custom‘‘CustomBorderColor‘[0?1?0]);
hshape2=vision.ShapeInserter(‘Shape‘‘Lines‘‘BorderColor‘‘Custom‘‘CustomBorderColor‘[255?255?0]);
htext=vision.TextInserter(‘Text‘‘%4d‘‘Location‘[1?1]‘Color‘[1?1?1]‘FontSize‘12);
sz=get(0‘ScreenSize‘);
pos=[(sz(3)-4*(cols+75))/2?(sz(4)-rows)/2?cols+60?rows+80];
hvideo1=vision.VideoPlayer(‘Name‘‘Original?Video‘‘Position‘pos);
%psos(1)=pos(1)+cols+5;
psos(1)=pos(1)+cols+15;%行數加上15個像素,實際上那個是在進行平移
hvideo2=vision.VideoPlayer(‘Name‘‘Motion?Vector‘‘Position‘pos);
pos(1)=pos(1)+cols+15;
hvideo3=vision.VideoPlayer(‘Name‘‘Thresholded?Video‘‘Position‘pos);
pos(1)=pos(1)+cols+15;
hvideo4=vision.VideoPlayer(‘Name‘‘Result?Video‘‘Position‘pos);

%從視頻中檢測追蹤汽車
%顯示光流矢量像素點
[xposypos]=meshgrid(1:5:cols1:5:rows);%grid?網格,坐標方格
xpos=xpos(:);
ypos=ypos(:);
locs=sub2ind([rowscols]yposxpos);

%循環處理視頻每一幀,直到文件結束
while?~isDone(hreader)
????pause(0.3);
frame=step(hreader);
gray=rgb2gray(frame);

%計算光流場矢量,返回一個復數矩陣,分別代表每個像素點的U,V
%光流基本方程,dit(I)+It=0;
flow=step(hflowgray);%就算階躍響應,實際上是在計算光流失量
%繪制光流圖系統默認每隔5行5列選擇一個像素點,繪制他的光流圖,20表示將光流幅值放大20倍,lines?每行對應一條曲線,
lines=[xposyposxpos+20*real(flow(locs))ypos+20*imag(flow(locs))];
%將光流矢量添加到視頻幀上
vector=step(hshape2framelines);%實際上就是求取一個階躍響應
magnitude=flow.*conj(flow);%conj求取復數的共軛
threshold=0.5*step(hmean2step(hmean2magnitude));
carobj=step(hfiltermagnitude>=threshold);
carobj=step(hclosestep(herodecarobj));
[areabbox]=step(hblobcarobj);
grow=30;
idx=bbox(:1)>grow;
ratio=zeros(length(idx)1);
ratio(idx)=single(area(idx1))./single(bbox(idx3).*bbox(idx4));
flag=ratio>0.45;

count=int32(sum(flag));
%count=count+1;
%bbox(~flag:)=int32(-1);
result=step(hshape1framebbox);
result(grow:grow+1::)=1;
result(1:151:30:)=0;
result=step(htextresultcount);

%顯示處理結果
step(hvideo1frame);
step(hvideo2vector);
step(hvideo3car

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-10-10?15:39??源碼\
?????文件????????3441??2016-05-23?14:56??源碼\optical.m
?????目錄???????????0??2018-10-10?15:39??演示\
?????文件????16820240??2016-05-16?11:04??演示\9420.exe
?????文件??????????64??2018-10-10?16:34??說明.txt
?????目錄???????????0??2018-10-10?15:38??需求\
?????文件???????45568??2018-10-12?13:38??需求\4-畢業論文(設計)任務書?-基于canny算子和光流法的運動目標檢測算法實現.doc

評論

共有 條評論