機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
基于DSP的JPEG圖像解碼算法的實現(xiàn)
基于DSP的JPEG圖像解碼算法的實現(xiàn)
 更新時間:2009-6-5 9:18:11  點擊數(shù):2
【字體: 字體顏色
 摘 要:概述了JPEG圖像解碼算法的基本原理,論述了JPEG圖像解碼算法基于DSP的實現(xiàn)過程,并重點討論了JPEG圖像解碼中IDCT變換和Huffman解碼算法的實現(xiàn)和優(yōu)化。本文介紹的JPEG圖像解碼算法可以應(yīng)用到數(shù)碼相機、多媒體手機等多種場合。
  關(guān)鍵詞:DSP;JPEG;IDCT變換;Huffman解碼
 JPEG算法是一種數(shù)字圖像壓縮編碼算法,具有壓縮比例高、失真小的特點,并已被確定為國際標準[1]。要對以JPEG文件格式進行存儲的數(shù)字圖像進行顯示和回放,需對其進行解碼。DSP處理器具有特殊的處理器結(jié)構(gòu)、指令系統(tǒng)和指令流程,是一種特別適合數(shù)字信號處理的微處理器[2]。DSP對JPEG圖像的解碼處理,具有小巧靈活、實時高效的特點,在諸如數(shù)碼相機、****系統(tǒng)、手機、PDA以及可視電話等多媒體嵌入式系統(tǒng)中應(yīng)用廣泛。 1JPEG圖像解碼算法的基本原理
  JPEG圖像解碼需要將JPEG圖像數(shù)據(jù)恢復(fù)成壓縮編碼前的圖像數(shù)據(jù)。如圖1所示,JPEG
圖像解碼須經(jīng)過預(yù)處理、Huffman解碼、反量化、IDCT變換這幾個主要步驟,然后還要經(jīng)過后續(xù)處理才能最終將JPEG圖像顯示出來。 2JPEG圖像解碼算法的實現(xiàn)和優(yōu)化
  
本文以16位定點ADSP為例,論述使用DSP將24位真彩色JPEG圖像解碼為可顯示的RGB顏色空間圖像的算法流程。
2.1預(yù)處理
  JPEG圖像解碼需要從JPEG圖像文件中提取解碼需要的各種信息和壓縮數(shù)據(jù)。JPEG圖像文件
大體上可分為2個部分:壓縮數(shù)據(jù)和標記碼。壓縮數(shù)據(jù)是以MCU(最小編碼單元)形式存儲的經(jīng)過壓縮編碼后的數(shù)據(jù)。標記碼給出了諸如圖像長度、寬度、量化表、Huffman表等重要信息,而這些信息都包含在不同類型的標記碼中。預(yù)處理算法需要識別不同的標記碼,并提取標記碼中的有用信息。當進入SOS(掃描開始)標記碼并開始讀取壓縮數(shù)據(jù)時,預(yù)處理任務(wù)結(jié)束,開始進入解碼階段。
2.2基于IDCT的解碼實現(xiàn)
  
基于IDCT的解碼過程如圖1虛線框所示,包括:Huffman解碼、反量化和IDCT變換。如前所述JPEG文件中的壓縮數(shù)據(jù)是以MCU形式存儲的,因此解碼過程也必須以MCU為單元來實現(xiàn),即不斷對MCU單元進行循環(huán)解碼,直到取完所有壓縮數(shù)據(jù)為止。JPEG文件中MCU可以定義成多種模式,本文以MCU的4∶1∶1模式進行說明。
2.2.1Huffman解碼的實現(xiàn)   如圖2所示,對一個MCU進行Huffman解碼,需在完成亮度解碼后才能進行色度解碼。解碼后得到6個具有64位元素的一維數(shù)組,分別是:4個Y亮度數(shù)組、1個Cb色度數(shù)組、1個Cr色度數(shù)組。對亮度和色度進行解碼其實就是對亮度數(shù)組和色度數(shù)組的解碼。對一個數(shù)組來說,Huffman解碼包括直流解碼和交流解碼。對數(shù)組第一個元素的解碼稱為直流解碼(簡記為DC解碼),對剩下的63個元素的解碼稱為交流解碼(簡記為AC解碼)。JPEG文件中一般包含4個Huffman表,即亮度DC表、AC表,色度DC表、AC表。對不同的數(shù)據(jù)進行解碼需要調(diào)用不同的Huffman表。DC解碼出的數(shù)據(jù)稱為DC值,但最終的DC值卻是直接解碼出的DC值與該數(shù)組緊跟的前面一個數(shù)組的DC值之和。AC解碼一般會得到多個數(shù)據(jù),包括一些連續(xù)0數(shù)據(jù)和一個非0數(shù)據(jù)。
  不管是亮度還是色度解碼,也不管是AC還是DC解碼, Huffman碼是其最小解碼單位,且每個Huffman碼的解碼流程都是大致相同的。一個Huffman碼包括碼頭和碼值2部分,碼頭用來惟一的標識該Huffman碼,并與Huffman表一一對應(yīng),碼值是該碼的實際大小。圖3是ADSP完成一個Huffman碼解碼的流程圖。在圖3中,SR是ADSP中32位移位寄存器,他包括2個可以單獨使用的16位寄存器:SR0和SR1。當SR從低16位開始將SR0中的數(shù)據(jù)向左移位時,從SR0移出的數(shù)據(jù)會進入SR1中。對一個Huffman碼進行解碼需要首先找到該碼的碼頭,而最短的
