曾勇
(西安電子科技大學電子工程學院,陜西西安710071)
JPEG2000標準[1]采用DWT(離散小波變換)和EBCOT(EmbeddedBlockCodingwithOptimized Truncation)率失真優化截斷的嵌入式塊編碼算法,而其中的截斷算法稱為PCRD(Post-Compression Rate Distortion)。這種碼率控制算法可以確保在給定的碼率下使壓縮圖像的質量最好。圖1為JPEG2000標準算法的流程圖[2],T2編碼器是在T1編碼器對整個Tile塊進行編碼后,再采用率失真優化的原則,按照各個碼塊的碼流對恢復圖像的質量貢獻,完成對碼流的率控制和組織。顯然,在低碼率時,絕大多數被截斷的碼流也進行了編碼,同時由于T1編碼耗費的時間在軟件上占JPEG2000標準編碼時間的45%~60%[3],大大增加了系統不必要的資源消耗,同時也使系統的實時性降低。因此,對于JPEG2000壓縮算法的DSP或是FPGA實現而言,若能做到實時碼流控制或“按需編碼”,在保證圖像壓縮質量的前提下,將較大程度地提升圖像壓縮編碼速度。

圖1 JPEG2000編碼流程圖
自JPEG2000標準公布以來,已有不少學者致力于T1編碼器的研究和硬件實現,使其處理速度得到了較大地提升,但T2編碼器的率控制硬件方案卻沒有得到很好地解決,或計算復雜度高,或性能質量較差[5]。文中提出了一種適合高速實時圖像壓縮硬件實現的率控制方案,即基于漸進位平面截斷算法+逐層位平面截斷算法的混合算法,不僅保證了圖像的壓縮質量,而且基本實現了按需編碼,減少了壓縮冗余,從而提升圖像壓縮編碼速度且便于硬件實現。
根據JPEG2000標準,EBCOT把經DWT后的各子帶分為較小且互不重疊的編碼塊,然后對每個小編碼塊進行獨立編碼,按照從最高位平面(MSB)至最低位平面(LSB)的順序依次進行,而每個位平面又分解為重要性通道(SPP)、幅值精煉通道(MRP)和清除通道(CUP)3個編碼通道依次編碼。而在PCRD-opt算法中,每個編碼通道的結束點都可能是該編碼塊的截斷點,該算法則是在給定碼率的要求下找到一組最優的截取點,使得失真最小。設碼塊Bi在T1部分產生的內嵌比特流的碼率截止到Rnii,ni是某個截取點,Rmax為給定的碼率,則圖像總的碼率為

設碼塊Bi的截取點ni產生的失真為Dnii,D為整幅圖像的失真大小,且假設碼塊小波系數的失真測度為加性,即

