摘 要: 提出了一種移動視頻監控系統中視頻數據處理軟件的設計方案。移動監控系統主要由前端移動監控設備、3G網絡、服務器、手機客戶端組成。給出了系統總體原理圖,主要分析了移動監控系統中視頻數據的采集、去抖動處理、壓縮以及備份等設備端軟件設計部分。在去抖動的過程中使用了改進的灰度投影法,解決了傳統投影法中易受到移動前景干擾的問題。通過實際測試驗證了方案的可行性。
關鍵詞: 移動監控系統;3G網絡;視頻處理;去抖動處理;灰度投影法
0 引言
隨著計算機網絡技術的發展和應用,安全防范產品的逐漸豐富,“安防大眾化”已是大勢所趨,安全是一種需求,安全對于人們來說已是必不可少的商品[1]。視頻監控系統在安防行業中具有重要地位。視頻監控系統的發展經歷了由模擬到數字、由錄像人工檢查到狀態智能分析、由實地操作到遠程遙控的過程[2]。移動通信系統已經開始更新換代,中國3家不同運營商旗下基于不同標準的3G網絡也全面步入商用時代,同時隨著LTE(Long Term Evolution)技術的發展和4G標準化的來臨,基于新型系統的基礎網絡建設必將保持高速發展[3]。無線網絡的發展極大地促進了移動監控系統的發展。移動監控系統不僅能夠擴大監控范圍,也能節約成本,甚至還能減少許多不必要的損失[4]。
移動監控系統的前端設備在采集視頻數據的過程中難免會產生抖動,所以電子穩像技術對移動監控系統至關重要。目前的電子穩像技術是利用電子設備和數字圖像處理技術相結合的方法,直接從像面上通過檢測被比較圖像與參考幀圖像的運動矢量,并對被比較圖像進行運動補償,從而獲得清晰穩定的視頻圖像序列[5]。視頻穩像中最重要的一步是運動估計,灰度投影法是一種比較常見的運動估計方法,它是利用圖像的整體信息進行運動估計,主要是利用相鄰兩幀圖像重合區域內圖像信息分布相同的原理[6]。但是灰度投影法容易受到前景運動物體的影響。本文對灰度投影法進行了改進,有效地減緩了前景運動物體對運動估計的影響。
1 系統總體結構
移動監控系統主要由前端移動監控設備、3G無線網絡、服務器以及手機客戶端組成。系統總體結構圖如圖1所示。
前端移動監控設備采集視頻數據并經過壓縮后發送給服務器,供服務器管理人員分析。服務器按客戶端的要求將視頻壓縮數據發送給客戶端查看。
2 前端設備視頻軟件設計
前端設備視頻軟件主要負責對視頻數據的采集、去抖動、編碼以及存儲等工作。這些工作主要是由encode進程完成。encode進程包含了Capture線程、Video線程和Write線程3個線程。
主線程首先創建4個同步對象,分別為hRendezvousCap、hRendezvousWriter、hRendezvousInit和hRendezvous Cleanup,然后創建Capture線程,Capture線程一旦創建完成,主線程就會馬上調用等待函數Rendezvous_meet(hRendezvousCap)函數進入等待狀態。Capture線程的流程如圖2所示。
Capture線程首先通過調用Capture_detectVideoStd()函數獲得視頻數據類型。然后再通過調用VideoStd_getResolution()函數得到將要采集的視頻數據的分辨率,并將該分辨率傳給主線程。再調用等待函數Rendezvous_meet(hRendezvousCap),這次調用等待函數時Capture線程并不會進入等待狀態而是將等待中的主線程喚醒。然后Capture線程會繼續調用Capture_create()函數創建視頻數據的采集對象。調用Resize_create()函數創建視頻數據的放縮對象。調用Framecopy_create()函數創建視頻數據的裁剪對象。Capture線程在完成了這些準備工作后就會再次調用等待函數Rendezvous_meet(hRendezvousInit)等待其他線程到達預定的等待點。
主線程被Capture線程喚醒后會接著創建Video線程,并將視頻數據的分辨率參數傳給Video線程,然后調用Rendezvous_meet(hRendezvousWriter)等待函數進入等待狀態。Video線程的流程圖如圖3所示。
Video線程首先通過調用Engine_open()函數開啟編碼引擎。然后將視頻分辨率參數傳給Venc1_create()函數來創建兩個編碼對象hVe1、hVe2。hVe1與hVe2分別用來將352×288 YUV420SP與720×576 YUV420SP兩種格式的視頻數據編碼成H.264格式。然后Video線程會調用Venc1_getOutBufSize()函數獲得編碼器輸出數據參數,并傳給主線程。再調用等待函數Rendezvous_meet(hRendezvousWriter)喚醒主線程。當Video線程完成上述準備工作后就會調用等待函數Rendezvous_meet(hRendezvousInit)等待其他線程到達預定的等待點。
被喚醒的主線程還會繼續創建Write線程,并將Video線程的兩個編碼器的輸出參數outBufSize1、outBufSize2傳給Write線程。Write線程的流程圖如圖4所示。
Write線程首先將參數outBufSize1與outBufSize2傳給BufTab_create()函數申請兩組緩存區。這兩組緩存區用于接收Video線程傳來的兩路H.264數據。然后Write線程會調用函數createShm()創建一塊共享內存。這塊共享內存用于存儲由352x288 YUV420SP格式數據編碼而來的H.264數據,供數據發送程序讀取。在完成了上述準備工作后,Write線程會調用等待函數Rendezvous_meet(hRendezvousInit)進入等待狀態。
當等待函數Rendezvous_meet(hRendezvousInit)被第三次調用時,第三次調用等待函數的線程并不會進入等待狀態,而是喚醒前兩個正在等待的線程。
當所有線程都被喚醒后就會同步進入主循環。Capture線程負責采集視頻數據和視頻穩像,Video線程負責視頻數據編碼,Write線程負責數據存盤和將數據寫入共享內存。
Capture線程首先采集一幀736x576 UYVY格式的數據,然后對視頻數據進行電子穩像處理。得到穩定的視頻數據后,通過調用Resize()函數改變穩像后的視頻數據的分辨率和數據格式,并輸出兩路數據,一路數據為352×288 YUV420SP格式,另一路數據為736×576 YUV420SP格式。然后將352×288 YUV420SP格式的視頻數直接傳給Video線程。將736×576 YUV420SP格式的視頻先裁剪成720×576 YUV420SP格式后再傳給Video線程。接著Capture線程判斷是否繼續采集下一幀視頻數據,若是,則重復主循環中的內容;若不是,則向其他線程發送結束信號并調用等待函數Rendezvous_meet(hRendezvousCleanup),等待其他線程一起進行清理工作。
Video線程在進入主循環后首先會將自己創建的兩組空buffer傳給Capture線程,用于Capture線程向Video線程傳輸數據。然后接收Capture線程傳來的兩路視頻數據,并分別用編碼對象hVe1與hVe2將這兩路視頻數據編碼成H.264格式。然后接收Write線程傳過來的兩塊buffer,并將兩路H.264格式數據分別存儲于這兩塊buffer中,再通過FIFO_put()函數傳給Write線程。然后Video線程判斷是否繼續編碼工作,若是,則對下一幀數據重復主循環中的編碼工作;若不是,則向其他線程發送結束信號并調用等待函數Rendezvous_meet(hRendezvousCleanup),等待其他線程一起進行清理工作。
Write線程進入主循環后首先將兩塊空buffer傳給Video線程,用于Video線程向Write線程傳輸數據。然后接收Video線程傳來的兩路H.264數據,第一路數據由352×288 YUV420SP格式編碼而來,將該H.264數據寫到共享內存中供發送程序發送給服務器;第二路數據由720×576 YUV420SP格式編碼而來,將該數據寫到SD卡中用于備份,當前幀處理結束。然后Write線程判斷是否繼續處理下幀數據,若是,則重復主循環中的內容;若不是,則向其他線程發送結束信號并調用等待函數Rendezvous_meet(hRendezvousCleanup),等待其他線程一起進行清理工作。
當等待函數Rendezvous_meet(hRendezvousCleanup)被第三次調用時,調用它的線程并不會進入等待狀態,而是喚醒其他兩條正在等待的線程。然后三條線程同時進行各自的清理工作,釋放各自申請的資源,然后結束各自的線程,程序結束。
3 電子穩像處理
Capture線程采集的視頻數據為736×576 UYVY格式,由于移動監控設備在采集視頻數據時難免會產生抖動,因此必須對采集的視頻數據進行電子穩像處理。首先對當前幀視頻圖像進行直方圖均衡化處理,以提高圖像的對比度。然后對圖像進行多分塊灰度投影。將一幀736×576 UYVY的視頻數據按圖5所示的方式劃分成24個100×110的宏塊,宏塊與視頻數據邊緣的最近距離為68個像素點。
將每個宏塊在水平方向和垂直方向上分別進行灰度投影,并通過互相關運算求出其運動參數。下式為進行行、列互相關運算的計算公式:
其中,Colkn(j)為第k幀圖像第n號宏塊第j列的灰度投影值,NC是宏塊列的長度。設Wmin為C(w)最小值時w的值,則第k幀圖像的第n號宏塊相對于參考幀圖像的第n號宏塊在垂直方向的位移矢量為:
a=-Wmin(2)
得到所有宏塊的運動參數后求出其平均運動參數。然后去除與平均運動參數相差最大的前30%的宏塊的運動參數,取剩下70%宏塊的運動參數的平均值為當前幀的運動參數。然后用均值濾波器去掉運動參數中的高頻抖動部分,得到低頻的攝像機正常掃描運動參數。然后通過總運動參數和正常掃描的運動參數得到視頻數據的抖動參數。最后進行運動補償處理,本文通過對穩定的前一幀補償得到下一穩定幀,為了避免錯誤向后續幀的傳播,選取每15幀利用一次原始幀做補償。運動補償以后就得到了穩定的視頻數據。
4 系統測試
服務器端通過3G網絡接收前端移動設備發送的視頻壓縮數據,并將其解碼和顯示。視頻圖像如圖6所示。
其中圖6(a)是移動監控設備對采集的視頻數據經過電子穩像處理過的連續3幀視頻數據,圖6(b)是與圖(a)相對應的未經過設備端穩像處理的視頻數據。由圖6可以看出電子穩像操作解決了拍攝視頻時的抖動問題。將前端移動監控設備在不同的地方進行測試,系統都可以穩定運行。本系統可以廣泛地應用于一些無法鋪設線路的偏遠地區,解決了傳統監控系統中難以鋪設線路的問題。
參考文獻
[1] 何岳.移動監控系統研究[J].信息通信,2012(5):126-127.
[2] 姚楠,余勁.基于云的電力監控視頻故障管理系統設計[J].電子技術應用,2014,40(6):140-142.
[3] 楊陽,胡永輝.移動監控終端無線傳輸系統的設計與實現[J].時間頻率學報,2011,34(1):27-32.
[4] 梁振濤,樊澤明,任永亮,等.基于單片機的移動監控系統硬件設計[J].微型機與應用,2014,33(2):25-30.
[5] 葛虎龍,李安平.高清抖動視頻的實時穩像算法[J].信息通信,2013(6):41-43.
[6] 黃九林.基于塊匹配和直線特征的視頻穩像方法研究[D].大連:大連理工大學,2014.