藍(lán)麗金 江勇捷


摘要:為了提高圖片的傳輸速度和質(zhì)量,需對(duì)圖片信息先壓縮后傳輸,從而數(shù)據(jù)的儲(chǔ)存減少,傳輸速度提高,傳輸時(shí)間縮短,傳輸質(zhì)量大大提高。本文采用ARM作為主控芯片充分利用了它的硬件資源和軟件資源,實(shí)現(xiàn)圖像對(duì)圖像的編碼和解碼過(guò)程。本研究根據(jù)要求設(shè)計(jì)了一套實(shí)驗(yàn)樣機(jī),最后的測(cè)試結(jié)果表明,該方案設(shè)計(jì)基本合理,具有一定的可行性。實(shí)驗(yàn)調(diào)試效果不錯(cuò),基本能滿足設(shè)計(jì)要求,且經(jīng)過(guò)處理過(guò)后的圖像能清晰的顯示。
關(guān)鍵詞:JPEG;圖像壓縮;圖像編碼;圖像解碼
中圖分類(lèi)號(hào):TP302 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)10-0105-02
0 引言
隨著多媒體技術(shù)的高速發(fā)展,靜態(tài)圖像的應(yīng)用越來(lái)越廣泛,圖像的存儲(chǔ)和圖像的傳輸是靜態(tài)圖像應(yīng)用的兩個(gè)重要方面;但根據(jù)現(xiàn)實(shí)應(yīng)用情況來(lái)看,靜態(tài)圖像的存儲(chǔ)過(guò)程中占用了我們?cè)絹?lái)越多的存儲(chǔ)空間[1]。因此,對(duì)靜態(tài)圖像的壓縮成為了一個(gè)研究熱點(diǎn)。
由于圖像文件傳輸占用大量帶寬,同時(shí)圖像文件存儲(chǔ)也占用了大量?jī)?nèi)存空間,故近年來(lái),研究人員對(duì)圖像壓縮技術(shù)越來(lái)越重視,而大部分信息行業(yè)依賴于圖像壓縮技術(shù)來(lái)解決圖像傳輸占用大量帶寬和浪費(fèi)大量?jī)?nèi)存空間的問(wèn)題,這就進(jìn)一步推動(dòng)了圖像壓縮技術(shù)的發(fā)展。有了圖像壓縮技術(shù),人們不再因移動(dòng)存儲(chǔ)設(shè)容量不足而無(wú)法拷貝圖像等資料的困擾。此外,很多新的圖像處理技術(shù)也隨著數(shù)字化媒體技術(shù)的發(fā)展而逐步優(yōu)化,如圖像的建檔和遠(yuǎn)程診斷以及通信系統(tǒng)等應(yīng)用場(chǎng)合。本文采用JPEG標(biāo)準(zhǔn)對(duì)圖像進(jìn)行編、解碼的研究。圖像的解碼是編碼的逆過(guò)程,由于本文是對(duì)已壓縮的JPEG圖像進(jìn)行再次壓縮(有損壓縮),因此,只需要先熵解碼,反量化,然后進(jìn)行新的表量化,刪除了冗余圖像數(shù)據(jù),并再編碼,省去了DCT和IDCT、顏色轉(zhuǎn)換,使得讓轉(zhuǎn)換速度大大提高。
1 系統(tǒng)硬件組成
Tiny6410是一款以ARM11作為主處理器的核心控制器,該CPU設(shè)計(jì)是基于ARM1176JZF-S核,大量的多媒體處理單元集成在內(nèi)部,支持多種格式的視頻文件硬件編碼和解碼,可在LCD和TV端顯示;它同時(shí)帶有3D圖形加速器,以實(shí)現(xiàn)加速渲染功能,它支持2D圖形圖像的平滑縮放、翻轉(zhuǎn)等動(dòng)作。它集成了128M DDR RAM,256M/1GB SLC Nand Flash存儲(chǔ)器。本文的圖片獲取采用天敏mini眼攝像頭,ARM采用Linux系統(tǒng),圖形界面使用QT。
2 圖像解碼
2.1 讀入圖像的標(biāo)志信息
根據(jù)JPEG專家組定義的JFIF交換格式,JPEG文件的組成有8個(gè)部分[2]:圖像開(kāi)始SOI標(biāo)記、APP0標(biāo)記、APPn標(biāo)記(其中n=1~15任選)、一個(gè)或者多個(gè)量化表DQT、幀圖像開(kāi)始SOF0、一個(gè)或者多個(gè)霍夫曼表DHT、掃描開(kāi)始SOS、壓縮圖像數(shù)據(jù)、圖像結(jié)束EOI。通過(guò)這些標(biāo)志,把要解碼的文件的相關(guān)信息都讀出來(lái),做好解碼工作的準(zhǔn)備。
不同的的變量結(jié)構(gòu)體首先被定義出來(lái),該變量結(jié)構(gòu)體對(duì)應(yīng)各個(gè)標(biāo)記,用來(lái)存儲(chǔ)標(biāo)記內(nèi)表示的信息。其中有以下幾項(xiàng)信息是比較重要的,即圖像長(zhǎng)寬、水平/垂直采樣因子、哈夫曼表和多個(gè)量化表等多項(xiàng)信息。(1)根據(jù)標(biāo)志位讀入圖像信息;(2)確定字的高低位;(3)掃描并讀出出哈夫曼表;(4)通過(guò)哈夫曼表建立哈夫曼樹(shù)。
2.2 熵解碼
由于8*8數(shù)據(jù)塊是JPEG圖片格式的一般結(jié)構(gòu),圖像數(shù)據(jù)是存儲(chǔ)信息的單位是位,同時(shí),內(nèi)部數(shù)據(jù)實(shí)際是在編碼過(guò)程中實(shí)現(xiàn)時(shí)域到頻域的變換,從而得到結(jié)果。所以,1個(gè)直流分量與63個(gè)交流分量構(gòu)成了每個(gè)單元顏色分量。而查找哈夫曼樹(shù)的思路其實(shí)就是解碼的步驟。
各個(gè)顏色分量所相應(yīng)的直流和交流分量使用的哈夫曼樹(shù)編號(hào)是通過(guò)先獲取標(biāo)記段SOS中的各個(gè)顏色分量的信息而獲取的,如表1所示,為各個(gè)顏色分量對(duì)應(yīng)的編號(hào)。
以下為解析一個(gè)顏色分量單元的步驟:
(1)從需要的顏色分量單元數(shù)據(jù)流的開(kāi)頭開(kāi)始一位一位的讀取,然后再查直流哈夫曼樹(shù),直到該分量直流哈夫曼樹(shù)的某個(gè)碼字與讀入的編碼進(jìn)行比較而一致時(shí)獲得該碼字對(duì)應(yīng)的權(quán)值。通過(guò)8個(gè)位的位數(shù)來(lái)表示權(quán)值直流分量數(shù)值,這也是作為接下來(lái)所讀入的解碼位數(shù)。
(2)再繼續(xù)的一位位的讀入數(shù)據(jù),直到該分量交流哈夫曼樹(shù)的某個(gè)碼字(葉子結(jié)點(diǎn))與讀入的編碼一致,然后用交流哈夫曼樹(shù)取得該碼字的權(quán)值。權(quán)值的低4位表示該交流分量數(shù)值的二進(jìn)制位數(shù),高4位表示當(dāng)前數(shù)值前面有多少個(gè)連續(xù)的零,因此,第低4位就是接下來(lái)要讀入的位數(shù)。
(3)連續(xù)不斷重復(fù)以上第2個(gè)步驟,直到滿足兩個(gè)交流分量數(shù)據(jù)結(jié)束條件其中一個(gè)即可,兩個(gè)結(jié)束條件為:
第一,當(dāng)讀入碼字的權(quán)值為零時(shí)表示接下來(lái)的交流分量全部為零;
第二,已經(jīng)讀入63個(gè)交流分量。
2.3 直流系數(shù)的差分解碼
把所有單元的顏色分量分別按Y分量、Cr分量、Cb分量進(jìn)行分類(lèi)。每種分量?jī)?nèi),兩個(gè)相鄰的顏色分量的直流變量的編碼方式為差分方式,意味著,熵解碼出來(lái)的直流變量數(shù)值只是當(dāng)前顏色分量單元的相鄰兩個(gè)單元的差值。所以當(dāng)前得到的變量值需要加上他們的差分變量[3]進(jìn)行校正,即如公式(1)所示。
2.4 反量化
從獲取的JPEG的文件信息中,在標(biāo)記段SOF中的信息字段可以查出亮度和色度各自使用不同的量化表。
圖像的所有圖片數(shù)據(jù)都要進(jìn)行反量化,反量化的過(guò)程相對(duì)比較簡(jiǎn)單,只需要對(duì)8*8的顏色分量單元里的64個(gè)值一一對(duì)應(yīng)的乘以所對(duì)應(yīng)的量化表內(nèi)相同位置的值即可。
3 圖像編碼
3.1 量化
由于人眼視覺(jué)特性,JPEG針對(duì)此特性設(shè)計(jì)了相應(yīng)的量化表。量化對(duì)于前面得到的64個(gè)空間頻率振幅值按比例縮小,并取四舍五入的整數(shù)值的處理過(guò)程稱為量化。JPEG標(biāo)準(zhǔn)中推薦的量化表[5]如表2所示。共有64個(gè)元素,按照從上到下,從左到右的順序與FDCT變換后的幅值對(duì)應(yīng),每一元素記為Q(u,v),u和v對(duì)應(yīng)行和列,量化公式[4]為式(2):
本設(shè)計(jì)采用有損壓縮,亮度量化表采用Q=100,色彩量化表Q=50。這樣,圖像看起來(lái)就跟灰度圖像差不多,把色度都過(guò)濾掉。大大壓縮了圖片。
3.2 熵編碼
熵編碼也可以說(shuō)是哈夫曼編碼,其編碼步驟是重復(fù)使用的數(shù)據(jù)采取較短的代碼代替,較長(zhǎng)的代碼代替較少使用的數(shù)據(jù),每個(gè)數(shù)據(jù)的代碼各不相同。由于這些代碼都是二進(jìn)制碼,同時(shí)代碼的長(zhǎng)度是可變的,所以就實(shí)現(xiàn)了代碼壓縮的目的[5]。
以下為具體的哈夫曼編碼步驟:
第一步,每個(gè)符號(hào)出現(xiàn)頻率首先被統(tǒng)計(jì)出來(lái);
第二步,按從小到大的順序排列上述得到的從左到右的頻率;
第三步, 每一次選出最小的兩個(gè)值就是二叉樹(shù)的兩個(gè)葉子節(jié)點(diǎn),這就是它們的根節(jié)點(diǎn),該節(jié)點(diǎn)不再參與比較,而新的根節(jié)點(diǎn)參與比較。
(4)重復(fù)(3),直到最后得到和為1的根節(jié)點(diǎn)。
產(chǎn)生哈夫曼編碼需要對(duì)原始數(shù)據(jù)掃描兩遍。第一遍掃描要精確地統(tǒng)計(jì)出原始數(shù)據(jù)中每個(gè)值出現(xiàn)的頻率,第二遍是建立哈夫曼樹(shù)并進(jìn)行編碼。需要建立二叉樹(shù)并遍歷二叉樹(shù)生成編碼,因此數(shù)據(jù)壓縮和還原速度都較慢,但簡(jiǎn)單有效,因而得到廣泛應(yīng)用。
4 實(shí)驗(yàn)測(cè)試及結(jié)果分析
圖1中左邊為經(jīng)過(guò)解碼之后再編碼的的圖像,右邊為攝像頭直接獲取的圖片。可以從圖片看出,經(jīng)過(guò)處理后的圖像色彩已經(jīng)失真的,是由于本設(shè)計(jì)采用的是有損壓縮,而且為了達(dá)到更大的壓縮比,把原始圖像里面的色度給剔除。
圖2為處理前后的圖片的大小,abc.jpg為處理后的圖像,bac.jpg為原始圖像。可以看出,把原始圖像從19.3K壓縮到4.7K左右。剔除色彩后,可以再次壓縮4倍。這使得網(wǎng)絡(luò)傳輸?shù)乃俣却蟠筇岣吡恕?/p>
參考文獻(xiàn)
[1] 陳雪松,王海巍.JPEG壓縮編碼算法應(yīng)用及發(fā)展前景研究[J].計(jì)算機(jī)應(yīng)用與數(shù)字工程,2009,1:57-90.
[2] 許剛,廖斌,李承毅.JPEG圖象文件格式分析[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,1998(10):37-39.
[3] 劉方敏,等.JPEG2000圖像壓縮過(guò)程廈原理概述[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)報(bào),2002:3-6.
[4] 吳樂(lè)南.數(shù)據(jù)壓縮[M].電子工業(yè)出版社,2005.
[5] 嚴(yán)劍.Huffman算法及其在數(shù)據(jù)壓縮中的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,1996(48):15-20.