碼頭有2個二進制位。為此,從JPEG文件中讀取一個字的數(shù)據(jù)后,先取其高兩位來分析。圖3中,判斷A是指:判斷SR1中的數(shù)據(jù)是否是包含在Huffman判斷表中的Huffman碼頭,判斷B是指:判斷SR0移位后剩下的數(shù)的位數(shù)是否不小于查得的Huffman碼值位數(shù),X是指SR0中剩下的還沒有移位的數(shù)的位數(shù),Y是指查得的Huffman碼值位數(shù)。
  
Huffman碼是變長編碼,Huffman解碼時需要將所有壓縮數(shù)據(jù)都按位在Huffman表中進行分析比較以確定惟一標識Huffman碼的碼頭,如果直接采用從JPEG文件頭中讀取的Huffman表將非常浪費時間。為此,根據(jù)從JPEG文件中讀取的Huffman表,生成了2個單獨的表,即圖3中的Huffman值表和判斷表。值表存放的是與Huffman碼頭相對應(yīng)的碼值位數(shù)信息。判斷表專門用于判斷識別碼頭。判斷表確定碼頭后,根據(jù)碼頭就可以在值表中直接查到Huffman碼值的位數(shù),知道了碼值的位數(shù)就可以從JPEG文件中輕松取出該碼值來,從而完成一個Huffman碼的解碼。2.2.2反量化的實現(xiàn)
  
由圖1可知:量化運算需要量化表的配合。從JPEG文件中讀取的量化表一般有2個,分別用2個64位元素的一維數(shù)組來存儲,分別用于對亮度和色度行進反量化。反量化運算就是將上面經(jīng)Huffman解碼得到的數(shù)組中的元素與量化表中對應(yīng)位置元素相乘。反量化的計算可以利用ADSP的可變址寄存器尋址方式和循環(huán)指令,靈活快捷地裝載操作數(shù)并循環(huán)執(zhí)行,這樣可以大大減少非計算指令消耗DSP指令周期。反量化運算的ADSP實現(xiàn)代碼如下:
 
  
為了進行后面的IDCT,還需要將完成反量化運算的數(shù)組進行Z字型變換,即按圖4所示折線先后的順序?qū)⒁痪S數(shù)組變換成8×8的二維數(shù)組。這樣,一個MCU經(jīng)過反量化和Z字型變換后,就得到了8×8的Y數(shù)組4個,Cb,Cr數(shù)組各一個。2.2.3IDCT的實現(xiàn)
  
IDCT變換(離散余弦反變換),其計算可用下面的公式表示為:
  
為其他情況時,C(u)=C(v)=1。直接按照上面的公式計算,將會有很大的運算量,勢必影響JPEG的解碼速度,為此可以將二維的IDCT分為2個一維的IDCT,轉(zhuǎn)換如下:  
  
  這樣對8×8的二維數(shù)組進行IDCT的計算可以轉(zhuǎn)化為先對該數(shù)組的行分別進行8次一維IDCT,再對列分別進行8次一維IDCT,這樣就簡化了計算復(fù)雜度。下面研究如何快速實現(xiàn)一維IDCT。
  
