摘 要: 利用監控視頻中靜態場景較多且無意義和動態場景明顯且集中的特點,基于業內領先的HITAV編解碼算法,提出了一種結合動靜態場景分析的監控視頻編解碼方案。運用該方案和TI公司推出的雙核架構高性能芯片OMAPL138,實現了一個基于異構多核的嵌入式視頻監控系統。實驗證明,該方案降低了系統在有靜態場景時的平均傳輸碼流,提高了視頻的平均壓縮比。
關鍵詞: 場景分析;監控系統;OMAPL138;Syslink
0 引言
監控視頻不同于其他用于廣告、宣傳、娛樂等的多媒體視頻,它存在的目的是確保被監控區域的安全、檢測被監控區域發生的變動。在相當長的時間里,監控區域是沒有變動且冗余的靜態場景,因此,按照固定幀率工作的通用視頻編解碼算法在視頻監控系統中并不合適。為了既能靈活有效地檢測出被監控區域發生的變動,又不影響監控視頻的分辨率,提高監控的效率,同時最大程度地減少視頻傳輸的數據量,本文提出了一種動靜態場景分析算法,來檢測監控視頻中的場景變動,把監控視頻分類為靜態場景和動態場景視頻。通過動靜態場景分析算法與編解碼算法的結合,實現了一種基于動靜態場景分析的監控視頻編解碼優化方案,該方案能有效區分監控視頻的場景狀態,并根據不同的場景特征進行不同的處理,一旦檢測到靜態場景,監控視頻數據無需編碼和傳輸。通過把該算法成功移植于OMAPL138,驗證了算法在降低碼流上的有效性。
1 算法設計
1.1 動靜態場景分析算法
動態場景視頻即所在區域的視頻畫面有運動物體出現,與背景幀在某些區域有很大的差別;靜態場景視頻即視頻畫面在一定范圍內沒有變化,與背景圖像差別不大。目前,運動檢測中最常用的方法有:幀間差分法、背景減除法、光流計算法和基于統計學的方法等[1]。幀間差分法相對于其他運動檢測算法,具有算法實現簡單、靈敏度高、實時性好、對場景光線和動態環境適應性較強等特點[2]。由于本文只檢測視頻場景狀態即視頻中運動物體的有和無,因此很好地避免了幀間差分法在目標檢測中目標區域產生“空洞”的問題[3]。基于此,本文提出了基于監控視頻的動靜態場景分析算法,算法是基于“怎樣快速地檢索到兩幀圖像有差別”這個基本問題提出的。場景分析算法不必檢測出兩幀圖像的所有差別,檢測的是一幀視頻的整體狀態,故只需要對有代表性的少數像素點進行運算,這是動靜態場景分析算法區別于其他所有運動目標檢測算法的最大優勢。算法實現步驟如下:
(1)對視頻進行前期處理,主要是把彩色圖像轉化為灰度圖像(YUV格式的視頻提取Y分量即可)。
(2)對得到的灰度圖像進行采樣處理,提高算法效率。
(3)設第一幀為背景幀,G(n)表示第n幀圖像,BG表示背景幀,背景幀的更新公式如下:
(4)第二幀開始與背景幀逐像素值相減,相減后大于閾值T1,則f(k)等于1,否則等于0。G(k,n)表示第n幀第k個像素點的像素值,其中1≤k≤M×N(圖像有M行N列),BG(k)表示背景幀第k個點的像素值,公式如下:
(5)f(k)的累加值一旦超過閾值T2,則判定G(n)為動態幀且退出,否則為靜態幀,公式如下:
動靜態場景分析算法與運動目標檢測算法的區別如下:
(1)通過動靜態場景分析后只有兩種狀態:動態場景和靜態場景。
(2)場景分析算法不必檢測出兩幀圖像的所有差別,檢測的是一幀視頻的整體狀態,只需要對少數像素點進行運算是動靜態場景分析算法區別于其他所有運動目標檢測算法的最大優勢。
(3)場景越復雜,算法運行時間越短。
(4)場景分析算法不求差分圖像,滿足條件立即退出。
對算法的進一步優化:(1)雖然第(2)步采樣會有一定的抑制噪聲的能力,但因為是采樣后的逐像素相減,還是不可避免地會有噪聲的干擾,為了抑制噪聲的影響,可以在小區域內利用統計量的方法,如在4個點的小區域內有3個點的差值大于T1才判斷f(k)=1;(2)考慮到從中間開始會縮短檢索時間且處理算法的DSP有多個運算器,故采用從中間向兩端檢索的方式,上半部分從左到右從下到上,下半部分從左到右從上到下。
1.2 HITAV編解碼算法
本文用到的HITAV算法,即為翰華信息科技有限公司自主研發的音視頻編解碼算法,HITAV的基本壓縮算法是小波模型(wavelet)[4]、多級樹集合群、廣義小波和數學形態小波,不同于基于離散余弦(DCT)模型的H264/MPEG4算法。HITAV利用小波模型和多級樹集合群的多級分解與收斂算法,它不是靠降幀率(犧牲流暢性)或者利用人的視覺誤差(犧牲畫質)限制靜態場景來實現低碼流,而是從源頭-視頻編碼模型上實現真正意義上的低碼流,它的編碼效率(壓縮比)根據不同的分辨率分別是H.264的2~5倍。在監控系統中,HITAV的低碼流能大大地提高程序的運行效率和實時性。HITAV編碼后的幀結構主要部分如圖1所示。
其中,width和height表示視頻圖像的寬和高;添加st_cnt字段用于標示靜態場景狀態的持續時間;stream_length表示編碼后視頻數據的長度,本文的場景狀態也由stream_length標示,stream_length等于零表示靜態場景,stream_length大于零表示動態場景。
1.3 動靜態場景分析算法與HITAV的結合
編碼時,原始視頻通過動靜態場景分析之后分成動態幀和靜態幀,動態幀通過HITAV算法編碼,并把標記值flag設為1,編碼后的幀結構體中的stream_length不變;只有當flag=1時才做靜態幀處理并把處理后的flag值設為0,通過靜態幀處理后,stream_length=0,即無數據部分。故經過編碼,所有的動態幀都得以壓縮,連續出現靜態幀表明系統進入靜態場景狀態,并對第一幀做靜態幀處理,其余靜態幀拋棄;在處理動態幀時,動態幀中st_cnt記錄了在它之前的靜態幀量,以便存儲。編碼流程如圖2所示。
解碼時,根據接收到的視頻數據結構體中的stream_length值判斷視頻監控的場景狀態,如果為動態場景(即stream_length>0)則進行HITAV算法解碼,并把解碼后的數據覆蓋顯示緩沖區;如果為靜態場景(即stream_length=0)則標志系統進入靜態場景狀態,并持續到下一個動態場景幀的出現。解碼流程如圖3所示。
2 實驗與分析
2.1 基于OMAPL138的實驗
OMAPL138 CPU基于C674x Fixed/Floating-Point VLIWDSP+ARM926EJ-S雙核設計,集成128 MB DDR2和512 MB NAND Flash,DDR2作為運行內存,NAND Flash用于存儲bootloader、啟動時系統環境變量、Linux內核、文件系統。系統接口模塊主要有JTAG調試接口、自適應10/100 M網絡接口、RS232串口等[5]。
系統靈活運用Davinci架構的異構多核通信的基礎組件Syslink[6],實現了視頻數據在ARM核心和DSP核心之間的傳輸。Syslink為異構多核處理器間提供了高效的多核協作和通信機制。系統視頻信號處理流程如圖4所示。在ARM9中把捕獲的視頻數據復制到共享內存區,通過Syslink的地址映射,使得DSP得以訪問。DSP中運行了基于場景分析的編碼/解碼算法,ARM9主處理器完成網絡功能和本地播放。
2.2 分析
通過在OMAPL138中同時運行基于動靜態場景分析的HITAV算法和原始的HITAV算法,實驗生成了兩組數據,一組為視頻通過動靜態場景分析編碼后的視頻數據,一組為通過原始的HITAV編碼后的視頻數據。編碼后視頻幀的長度變化和場景狀態變化如圖5所示,視頻分辨率為480×800,選取其中1 000幀。
視頻格式為YUV420,一幀原始視頻的大小為480×800×1.5 B。由圖5可知,通過基于場景分析的HITAV算法編碼后長度為零即表示監控視頻在靜態場景狀態,這部分的視頻幀在經過該算法后得以濾去。基于場景分析的編解碼算法攔截了無意義的靜態場景視頻數據。有場景分析和無場景分析的靜態視頻百分比與平均壓縮比如表1所示。
由表1可知,基于場景分析的HITAV算法的平均壓縮比明顯高于原始HITAV算法的平均壓縮比,且靜態視頻百分比越大,平均壓縮比的差值越大。
3 結論
本文介紹了一種基于動靜態場景分析的監控視頻編解碼優化方案,詳細介紹了動靜態場景分析算法的基本原理,描述了動靜態場景分析算法與HITAV算法的結合。通過實驗證明,動靜態場景分析算法有效地避免了視頻監控中靜態場景視頻幀的傳輸,從而降低了視頻的傳輸量,提高了視頻的平均壓縮比。
參考文獻
[1] SONKA M, HLAVAC V, BOYLE R. 圖像處理、分析與機器視覺(第二版)[M].艾海舟,武勃,譯.北京:人民郵電出版社,2003.
[2] MONNET A, MITTAL A, PARAGIOS N, et al. Background modeling and subtraction of dynamic scenes[C]. IEEE International Conference on Computer Vision, 2003:1305-1312.
[3] 呂國亮,趙曙光,趙俊.基于三幀差分和連通性檢驗的圖像運動目標檢測新方法[J].液晶與顯示,2007,22(1):87-93.
[4] 王相海,張躍平.基于小波的圖像及視頻編碼研究進展[J].計算機工程與應用,2004(11):78-80.
[5] Texas Instruments Incorporated. OMAP-L138 C6000 DSP+ARM processor[EB/OL]. http://www.ti.com.cn/cn/lit/ds/symlink/omap-l138.pdf,2011.
[6] Texas Instruments Incorporated. Syslink user guide[EB/OL].[2012-09-04](2015-03-01). http://processors.wiki.ti.com/index.php/SysLink_ UserGuide.