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