由文獻[3]可得到8點一維DCT變換(用S8(u)表示)同16點DFT(離散傅里葉變換,用F16(u)表示)的關(guān)系公式如下:  
  
  由上面的公式可知:對應(yīng)的16點DFT的實部等于8點一維DCT變換乘以一個常數(shù)。因此,8點一維IDCT可由16點DFT來代替。根據(jù)參考文獻[3]的推導并結(jié)合ADSP的特點,8點一維IDCT可用如下公式流程來實現(xiàn):
  
  

  
從上面的運算步驟可以看出,一維IDCT運算已經(jīng)轉(zhuǎn)化成了一系列簡單的加減法及與常數(shù)相乘的乘法運算。簡化了IDCT運算的復(fù)雜度,并大大降低了運算量。用ADSP實現(xiàn)上面的運算,要注意結(jié)合ADSP自身的特點,以上述第(3)步計算b3,b4為例,ADSP實現(xiàn)代碼如下:
  
  
上述代碼利用了操作數(shù)的特點,合理調(diào)整了各公式數(shù)據(jù)的計算次序并選用合適的指令,使一次裝載的4個數(shù)據(jù)可以完成乘、加、減三種運算,節(jié)約了指令周期。
2.3后續(xù)處理的實現(xiàn)
  
經(jīng)過上述處理后,JPEG圖像解碼任務(wù)基本完成,但是要將解碼出的圖像進行顯示還需要一些后續(xù)處理。后續(xù)處理的任務(wù)之一就是完成顏色空間的轉(zhuǎn)換,即將JPEG圖像數(shù)據(jù)的YCbCr顏色空間轉(zhuǎn)換為RGB顏色空間,其轉(zhuǎn)換公式如圖5左邊所示。但是,為了使計算出的R,G,B的值都是正數(shù),需要對Y,Cb,Cr分別加128進行修正,同時該公式中乘法運算出現(xiàn)了浮點數(shù),故需要對浮點數(shù)進行定標處理。此處,參與乘法運算的浮點數(shù)定為Q14,為了使乘法運算的結(jié)果能直接參與加減運算,還需要將積再除以214。因此,圖5左邊的公式就需要轉(zhuǎn) 變成右邊的公式。從公式中可以看出:每計算出一對R,G,B數(shù)據(jù),需要一對Y,Cb,Cr數(shù)據(jù)參與運算,但是一個MCU計算出的Y,Cb,Cr數(shù)據(jù)是4∶1∶1的關(guān)系,為此,在進行顏色空間轉(zhuǎn)換前,需將1個Cb和1個Cr數(shù)組擴展成4個Cb和4個Cr數(shù)組。完成顏色空間的轉(zhuǎn)換后,再將計算出的R,G,B數(shù)據(jù)按顯示設(shè)備要求的格式排列,就可以顯示圖像了。

 

 
3結(jié)語
  
本文以上述算法和流程為基礎(chǔ),在ADSP的開發(fā)環(huán)境Visual DSP下,實現(xiàn)了JPEG的解碼算法,并進行了優(yōu)化,其中,消耗程序存儲器2 566 B,數(shù)據(jù)存儲器893 B。圖6是原始JPEG圖像,圖7是采用上述算法流程,在ADSP中進行解碼后得到的BMP圖像。對本算法進行適當?shù)男薷模?/FONT>就可以應(yīng)用到數(shù)碼相機、PDA等多種嵌入式系統(tǒng)中。 參考文獻[1]張益貞,劉滔.VisualC++.實現(xiàn)MPEG/JPEG編解碼技術(shù)[M] .北京:人民郵電出版社,2002
[2]徐科軍,黃云志.定點DSP的原理、開發(fā)與應(yīng)用[M].北京:清華大學出版 社,2002
[3]The Implementation of the 2D-IDCT[J].http://rnvs.informatik.tu- chemnit.zde/~jan/MPEG/HTML/IDCT.html.2000
<!--插入廣告JS代碼-->
  • 上一篇: 基于DSP實現(xiàn)的SDZ智能電動執(zhí)行機構(gòu)
  • 下一篇: 串行A/D、D/A與TMS320C6713的接口設(shè)計
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1