隨著多媒體技術的不斷運用,圖像壓縮要求更高的性能和新的特征。為了滿足靜止圖像在特殊領域編碼的需求,JPEG2000作為一個新的標準處于不斷的發(fā)展中。它不僅希望提供優(yōu)于現(xiàn)行標準的失真率和個人圖像壓縮性能,而且還可以提供一些現(xiàn)行標準不能有效地實現(xiàn)甚至在很多情況下完全無法實現(xiàn)的功能和特性。這種新的標準更加注重圖像的可伸縮表述。所以就可以在任意給定的分辨率級別上來提供一個低質量的圖像恢復,或者在要求的分辨率和信噪比的情況下提取圖像的部分區(qū)域。原始圖像數(shù)據(jù)(例如。bmp位圖)首先進行畫布坐標標定,然后在畫布坐標的基礎上進行劃分:第一步先劃分為不同的分量(component),第二步將畫布區(qū)域劃分為大小相同的矩形“片”(tile),這兩個步驟可以互換。在畫布坐標系統(tǒng)預處理之后,就是進入JPEG2000的核心階段之一:離散小波分析(DWT)。小波分析被直接運用于各個片,這樣每個片區(qū)域都被DWT分析,形成不同的分辨率級別,每個分辨率級別中含有四個子帶,這樣就為JPEG2000的分辨率遞進的功能提供了可能。在這之后,就進入了JPEG2000的第二個核心階段: 嵌入式優(yōu)化截斷編碼(EBCOT)。首先將各個子帶進行EBCOT的預處理過程:量化。量化對圖像有損壓縮負責,而此過程可有可無,用戶可以自由選擇,因而JPEG2000對有損和無損壓縮兼容。預處理過后,進入EBCOT的核心編碼階段,該階段分為兩次,一次編碼主要是碼塊劃分和熵編碼,二次編碼主要是分層打包的過程。最后,碼流將會以封包流(pack-stream)的形式傳輸,包的主頭描述了原始圖像和不同的分解及編碼類型以便查找、提取、解碼和重構指定分辨率級、保真度、感興趣區(qū)域和其他特點的圖像部分。
1 JPEG2000系統(tǒng)的組成原理
JPEG2000相對于JPEG的最大改進就是以離散小波變換(DWT)代替了DCT編碼。JPEG2000的編解碼流程如圖1所示。本系統(tǒng)首先對源圖像數(shù)據(jù)進行離散小波變換,然后對變換后的小波系數(shù)進行量化,接著對量化后的數(shù)據(jù)熵編碼,最后形成輸出碼流。編碼器(encoder),是一種輸入模擬視頻信號并將它轉換為數(shù)字信號格式,以進一步壓縮和傳輸?shù)挠布?軟件設備。像視頻的mpeg4,音頻的mp3,ac3,dts等,這些編碼器可以將原始數(shù)據(jù)壓縮存放,剛才都是常用的編碼格式,還有些專業(yè)的編碼格式,一般家庭基本不會用到。為了在家用設備或者電腦上重放這些視頻和音頻則需要用到解碼軟件,一般稱為插件。比如mpeg4解碼插件ffdshow,ac3解碼插件ac3fliter等。只有裝了各種解碼插件你的電腦才能重放這些圖像和聲音。
通過預處理可為不同類型的圖像提供一個統(tǒng)一的接口,以便于后續(xù)使用同樣的編碼器進行處理,這一步驟是將多種類型的圖像壓縮加入到統(tǒng)一框架中的關鍵。它主要包括三個步驟:圖像分片、直流平移和分量變換。
小波的多分辨率分析特性使之既可高效地描述圖像的平坦區(qū)域,又可有效地表示圖像信號的局部突變,它在空域和頻域都有良好的局部性,因而能夠聚焦到圖像的任意細節(jié)。
優(yōu)化截斷嵌入塊編碼(The Embedded BlockCoding with Optimized Truncation,簡稱EBCOT)是JPEG2000標準的核心,它不僅能對圖像進行有效壓縮,同時,其產生的碼流還具有分辨率可伸縮性、信噪比可伸縮性、隨機訪問和處理等非常好的特性。
2 Blackfin56l處理器
Blackfin處理器是一類專為滿足當今嵌入式音頻、視頻和通信應用的計算要求和功耗約束條件而設計的新型32位DSP。Blackfin處理器主要基于ADI和Intel公司聯(lián)合開發(fā)的微信號架構(MSA),MSA(MeasurementSystemAnalysis)使用數(shù)理統(tǒng)計和圖表的方法對測量系統(tǒng)的分辨率和誤差進行分析,以評估測量系統(tǒng)的分辨率和誤差對于被測量的參數(shù)來說是否合適,并確定測量系統(tǒng)誤差的主要成分。同時,MSA(maritime safety administration)也是海事安全管理局的英文簡稱。該器件具有以下特點:
(1)高性能的處理器內核
Blackfin處理器架構基于一個10級RISCMCU/DSP流水線和一個專為實現(xiàn)最佳代碼密度而設計的混合16/32位指令集架構。
(2)高帶寬DMA能力
Blackfin561具有多個獨立的DMA控制器,這些控制器可支持自動數(shù)據(jù)傳輸,而且所需的處理器內核開銷極少。DMA傳輸可出現(xiàn)于內部存儲器和諸多具有DMA功能的外設之間。
(3)專用視頻指令
除了具有對8位數(shù)據(jù)以及許多像素處理算法所常用的字長的固有支持之外,Blackfin處理器架構還包括專為增強視頻處理應用而定義的指令。
(4)高效控制處理
Blackfin561提供有各種各樣的微控制器型外設,包括UARTS、SPI、PPI控制器、支持PWM的定時器、看門狗定時器、實時時鐘和一個無縫同步和異步存儲器控制器。
(5)分層的存儲器架構
Blackfin561支持改進的哈佛結構,該結構是具有分級的存儲器結構的組合。BF56l器件的地址總線寬度為32位,可以訪問4G字節(jié)的地址空間。Blackfin處理器的存儲器架構在器件實現(xiàn)中可提供Level l(L1)和Level 2(L2)存儲模塊,并可以通過EBIU外接L3處理器。
3 系統(tǒng)設計
本系統(tǒng)主要實現(xiàn)數(shù)字圖像的采集和壓縮處理。它有效利用了Blackfin561的專用視頻接口PPI和其它豐富的接口資源,具有設計簡單、便于軟件編程的特點。圖2所示其系統(tǒng)工作流程及連接框圖。
由圖2可見,本系統(tǒng)首先由CCD攝像頭來采集圖像,輸入的模擬信號經ADV7183視頻編碼芯片轉換成ITU一656格式的數(shù)字視頻流,該視頻流通過BF561的PPI傳輸?shù)絊DRAM。然后由DSP從SDRAM讀入圖像,并執(zhí)行JPEG2000編碼操作,最后將壓縮視頻流輸入到輸出模塊進行傳輸。
4 JPEG2000算法移植
如果用戶導入的Blackfin處理器的C代碼能夠兼容ANSI C語言,那么,就能直接在Blackfin上進行構建并執(zhí)行這個“現(xiàn)成的”代碼程序。但是結合嵌入式應用環(huán)境,移植時還需注意以下幾點:
首先要注意不同的平臺對數(shù)據(jù)類型的長度定義可能是不一樣的。在程序移植中可以對數(shù)據(jù)類型使用typedef宏進行定義,如“typedef intINT32;”這樣便于移植時更改。
其次,因為嵌入式系統(tǒng)中的存儲空間有限,而且是分級的,且不同級別的處理器大小和運算速度均不同。因此,在定義變量時需要考慮其存放地址。通過section(“存儲器段名”)語句可以將變量和代碼放入指定地址。其中“存儲器段名”可在ldf件中設置。
第三為了程序調用方便,PC平臺下的C程序會經常使用大量的動態(tài)內存分配(如calloc、realloc、new等)。考慮到嵌入式系統(tǒng)的特點,即需要不停的循環(huán)處理,因此,應該用靜態(tài)數(shù)組代替動態(tài)內存分配。這樣不僅可以避免動態(tài)內存分配造成的內存碎片問題,同時存儲結構也更加清楚明了。
此外,由于源程序中有許多文件操作,而嵌入式系統(tǒng)并不直接支持文件操作,所以應予以剔除,用讀寫數(shù)組的方式來替代。
最后應注意Visual DSP++兼容的C語言庫函數(shù)。由于它不能識別<malloc.h>等庫文件名稱,而calloc、malloc等動態(tài)內存分配函數(shù)均包含在<stdlib.h>中。所以,若要使用malloc,只需在程序中包入<stdlib.h>即可。注意以上幾點,C語言源程序就可以在VisualDSP++下運行,從而實現(xiàn)其功能了。
5 程序優(yōu)化
由于移植后的算法只是簡單的實現(xiàn)了圖像編碼功能,而遠不能保證其實時性,因而需要對其進行優(yōu)化。優(yōu)化主要涉及浮點轉定點運算、代碼優(yōu)化和存儲器優(yōu)化。
5.1 浮點運算轉定點運算
Blackfin處理器是一款定點處理器。該處理器本身并不支持float、double等浮點數(shù)據(jù)類型,而只能通過仿真實現(xiàn),所以,用Blackfln直接進行浮點運算是很費時的。因而應將小波變換及其它涉及浮點運算的模塊全部定點化。
可以將浮點系數(shù)乘以一個尺度因子,使其變換成整數(shù)。然后在運算過程中再除以尺度因子,這樣就避免了浮點操作。同時,Blackfin處理器是針對小數(shù)形式進行優(yōu)化設計的,它提供了大量的運算指令,可以快速的執(zhí)行定點和小數(shù)運算。下面給出小波變換定點化的一段程序:
5.2 代碼優(yōu)化
設計時可以結合具體的硬件環(huán)境對代碼本身做出大量優(yōu)化,以使得編譯器能夠充分的使用硬件循環(huán)、軟件流水化、矢量化等技術。但是,也應注意一下幾個方面:
首先,因為循環(huán)是程序中時間消耗最大的部分,所以要把主要精力集中在循環(huán)程序的設計上。應盡量使用短循環(huán);避免循環(huán)執(zhí)行的依賴性;確保內部循環(huán)次數(shù)比外部的多;在循環(huán)中應避免條件代碼,否則會出現(xiàn)大量控制流延遲;在循環(huán)體中不要放函數(shù)調用語句。
其次,定點處理器本身不直接支持除法操作,所以,應該盡量避免除法。如“if(X/Y>A/B)”可以寫成“if(X*B>A*Y)”。通過移位操作同樣可以避免除法,如除以8可以用左移3位來代替。最后,通過查詢表的方法也可以避免一些復雜運算。
5.3 存儲器優(yōu)化
存儲器(Memory)是計算機系統(tǒng)中的記憶設備,用來存放程序和數(shù)據(jù)。計算機中全部信息,包括輸入的原始數(shù)據(jù)、計算機程序、中間運行結果和最終運行結果都保存在存儲器中。它根據(jù)控制器指定的位置存入和取出信息。有了存儲器,計算機才有記憶功能,才能保證正常工作。按用途存儲器可分為主存儲器(內存)和輔助存儲器(外存),也有分為外部存儲器和內部存儲器的分類方法。外存通常是磁性介質或光盤等,能長期保存信息。內存指主板上的存儲部件,用來存放當前正在執(zhí)行的數(shù)據(jù)和程序,但僅用于暫時存放程序和數(shù)據(jù),關閉電源或斷電,數(shù)據(jù)會丟失。
Blackfin56l中的存儲器采用分層結構,距離核最近的Ll存儲器運行速度最快,但容量很小。因此需要對圖像數(shù)據(jù)進行合理的存儲器資源分配,以使得絕大多數(shù)操作都集中在L1存儲器。下面以小波變換為例來進行說明。
本系統(tǒng)中待處理的圖像位于SDRAM中。圖3所示是DMA雙緩沖操作示意圖,DMA優(yōu)化的總體思想是以一行圖像數(shù)據(jù)為基本單位,然后通過DMA把要處理的數(shù)據(jù)轉移到Ll,實現(xiàn)數(shù)據(jù)的高效處理。傳輸可采用雙緩沖乒乓操作,這樣可避免DMA傳輸數(shù)據(jù)所耗費的時間。
為了驗證JPEG2000編碼器在BF56l上移植和優(yōu)化后的效果,我們對一幅512x512x8bit圖像進行測試并給出了相關數(shù)據(jù)。表l所列為16倍壓縮率下優(yōu)化前后的數(shù)據(jù)對比。
6 結束語
JPEG2000是新一代圖像壓縮國際標準。本設計可實現(xiàn)JPEG2000圖像壓縮算法在DSP上的移植和優(yōu)化,壓縮后的圖像具有較高的信噪比。同時經過優(yōu)化,其編碼器的運算速度也得到了很大的提高,可以滿足實際應用的需要。最后的結果。
QICK