沈洋
(上海海事大學信息工程學院,上海 201306)
現今,傳統(tǒng)的水上船舶監(jiān)控方法已經無法滿足人們的要求,無人機具有體積小、操作方便等優(yōu)勢,因此基于無人機的水上船舶監(jiān)控已經成為水上交通管制一個不可或缺的組成部分。其中運動目標檢測算法是核心算法,特別是具有良好魯棒性、實時性能好的算法,對于實現更好的水上交通監(jiān)管具有重要意義。
常見的運動目標檢測的算法有三種,分別是幀差分法、光流法以及背景差分法。幀差分法是將兩幀圖像相減,然后將得到的差值和特定的閾值進行比較,最終得到運動目標,由于兩幀之間的時間間隔較短,所以對于運動緩慢的視頻幀而言,相鄰兩幀之間差別不大,檢測效果并不好;光流法檢測運動目標的思想是根據光流場的變化,狀態(tài)理想時,它的檢測效果較好,但是一旦光照因素發(fā)生變化,就會出現誤檢的情況,并且它計算量大,對于硬件的要求較高,而且實時性不好;背景差分法是將當前幀的圖像和建立好的背景模型做減法運算,所以背景模型建立的好壞與否直接關系到最后的檢測結果是否準確,所以背景差分法對背景模型的建立具有很高的要求。
Vibe算法是由Olivier Barnich等知名學者提出的一種像素級背景建模(前景檢測)的算法。其他的運動目標檢測算法的背景模型的建立都需要多幀圖像才能完成,Vibe算法的模型初始化只用了視頻圖像的第一幀就完成了,從第二幀圖像就開始檢測運動目標,具有良好的實時性和適應性,但是也存在很多缺陷。例如,在視頻第一幀圖像就有運動目標的情況下,Vibe算法能夠檢測出運動目標,同時在原來的位置也會檢測出一個虛假的運動區(qū)域。另外,當運動目標運動速度緩慢時,該算法會將該運動目標當作背景,檢測結果中也會有大量的空洞。對于Vibe算法的各種缺點,本文針對無人機航拍視頻中的船舶檢測問題,在Vibe的基礎上,提出了一種新的低空航拍視頻中的船舶檢測方法,將傳統(tǒng)的幀差算法和Vibe算法進行融合,實現了對無人機航拍視頻中的船舶檢測,并且準確性、完整性都有所提高。
Vibe算法的背景模型建立與更新首次運用到了隨機選擇機制和鄰域傳播機制,是一種基于樣本的背景建模方法[1]。Vibe算法為每一個像素建立一個樣本集,這個樣本集包括該位置過去時刻的像素值和它的鄰域位置上的像素值,然后通過對比樣本集中的像素和該位置現在的像素值,來判斷此像素是前景還是背景,再對背景模型隨機的進行更新[2]。Vibe算法的基本原理主要由背景模型初始化、前景檢測和背景模型更新這三大部分組成[3-5]。
在Vibe算法的背景模型中,每個背景像素點都有一個屬于自己得樣本集合,是否屬于背景像素點還需要進一步的比較才能確定。具體的思想就是在八鄰域模型(如表1所示)中為每個像素點存儲了一個樣本集,這個樣本集由該點過去的像素值和其鄰點的像素值的采樣值組成,通過對比樣本集和新的像素值,來判斷該點是背景點像素點,還是前景目標像素點。如果該點是屬于背景像素點,那么它和樣本集中的像素值應當差別不大。如圖1所示,SR(V(x))是X為中心R為半徑的圓形區(qū)域,V(x)表示X點處的像素值;M(x)={V1,V2,…,VN}為X處的背景樣本集(樣本集大小為N);通過比較 SR(V(x))與 M(x)交集的個數是否大于給定的閾值#min,如果SR(V(x))與M(x)交集的個數大于或者等于給定的閾值#min,那么就認為X點屬于背景點。這就完成了像素點是前景還是背景的判斷。
背景模型的更新就是使得背景模型能夠跟隨實際場景中的背景的變化做實時的更新,例如背景物體發(fā)生變化,光照發(fā)生變化等。在Vibe算法中,若某點被劃分成背景像素點,那么它做背景更新的概率為1/φ。具體的思想為:每一個背景點有1/φ的概率去更新自己的模型樣本值,同時也有1/φ的概率去更新它的鄰居點的樣本值。φ為時間采樣因子。這種采用隨機選取的更新方法可以是樣本值具有平滑的生命周期。由于是隨機更新,所以每個樣本都有相同的幾率被更新,這樣一個樣本值在時刻t不被更新的概率是(N-1)/N,假設時間是連續(xù)的,那么在dt的時間過去后,樣本值保持不變的概率是:
可以看出樣本更新與時間無關,采樣的方式是無記憶的,這也提高了算法的動態(tài)適應能力。
表1 V(X)的八鄰域模型
圖1 模型像素值比較示意圖
Vibe算法具有良好的適應性,能夠在多種場景下適用,通過Vibe算法的檢測原理不難看出,從背景模型的建立,前景目標的檢測到最后的背景模型的更新,比較簡單,易于實現,實時性較好。但是也存在一些缺點,如果運動目標出現在視頻圖像的第一幀時,在后續(xù)的檢測過程中,會出現虛假的運動目標,也就是鬼影。在本文中,當水面受到陽光照射時引起的強反光,以及船舶快速運動產生的水波紋,都會引起大量的錯誤檢測,速度較慢的船舶,檢測后也會出現大量空洞。
無人機航拍的視頻中的待檢測船舶目標大小不一,船體運動緩慢,而且無人機的運動軌跡不定,并且航拍的第一幀圖像中就存在船體,因此Vibe算法存在鬼影、誤檢和目標檢測不完整等問題,無法快速準確地完成船舶目標檢測。本文在Vibe算法的基礎上提出了結合幀差法的改進算法,利用二者做與運算,來確定出前景目標。本文的算法流程圖如圖2所示,對于航拍的視頻連續(xù)讀取兩幀,分別進行Vibe檢測,得到前景像素,再將二者進行幀差運算,再確定前景和背景以及哪些是鬼影。也就是利用當前幀的Vibe檢測結果和前一幀的Vibe檢測結果做差分運算,在進行一輪前景像素點與背景像素點的判定。
在上述算法流程圖中,分別將視頻中的第(k-1)幀和第k幀利用Vibe算法完成檢測,通過當前幀與背景模型的比較結果可以得到背景像素點值為0,前景像素點值為255。再對兩幀Vibe算法的檢測結果作進一步的比較,如果前一幀(k-1幀)對應的像素值是255,而且當前幀(k幀)像素值還是255時,就應當判斷該點是誤檢點,是鬼影,需要對鬼影進行消除,把該點的像素值做置零處理,而且進行背景更新操作;當前一幀(k-1)幀對應的像素值是0,而當前幀(k幀)對應的像素值為255時,就應當判斷該點是前景運動點,作為前景輸出。因此得到判斷第k幀對應的某個像素點的屬性S判斷為式(2)所示。
圖2
在實際的環(huán)境中,檢測過程容易受到各種噪聲的干擾而影響到檢測結果的準確性,最后會使得前景檢測出來的二值圖片在目標上出現黑點以及背景上會出現白點,即目標檢測不完整和誤檢點。對于這種干擾,小通過開運算使得物體的邊緣平滑,然后用閉運算填補船舶內部的空洞,最后通過最小外接矩形完成對船舶的框定。
本次實驗所用視頻是無人機在黃浦江流域上方拍攝,視頻分辨率為1280×720,視頻幀率為25幀/s;系統(tǒng)平臺是Ubuntu,軟件實施平臺為OpenCV 2.4.8。
圖3和圖4給出了垂直拍攝情況下單個船只和多個船只兩組實驗結果的分析對比。各種檢測算法對運動船舶目標的檢測情況各不相同。和傳統(tǒng)的Vibe算法比較起來,改進算法在準確性、目標完整性方面都有不小的提升。具體的實驗結果分析如下:根據圖3(2)和圖4(2)可以看出對于運動緩慢的船只,幀差法無法提取出完整的目標圖像,船舶輪廓嚴重缺損;Vibe算法的結果由圖 3(3)和圖 4(3)所示,可以看出,船體輪廓不清晰,內部存在空洞,并且存在一定的鬼影[6-7];圖3(4)和圖4(4)是本文算法的結果圖,如圖所示,針對于前兩種算法的運動目標不完整和誤檢測問題做出了改善,填補了內部的空洞,消除了誤檢點,準確地得到了運動船舶的前景圖。最后。圖3(5)和圖4(5)給出了用最小外接矩形對船舶目標的檢測結果。
圖3 單個船只垂直拍攝實驗結果圖
圖4 多個船只垂直拍攝實驗結果圖
本文從對無人機航拍視頻中的船舶目標檢測的實際要求出發(fā),用前景目標檢測算法中最新的Vibe算法為基礎,對其在運動目標檢測的缺點提出了改進,融合了幀差法,通過開閉運算對得到的前景目標作進一步的優(yōu)化,將理論算法和實際情況結合到一起,分別對于多個船只和單個船只的視頻進行效果測試,實現結果表明,該算法實現了對于基于無人機航拍視頻的船舶檢測,并且能夠消除誤檢點,同時可以獲得更加完整的目標。