本文根據Masayuki Yokoyama等人的論文A contour-based moving object detection and tracking結合自己的理解而成,如果對論文感興趣的,可以點擊開啟連結 下載論文,有問題歡迎交流。
作者提出了一種基於梯度光流法以及邊緣運算元的線條聚類的運動目標檢測演算法。與傳統的基於灰階、顏色等特徵的方法相比,該方法具有更魯棒的效能。演算法通過結合光流法檢測的運動資訊以及邊緣演算法檢測到的邊緣資訊來進行情境中的線條的重建,將重建的線條資訊與背景模型的線條資訊相比,得到運動目標的線條資訊。接著,採用Snake來對這些線條進行聚類,從而得到運動目標的輪廓資訊,並對輪廓進行跟蹤,實現跟蹤的目的。
下面對論文的內容安排逐一進行介紹。
1) 光流法
對於2D映像,一般採用以下形式來對映像的運動資訊進行近似(光流法假設相鄰幀間的灰階差異很小,幾乎不變):
其中I(x,t)表示t時刻映像I中x處的灰階值。將上式進行泰勒展開,則可以得到:
其中,△I是梯度,It是時域差分,v表示速度向量。
而對於運動資訊的檢測,則是根據光流法得到的速度向量v,計算其分量的模的和,與某一閾值進行比較,從而得到映像的運動像素資訊,公式表示如下:
其中u,v分別是表示通過光流法計算得到的速度的水平分量和垂直分量。
2)邊緣檢測
文章中對於邊緣檢測,採用了Canny運算元,因為Canny運算元從理論上來說是一種最優的運算元,而且具有單像素的特性。對於通過Canny運算元檢測得到的映像edge(x)(其中edge(x)=1表示邊緣,否則是背景),如果對應的edge(x)=1,即是邊緣像素,那麼進一步來判斷其|u|+|v|的大小,如果其中大於既定的閾值,則將其標註為運動資訊,即前景像素;同時,將將邊緣映像中的該像素置0。如此遍曆完所有的像素點,那麼就可以得到一個前景掩膜fgMask,以及一個邊緣映像中未標註為前景的邊緣映像,記為unMaskEdge,該映像將在後面用到。
3)輪廓提取
文章中輪廓提取主要分為4個步驟,分別是線條複原、基於線條的背景減除、聚類和主動輪廓。下面將對著四個步驟進一步行進行分析。
(1)線條複原
通過上面的方法提取的運動目標資訊會出現很多的漏檢,這主要是因為:① 在平滑的地區,通過光流法提取的運動向量v比較小,導致運動目標的資訊沒有被提取出來;② 情境中存在邊緣資訊,當運動目標的邊緣資訊與邊緣資訊重合時,將會導致運動資訊的漏提。因此需要根據fgMask和unMaskEdge對線條進行複原。具體操作:遍曆unMaskEdge中的像素,如果在fgMask的鄰域中存在前景像素(且該像素不是交叉像素,crossing-point),那麼該像素就被判為前景像素,如此遍曆完unMaskEdge中的所有像素。
(2)基於線條的背景減除
根據前面檢測的前景,檢測得到其的運動線條資訊{P1, P2,...,Pn},背景的線條用Sbg表示,如果線條滿足下式,則認為是背景線條:
(3)聚類
本文的聚類採用的是距離和運動向量的最近鄰法則來實現的。假設有兩條線條S1={p1,p2,...,pn}, S2={q1,q2,...,qn},如果他們滿足下式,則認為他們是同一線條。
其中(Up,Vp)表示P處的運動向量。
(4)主動輪廓(Active Contours)
文中採用Snake來對提取的線條進行目標的輪廓。輪廓{P1,P2,...Pn}的離散能量函數表示為:
對於Snake的計算,文中通過計算每個聚類的凸包作為Snake的初始輪廓。
這裡對於運動目標的跟蹤部分不繼續討論,用興趣的讀者可以根據前面介紹的連結下載來仔細瞭解。另外,博主也對演算法進行過實驗,與文章中介紹的有少許不同,主要是取視頻序列的前幾幀得到的線條作為背景模型(另外每隔固定間隔對背景進行重建或更新),還有就是對最後的主動輪廓Snake沒有進行處理,其他的都相同。博主實現的演算法中,對光照有一定的魯棒性,但光照還是對該演算法有影響,處理速度還行,大概在16幀左右。
最後上幾幅論文中的實驗圖。