率失真優化就是選擇最優的截斷點{ni},對于這種條件極值問題可以用通過Lagrange乘積法解決。
從以上分析可得,PCRD算法是一個全局優化過程,它必須在整幅圖像所有碼塊的所有編碼通道完成之后,才進行截取點的搜索,這需要大量存儲器存儲將要被截斷的碼流和每個編碼通道的RD斜率,而且這個分層截斷點的搜索過程每次都需要遍歷每個編碼塊的每個通道,且需要多次搜索才能完成。因此,雖然PCRD算法擁有最優性能,但它的存儲器開銷大,系統實時性較差,硬件可實現性較低。
根據文獻[4]可知,對于8~32倍的圖像壓縮而言,在對小波變換后的圖像進行3個通道掃描壓縮時,圖像編碼塊各個編碼通道的率失真斜率基本滿足隨編碼通道數的減小而減小,而且圖像的不同編碼塊在這些相同的編碼通道都有相近的率失真斜率,故用率失真優化的截斷算法也會截止到相近的過程數。由于JPEG2000標準壓縮算法是逐個碼塊進行編碼的,對已編碼過的碼塊進行截止到當前位平面的編碼字節數進行統計,如果當前的字節數已大于目標字節數,根據上述理論,則最終的截斷位平面必然大于等于當前位平面,則該圖像當前編碼塊之后的下一碼塊只需編碼至當前位平面的上一位平面即可。當圖像的所有碼塊編碼結束之后,就可以得到一個較粗略的截斷位平面,而且截止至此位平面的編碼字節數是小于等于目標字節數,故仍需要從Z型掃描方式中靠前的碼塊中截取下一個位平面的編碼字節,當然此時是逐個編碼通道進行截取。該算法在T1編碼器編碼的同時對碼流完成率控制,進行實時截斷,并通過反饋漸進提升編碼的最低位平面,使T1編碼器不必編碼低于更低通道的數據。這種截斷算法就稱為漸進過程數截斷編碼算法。
從以上論述可知,漸進過程數截斷編碼算法較JPEG2000標準率失真控制算法而言,圖像的PSNR值減小約0.05~0.1 dB,但是其減少了很多不必要的編碼字節,同時算法的復雜度和計算量也減小了很多,便于硬件實現,系統實時性較好。
雖然漸進過程數截斷算法已經減小了很多,但其編碼的字節數仍是目標碼流長度的2~3倍,也就是說仍舊沒有做到“按需編碼”。而且,漸進過程數截斷編碼算法指出,JPEG2000標準編碼算法的各個碼塊的截斷通道又是較為相近的,利用這一點,提出了逐層位平面截斷算法。
所謂逐層位平面截斷算法是指,其不按標準算法的逐個碼塊從最高位平面至低位平面的方式進行編碼,而是對整幅圖像從最高位平面至低位平面進行編碼,即標準算法是先碼塊,后位平面的掃描方式,而后者是先位平面,再碼塊的掃描方式。這種算法的好處就是可以實時監控已編碼的字節數,基本做到按需編碼。當編碼完某個位平面時,如果當前的編碼字節數小于目標碼流字節數,則繼續編碼下一個位平面;否則,在編碼某個位平面的某個碼塊時,如果當前的編碼字節數大于目標碼流字節數,則截止位平面一定是當前位平面,而且當前碼塊之后碼塊的截斷通道一定大于當前碼塊的編碼通道,故而這些后續的碼塊只需編碼當前通道的上一通道即可;否則,仍需編碼至當前通道。對于編碼結束之后,為滿足最終的目標碼流字節數,需要在截斷位平面的截斷通道上,對某個碼塊進行細截斷。但這種算法的不足在于編碼完一個位平面之后,需要保存這個位平面的編碼狀態信息,這就存在存儲空間的問題。對于硬件實現而言,即使是將這些編碼狀態信息放于SDRAM中,然后再進行讀入,這種頻繁地數據導入和導出,依舊會消耗較多的時間。
考慮到對于8~32倍的圖像壓縮,大多數圖像的截斷位平面都在位平面4以下,所以可以利用漸進位平面截斷算法與逐層位平面截斷算法相結合的方式進行位平面截斷,即在大于等于位平面4的位平面實行漸進位平面截斷,當編碼完位平面4時,如果當前的編碼字節數仍小于目標碼流字節數,再在低4個位平面實行逐層位平面截斷算法;否則,利用漸進位平面截斷算法即可,流程圖如圖2所示。這種新型碼率控制算法充分利用了漸進過程數截斷編碼算法和逐層位平面截斷算法的優點,避免了各自的缺點,基本實現了按需編碼,算法復雜度較低,便于硬件實現,同時系統實時性較好。

圖2 新型截斷編碼算法流程圖
針對工程項目的實際需要,采用ADI公司Blackfin系列的561芯片開發了一套JPEG2000編碼系統,該系統充分發揮了DSP超強的數據吞吐能力及運算速度的優點,使其在1 s內能對30幀512×512的灰度圖像實現16∶1的壓縮。該硬件結構圖如圖3所示。

