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