不得不說matlab的圖像處理函數有點多,但速度有時也是出奇的慢。還是想c的指針,雖然有點危險,但速度那是杠杠的。
第二個matlab程式,對運動物體的識别與追蹤。
這裡我們主要運用幀差法實作運動物體與背景圖像的分離,由于視訊中的物體較為簡單,我們隻對兩幀圖像取幀差(也是為了提高速度)
對于運動物體的提取我們運用了matlab裡自帶的函數bwareaopen
bwareaopen(src,int),src為二值圖像,int為設定的聯通域的大小,是對幀差法,在轉化為二值的圖像進行操作,結果是将大小小于設定的int的連通域置為0;
對于第一幀與第二幀圖像運動物體的坐标的提取我們用了自帶的regionprops函數
regionprops(src,’‘)其中src為傳入的二值圖像,’‘内的為你所需要的屬性
具體屬性可以檢視matlab的help
這裡我們選用了其中的centroid屬性,傳回的時連通域的質心坐标,注傳回的第一個值為橫坐标,第二個值為縱坐标~
對于運動物體的追蹤我們用了質心追蹤,
在第一二三兩幀的幀間差的運動物體的質心求出來後,将質心做差得到的向量預測下一幀間差運動物體可能到達的位置,接下來在對這個位置進行局部的找質心,再做差如此循環。
追蹤大緻如圖(畫的不好):
這個相對與全局再次進行bwareaopen,regionprops,速度應該會快一下,而且這是進行局部地搜尋是以可以減小背景,或其他噪聲的影響。
如圖為直接進行幀間差分後的轉化的二值圖像,即使噪聲很大用局部追蹤也能跟上。
具體代碼:
fanction:
draw-rect
追蹤效果:
時間:
注(畫框函數引用網上現有的)
可能是matlab問題,這段視訊為4k,無法直接讀取,是以隻能将其轉化為圖檔逐幀讀取。
結果是還是太慢,而且不能預讀取,好像用這個無法實時,可能與圖檔為4k也有點關系有點傷