圖3 JPEG2000編碼系統硬件結構框圖
小波變換使用DB9/7提升小波,量化僅作了四舍五入的簡單處理,對T1編碼器中的位平面掃描和自適應二進制算術編碼也做了較多的改進。因為BF561是定點處理器,運行浮點算法十分耗時,所以將小波變換及其他涉及浮點運算的模塊全部定點化。同時還結合具體的硬件環境對代碼本身做出了大量優化,使得編譯器能夠充分地使用硬件循環、軟件流水化、矢量化等技術。Blackfin561存儲器采用分層結構,所以對圖像數據進行了合理的存儲器資源分配,采用DMA雙緩沖乒乓操作,使絕大多數操作都集中在L1存儲器。
在L3(SDRAM)中,主要放置的數據包括原始圖像、小波變換后的系數、整幀圖像的重要性系數Fc、壓縮碼流;在L1中,主要有編碼塊圖像數據、編碼塊重要性系數Fc、編碼塊重要性暫存系數v、編碼字節數Plan_pass_byte等。
在位平面掃描過程中,需要將編碼塊圖像數據通過DMA從L3傳入L1中,同時將編碼碼流從L1傳出到L3中。在T1編碼器中,使用了一種生成上下文的改進方法[6],盡管PSNR值有小許損失,但是卻大大的簡化了清除通道模型,使系統更具有實時性。
在漸進過程數截斷編碼時,由于預先設定的最低位平面為4,在T1編碼器編碼時,只對≥T2編碼器反饋回來的過程數的數據進行編碼。當然,在編碼位平面4時,如果統計的編碼字節數小于目標碼流長度,則需要保存Fc;一旦大于,則不需要保存。在所有編碼塊編碼結束之后,統計當前的編碼字節數,如果小于,則進入逐層位平面截斷編碼,這時需要重新導入之前保存的Fc,而非重新初始化。這樣向低位平面方向逐層的編碼,直至滿足所需的編碼字節數。在編碼字節數大于目標碼流字節數且編碼完所有碼塊后,率控制模塊就會把每個編碼塊的截斷通道的碼流數再依次搜索一遍,確定最終的碼流截斷點,然后就可由碼流組織模塊組織和發送數據。
該編碼系統使用Visual DSP++5.0仿真驗證,通過對幾幅典型的圖像進行仿真測試,統計在16倍壓縮下所處理的碼流和目標碼流長度、PSNR值以及時間周期數,仿真圖像大小為512×512,經過3層小波變換,分塊大小為64×64。結果如表1所示。

表1 JPEG2000PCRD算法和本文的新型碼率控制算法硬件仿真比較
比較表1中的3種截斷編碼算法可得,新型碼率控制算法的編碼字節較前兩種算法少了很多,且非常接近于目標碼流字長,同時其時間周期數也是最少的,此外,其PSNR值與漸進過程數截斷編碼算法相同,且只比標準算法略低了0.05~0.1 dB。
針對多媒體應用和通信的要求,提出了一種適合于高速實時圖像壓縮硬件實現的率控制方案。該方案通過漸進提升最低編碼通道和逐層截斷編碼的方法,使T1編碼器避免對那些產生將被丟棄碼流的通道進行編碼,從而使編碼效率大大提升。經過仿真驗證,該實時壓縮系統每秒能處理30幀512×512的灰度圖像。
[1] ISO.JPEG2000 part1:final committee draft(ISO/IEC FCD15441-1)[S].USA:ISO/IEC JTC1/SC29/WG1 N11855,2000.
[2] TAUBMAN D.High performance scalable image compression with EBCOT[J].IEEE Trans on Image Process,2000,9(7):1158-1170.
[3] CHEN Kuanfu,LIAN Chung Jr.Analysis and architecture design of EBCOT for JPEG2000[C].Sydney,Australia:IEEE ISCAS 2001,2001.
[4] 孫文方,趙亦工,石自民,等.基于JPEG2000漸進過程截斷數編碼算法[J].計算機工程,2006,32(20):213-216.
[5] Taekon K,Hyun M K,Ping S T,et al.Memory efficient progressive rate-distortion algorithm for JPEG2000[J].IEEE Transactions on Circuits and Systems for Video Technology,2005,15(1):181-187.
[6] 田東庚,趙亦工,孫文方.基于JPEG2000一種上下文生成的改進方法[J].遙感遙測,2006,27(2):37-41.