翟文濤,盛韜,薛冰玢
(上海海事大學 信息工程學院,上海 200135)
在智能監控系統中,人們往往對運動目標感興趣,要對運動目標進行精確的分析,首先必須有效地提取感興趣的運動目標。運動目標提取的難點在于如何實時、快速、準確地把運動目標從復雜背景中提取出來。隨著DSP技術的發展,新一代高性能DSP的出現使高速實時視頻圖像處理成為可能。針對視頻圖像計算復雜度高、數據量大等特點,本文對程序進行了優化,優化后系統運算速度提高,可實現運動目標的實時檢測。
DSP/BIOS是DSP開發環境CCS中的一個可裁剪的可搶占式的實時多任務操作系統。在DSP/BIOS環境下編寫代碼,可以大大降低軟件開發難度,提高調試效率。借助CCS提供的多種分析與評估工具,可方便程序開發。
本文采用瑞泰創新公司的ICETEK-DM642-PCI硬件開發平臺。系統的硬件結構如圖1所示。DM642外擴了2片SDRAM、1片Flash,分別存儲圖像數據和固化系統運行程序。通過I2C總線實現視頻編解碼配置。首先,從攝像頭傳過來的模擬信號經過SAA7105編碼轉化成BT.656的YCbCr(4:2:2)復合視頻信號。復合視頻信號流進DM642視頻端口內部的FIFO緩沖區,Y、Cb、Cr三個分量數據分別進入視頻端口內3個數據緩沖區內,再由EDMA快速搬移到外擴的2個SDRAM中,從而獲得原始視頻數據。視頻數據經DM642處理后,送回輸出視頻端口內部的FIFO緩沖區,在合成 YCbCr(4:2:2)復合視頻信號后,最后經過SAA7115視頻編碼器恢復成模擬視頻信號,并進行輸出顯示。
圖1 系統硬件結構
RF5框架中,有4個數據處理基本單元,即任務(task)、通 道 (channel)、單 元 (cell)和 標 準 算 法 (XDAIS algorithm)。位于頂層的是DSP/BIOS task。一個task是幾個channel的集合,一個channel是幾個cell的集合,一個cell是XDAIS算法的封裝。
RF5的數據通信單元可以分為任務層數據通信單元和單元層數據通信單元兩類。任務級通信主要用到了SCOM消息隊列和郵箱。單元級通信是由ICC(Inter_Cell Communication)對象實現的,每—個cell都有一個ICC對象的輸入列表和—個輸出列表,列表中可有一個或多個輸入ICC對象和輸出ICC對象。ICC對象用于描述cell讀取數據或者寫入數據的緩沖區。ICC對象所指向的緩沖區由用戶來定義。cell通過ICC對象實現它們之間的數據通信。
主函數主要完成初始化的工作,包括處理器和系統板的初始化(如BIOS環境初始化、CSL初始化、Cache初始化和DMA通道配置),RF-5模塊的初始化(如通道初始化以及內部單元通信和傳輸信息的ICC和SCOM模塊的初始化),采集和顯示模塊的初始化配置等。
在完成上述初始化工作后,系統進入DSP/BIOS調度程序。調度機制將視頻處理任務劃分為捕獲任務函數Tskcapture()、處理任務函數Tskprocess()和顯示任務函數Tskdisplay()三個并列優先級的模塊。詳細的任務間通信情況如圖2所示。每一個SCOM隊列內部使用一個隊列對象(QUE)和一個信號燈對象(SEM),隊列對象提供任意大小的數據緩沖區,信號燈指定當前可以對數據進行操作的任務,實現任務之間的數據共享。因此3個任務間的消息傳遞通過同步通信SCOM模塊來實現。3個SCOM 隊 列 名 為:fromintoprocess、fromprocesstoout、fromouttoin。首先,捕獲任務Tskcapture捕獲一幀圖像,將采集到的圖像信息放入到已創建并打開的SCOM隊列fromintoprocess中,處理任務Tskprocess則一直檢測是否有消息存在于SCOM隊列fromintoprocess,無則一直等待;如果隊列fromintoprcess的消息存在,則讀取信息,開始通過運動目標檢測的算法對原始圖像進行處理,然后通知另一個隊列fromprocesstoout發送消息到顯示任務,顯示任務接到隊列fromprocesstoout的消息后,顯示一幀圖像,然后通過消息隊列fromouttoin發送消息,捕獲任務Tskcapture從消息隊列fromouttoin得到消息后,開始下一幀的采集,并把圖像信息放到fromintoprocess中。如此這樣循環往復,實時性地完成對運動目標的檢測。
圖2 任務間通信數據流
邊緣能夠勾畫出目標物體,含有豐富的內在信息(如方向、階躍性質、形狀等),是圖像抽取圖像特征的重要屬性。從本質上說,圖像邊緣是圖像局部特性不連續性(灰度突變、顏色突變等)的反映,這種特性幾乎不受光照變化的影響,可以消除大量冗余信息。根據這些特性,采用背景邊緣和實時圖像邊緣差分方式提取目標邊緣像素。采用Sobel邊緣檢測算子從水平、垂直、45°和135°四個方向進行邊緣判定:
ΔG1~ΔG4為(i,j)像素在水平、垂直、45°和135°四個方向的卷積核,取出其中的最大值作為(i,j)的輸出:
得到邊緣梯度圖像后,由式(5)對其進行二值化,其中邊緣為“1”,其他情況為“0”:
式中,Ei,j表示圖像在(i,j)的二值化值。
上述方法分別對背景幀與當前實時圖像幀進行邊緣檢測,再根據其檢測結果計算運動目標邊緣像素,對二者進行異或運算:
通過上述提取的目標像素,含有各種各樣的噪聲,目標邊緣區域可以認為是獨立的連通域,而噪聲則相對離散。根據這個特性,可以把噪聲和目標分開,具體步驟如下:
①把提取的目標像素劃為M×M的網格,每個網格有N×N個像素。計算每個網格密度。
②設置閾值T,把網格密度大于T的設置為目標,小于閾值的判定為背景。
③根據四連通域判定原則,依次對每個網格進行判定標定,并記錄運動目標的面積及其位置。
DSP可以采用C語言、線性匯編語言或者兩者的混合編程。合理利用DSP的硬件結構,對程序進行優化,可以大幅度提高程序的執行速度。程序的優化策略主要包括:
①緩存Cache結構優化,合理分配Cache大小,把256KB大小的二級緩存L2配置為Cache和SRAM,L2的一半空間用于片上內存,另一半當做Cache。
②使用編譯器編譯優化選項,打開軟件流水,循環展開,盡可能地展開內循環,使可能并行的指令數增加,從而改變軟件流水線編排,對代碼中的循環作優化。
③使用DATA_ALIGN數據對齊指令,DSP對數據進行讀取時是整行讀取。所以存儲數據時,應32位邊界對齊,這樣在讀寫字節、半字、字或雙字時,一個時鐘周期可以作多次存儲器訪問。合理使用DATA_ALIGN可以很大程度上增加程序的并行性。采用如下的偽指令:
#pragma DATA_ALIGN(symbol,constant)
symbol是需要對齊的變量名,constant是所需對齊邊界值,必須是2的整數冪。
④數據類型調整,選擇合適的數據類型,同時保證算法結果的正確性,不會出現溢出現象。使用int型,避免使用較長的數據類型。
⑤用線性匯編和匯編語言改寫耗時長的部分。線性匯編程序是C語言能夠直接調用的函數,其編譯出的代碼比直接用C語言寫的效率高。
⑥用邏輯運算、加/減/乘代替除運算。
利用CCS開發環境的DSP/BIOS實時操作內核,基于RF5參考框架開發運動目標實時性檢測的系統,能夠很好地檢測出運動目標。該檢測系統能夠很好地去除光線的影響,減小噪聲對檢測結果的影響。
視頻處理圖片大小為720×576,格式為YUV(4:2:2),所采取的算法只對Y分量處理,截取的目標檢測結果如圖3、圖4所示。
開發板的頻率為600MHz,即一個時鐘周期為1.67 ns。通過優化后,實驗測得檢測單個目標平均指令周期為21 607 200,所耗費的時間為36ms。通過數據統計可以看出,系統能夠實現運動目標的實時檢測。
DSP/BIOS是針對TI公司DSP芯片的一種優良的嵌入式實時操作系統。使用它的關鍵在于進程的合理規劃,充分利用其內置的資源模塊對程序的效率加以優化,提高代碼的執行效率。系統采用多線程的框架,使程序結構更加清晰,便于DSP/BIOS的管理和維護。
[1]趙杰,孫連明,楊永敏,等.基于DM642的嵌入式實時圖像處理系統設計[J].制造業制動化,2008,30(9):4-7.
[2]梁偉偉,李玉山.基于RF5的 MPEG-4編解碼器的移植與實現[J].器件與應用,2009,33(10):24-27.
[3] 陳凱平,林岳松,朱勝利.基于RF5的被動聲探測融合平臺[J].機電工程,2009,26(3):44-46.
[4]連靜,王珂,曹麗丹.具有邊緣保持特性的嵌入式圖像壓縮算法[J].中國圖象圖形學報,2007,12(4):593-595.
[5]段瑞玲,李慶祥,李玉和.圖像邊緣檢測方法研究綜述[J].光學技術,2005,31(3):415-419.
[6]李宏貴,李興國.一種改進的梯度算子[J].中國圖象圖形學報,2003,8(3):253-255.
[7]孫瑾,顧宏斌,鄭吉平.一種基于梯度方向信息的運動目標檢測算法[J].中國圖象圖形學報,2008,13(3):572-579.
[8]黃劍玲,鄭雪梅.一種基于邊緣檢測的圖像去噪優化方法[J].計算機仿真,2009,26(11):260-263.
[9]鄒垚,張超.基于DSP的人臉識別算法實現與優化[J].計算機應用,2010,30(3):854-856.
[10]李斌,李功燕,許世頤,等.DSP體系結構下視覺監控優化方法研究[J].算機工程與應用,2008,44(34):231-238.