方兆龍,劉凌云,江 波,楊東平
(1湖北工業(yè)大學電氣與電子工程學院,湖北武漢430068;2湖北工業(yè)大學太陽能高效利用湖北省協(xié)同創(chuàng)新中心,湖北武漢430068)
MJPEG(Motion-Join Photographic Experts Group)即運動靜止圖像(或逐幀)壓縮技術(shù),它是在靜態(tài)圖像壓縮技術(shù)JPEG的基礎(chǔ)上發(fā)展起來的動態(tài)圖像壓縮技術(shù)[1]。MJPEG把運動的視頻序列作為連續(xù)的靜止圖像來處理,只考慮幀內(nèi)壓縮而不考慮幀間壓縮,壓縮倍數(shù)為1/80~1/20倍[2]。這種壓縮方式能夠單獨對某一幀進行壓縮處理,在編輯過程中可隨機存儲每一幀。MJPEG采用漸層式技術(shù),先發(fā)送低解析的圖檔,再補送細部資料,可以獲取清晰度很高的視頻圖像,而且可以靈活設(shè)置每路的視頻清晰度和壓縮幀數(shù)[3]。它的壓縮和解碼是對稱的,可以用相同的硬件和軟件實現(xiàn)。由于不對視頻流的幀間進行時間冗余壓縮處理,所以壓縮效率不是很高,存儲占用空間達到每幀8~15 K字節(jié),最好能做到每幀3 K字節(jié),如果采用高壓縮比會嚴重降級視頻質(zhì)量。然而在對幀數(shù)要求不高的情況下,MJPEG的這個弱點卻使它擁有很好的性價比[4-6]。如網(wǎng)絡(luò)攝像機等只要求持續(xù)監(jiān)控,對圖像清晰度和刷新率要求不高,它能夠在有限網(wǎng)絡(luò)資源支持下將清晰的畫面迅速傳送到監(jiān)控端,因此MJPEG適用于公共場合、公司等場合的視頻監(jiān)控。
視頻解碼系統(tǒng)根據(jù)應(yīng)用場合不同有多種硬件實現(xiàn)方案,實現(xiàn)高清編解碼硬件一般采用專用芯片或者DSP芯片。但是這些芯片有的不支持解壓縮,有的僅在功能上支持而沒有成熟的核函數(shù),而且價格昂貴。本文采用的Cortex-m4內(nèi)核的STM32F4系列微處理器,具有微控制器和數(shù)字信號處理器的功能,最高主頻達168 MHz,支持多種低功耗模式,DSP指令和FPU使它在視頻圖像處理方面具有很大的優(yōu)勢。綜合Cortex-M4硬件的低成本高特性和MJPEG視頻解碼算法的實時清晰性,在視頻監(jiān)控工程中采用這種方案擁有很好的性價比。
硬件系統(tǒng)采用ARM Cortex-M4處理器內(nèi)核的STM32F407ZGT6芯片為實驗平臺,利用SDIO端口讀取SD卡里的AVI視頻文件到芯片內(nèi)存中,然后利用芯片的DSP指令和FPU浮點運算以及ART自適應(yīng)實時加速器功能對視頻壓縮數(shù)據(jù)流進行連續(xù)解碼,解碼后的圖像幀通過FSMC接口在LCD屏上實現(xiàn)播放清晰的視頻。硬件平臺的結(jié)構(gòu)如圖1所示。
圖1 硬件系統(tǒng)圖
由于MJPEG是在JPEG基礎(chǔ)上發(fā)展起來的,而且MJPEG只考慮幀內(nèi)的空間冗余,而不考慮幀間的時間冗余,它把連續(xù)的視頻圖像當作一個個靜止圖像處理,因此它的解碼算法核心還是JPEG算法。在滿足視頻監(jiān)控實時性要求的情況下,本文對一幀圖像的JPEG解碼算法進行優(yōu)化處理。如圖1所示,JPEG圖像解碼主要包括Huffman解碼、反量化、IDCT這三個部分,開始還要經(jīng)過預處理獲取視頻解碼所需的各種信息和壓縮數(shù)據(jù),最后還要經(jīng)過顏色空間轉(zhuǎn)換才能實現(xiàn)圖像的顯示。
圖2 JPEG解碼流程圖
由于嵌入式程序受硬件資源的限制,因此實現(xiàn)視頻解碼需要充分利用Cortex-M4硬件平臺資源。Cortex-M4內(nèi)核采用32位、多重AHB總線矩陣和多通道DMA控制器,能夠?qū)崿F(xiàn)程序執(zhí)行和數(shù)據(jù)傳輸?shù)牟⑿刑幚?,?shù)據(jù)傳輸速率得到很大提升。它還擁有192KB的SRAM和自適應(yīng)實時加速器ART,SRAM是CPU和外部主存的高速緩沖器。如果CPU訪問的數(shù)據(jù)已經(jīng)預存到SRAM中,就不用等待去外存中完成數(shù)據(jù)的搬移,SRAM連接到I-Bus可以加快程序執(zhí)行速度,SRAM連接到D-Bus可以加快獲取數(shù)據(jù),因此可以將經(jīng)常使用的數(shù)據(jù)指令成組讀到SRAM中,提高運算效率。Cortex-M4具有浮點運算單元(FPU),支持所有的ARM單精度數(shù)據(jù)處理指令和數(shù)據(jù)類型,通過內(nèi)置單精度FPU提升算法的執(zhí)行速度,利用Cortex-M4自帶的DSP指令和浮點運算功能提高視頻圖像處理質(zhì)量。采用浮點功能的指令對比見圖3。
圖3 浮點指令性能對比
目前主要的優(yōu)化處理方式:離散余弦變換采用并處方式;以增加儲存容量的代價來換取速度的提高;根據(jù)輸入圖像的頻率特點,采用自適應(yīng)改變量化等級數(shù),即對圖像變換后的低頻分量和高頻分量進行不同步長的自適應(yīng)量化。綜合考慮以上方法和對比其他軟硬件平臺,本文的重點是利用硬件平臺Cortex-M4的優(yōu)勢實現(xiàn)MJPEG視頻解碼,在降低硬件成本的情況下,極大提高圖像的質(zhì)量,更注重方案的工程實際應(yīng)用價值。
Huffman解碼一個MCU得到亮度和色度的一維64位元素的數(shù)組,數(shù)組中第一個元素解碼稱為直流解碼,剩余的63個元素解碼稱為交流解碼。直流系數(shù)DC由于前后塊間存在相關(guān)性,一般采用DPCM編碼,而交流系數(shù)AC采用RLE編碼,因它們的編碼特點不同,所以解碼時要采用不同的Huffman表。人眼對亮度比色度敏感,編碼過程中對色度的壓縮比亮度大,因此兩者的解碼表也不同。一個MCU解碼單元需要4個huffman表。反量化是將霍夫曼解碼得到的數(shù)組中的元素與量化表中對應(yīng)位置的元素相乘的過程,也需要2個量化表,分別對應(yīng)亮度和色度。這兩個過程實際上是一個查表的過程,如果將壓縮數(shù)據(jù)流逐個輸入,查找huffman表和量化表直到找到正確的碼表,將耗費大量的存取操作,降低了整個系統(tǒng)的速度。Cortex-M4內(nèi)核含有192KB的SRAM和自適應(yīng)實時加速器ART,而查表是不斷重復的操作,因此可以將huffman表和量化表存取到片內(nèi)數(shù)據(jù)存儲器中。當從輸入碼流中讀取一個MCU時,可以實現(xiàn)快速查表解碼,而不用到外存中去查表,節(jié)省了大量的查表解碼時間。
把圖像數(shù)據(jù)從頻率域變換到空間域,離散余弦反變換(IDCT)變換公式如上式??紤]這個公式的運算量,可以采用行列分離算法完成IDCT的硬件實現(xiàn),而行列分離算法就是把二維IDCT變成2個一維IDCT,即先對數(shù)組的行進行8次一維IDCT,再對列進行8次一維IDCT,使得計算復雜度降低。轉(zhuǎn)換公式如下
本文離散余弦反變換部分采用Arai算法,因為相比其它算法,它只需要13次乘法和29次加減法,而其中8次乘法可以合并在前面的反量化部分,所以Arai算法實際上只需要5次乘法和29次加法。它采用二維變一維以及奇偶分開處理方式,一維IDCT流程圖見圖2。
圖4 1維IDCT變換
上述代碼是一列中偶數(shù)點的IDCT運算程序,它們只是簡單的加減法和與常數(shù)的乘法運算,理論上IDCT運算的復雜度已經(jīng)降低很多。但是Cortex-M4內(nèi)核含有DSP指令和單精度浮點運算功能,可以有效提高代碼執(zhí)行效率,減少了定點算法的縮放比和飽和負荷。Cortex-M4是32位處理器,乘法累加MAC能夠在單周期內(nèi)完成一個32×32+64→64或2個16×16的運算,為其它任務(wù)釋放了處理器的寬度。在解碼過程中IDCT系數(shù)占用連續(xù)的16位寬數(shù)據(jù),可以利用SIMD指令將2個16位打包進行并行的讀寫運算,實現(xiàn)一次讀取2個系數(shù)即32位寬,提高代碼執(zhí)行效率。而DSP指令庫函數(shù)含有數(shù)學函數(shù),利用這些函數(shù)改寫上述程序?qū)⑻岣咚俣?。因為一般的硬件平臺沒有浮點運算單元,通常將浮點轉(zhuǎn)成定點進行處理。原程序中對變換系數(shù)采取了定標處理,將它們左移12位變成定點處理。因此可以利用Cortex-M4平臺的DSP指令和浮點功能對上述程序進行優(yōu)化,變換代碼如
經(jīng)過上述步驟解碼出來的信號是YCbCr格式,由于人眼的視覺特性,這種格式有利于壓縮處理,但是它需要轉(zhuǎn)換成RGB信號才能在屏幕上顯示。其轉(zhuǎn)換公式為
這個變換公式中存在浮點運算,因此也可以運用Cortex-M4內(nèi)核的DSP指令和浮點運算庫函數(shù)對它們進行改寫替換。完成上述所有操作后,就可以在LCD屏上顯示動態(tài)連續(xù)播放的視頻(圖5)。
圖5 LCD屏播放的視頻
本文以JPEG算法為基礎(chǔ)對MJPEG的視頻解碼算法進行分析和優(yōu)化處理,結(jié)合硬件平臺Cortex-M4的資源優(yōu)勢,利用它的DSP指令和浮點運算功能對離散余弦反變換和顏色變換部分進行重點優(yōu)化,而對比較耗時的依據(jù)Huffman表和量化表進行查表解碼的過程,利用自適應(yīng)實時加速器功能將他們預存取到內(nèi)存緩沖區(qū),提高了代碼運算精度和運算效率。雖然MJPEG壓縮比不是很高,但在視頻清晰度要求不高的情況下,它的性價格比卻很高。如小區(qū)、企業(yè)視頻監(jiān)控等地方,利用Cortex-M4硬件平臺研發(fā)相關(guān)產(chǎn)品,既能降低硬件成本又能保證實時性清晰監(jiān)控圖像要求。
[1]魏忠義,朱 磊.基于DSP的JPEG圖像解碼算法的實現(xiàn)[J].多媒體技術(shù),2004,193(02):66-70.
[2] 楊貴臣,王 雙,全子一.高清MJPEG2000編解碼系統(tǒng)的設(shè)計[J].視頻技術(shù)應(yīng)用與工程,2005,281(11):85-87.
[3] 王麗霞,李巴津.JPEG算法的改進[J].電腦開發(fā)與應(yīng)用,2004,30(11):48-48.
[4] 薛永林,劉 珂,李鳳亭.并行處理JPEG算法的優(yōu)化[J].電子學報,2002.30(02):160-162.
[5] 王 海,劉彥隆.基于JPEG圖像壓縮算法的研究[J].科技情報開發(fā)與經(jīng)濟,2010,20(10):108-200.
[6] Miodrag Potkonjak,Anantha Chandrakasan.Synthesis and selection of dct algorithms using behavioral synthesisbased algorithm space exploration[J].IEEE,1995,121(02):65-68.