專利名稱::用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及視頻圖像的壓縮和解壓縮
技術(shù)領(lǐng)域:
,尤其涉及一種用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換(IDCT)方法。
背景技術(shù):
:在視頻圖像的壓縮和解壓縮過程,IDCT是圖像解碼過程中最常用的變換編碼之一,也是解碼中最核心、運算量最大的模塊之一。目前視頻圖像處理中用到的DCT/IDCT變換主要是16X16、8X8或4X4浮點變換或整數(shù)變換。其中整數(shù)IDCT與浮點IDCT相比,具有算法明晰簡單、運算速度快和占用內(nèi)存小等優(yōu)點。但是整數(shù)IDCT的算法依然非常復(fù)雜,對于8X8二維IDCT,W-Chen算法需要8次一維行變換和8次一維列變換,而一維整數(shù)8點IDCT變換,需要26(29)次加法,16(13)次乘法,因此對于8X8二維整數(shù)IDCT,理論上最多需要416(464)次加法,256(208)次乘法。對于一幀圖像,比如大小為128X128的圖像,有256個塊,則最多需要106496(118784)次加法,65536(53248)次乘法。如果對于分辨率更大的圖像,比如720X480,1280X1024等的大圖像,則加法運算,尤其是乘法運算都非常占用寄存器資源,因此極大影響算法的執(zhí)行速度,尤其當(dāng)程序在嵌入式系統(tǒng),比如DSP上執(zhí)行時乘法操作對整個程序的執(zhí)行影響是非常大。
發(fā)明內(nèi)容(—)要解決的技術(shù)問題有鑒于此,本發(fā)明的主要目的在于提供一種用于嵌入式實時解碼器的虛擬小數(shù)IDCT方法,以降低算法執(zhí)行時的復(fù)雜度,提高算法的執(zhí)行速度,節(jié)省程序的執(zhí)行時間,保證圖像的質(zhì)量。(二)技術(shù)方案為達(dá)到上述目的,本發(fā)明采用的技術(shù)方案如下—種用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換方法,該方法包括分析整數(shù)逆離散余弦變換的系數(shù),將整數(shù)逆離散余弦變換的系數(shù)值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作;將逆離散余弦變換的輸入值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作;將左移之后的系數(shù)值和輸入值相乘,取乘法結(jié)果的高16位。上述方案中,對于整數(shù)逆離散余弦變換的行變換,所述將整數(shù)逆離散余弦變換的系數(shù)值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作,是將整數(shù)逆離散余弦變換的系數(shù)值左移3位。上述方案中,對于整數(shù)逆離散余弦變換的行變換,所述將逆離散余弦變換的輸入值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作,是將整數(shù)逆離散余弦變換的12位的輸入值左移4位。上述方案中,對于逆離散余弦變換的列變換,所述將整數(shù)逆離散余弦變換的系數(shù)值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作,是將整數(shù)逆離散余弦變換的系數(shù)值左移3位。上述方案中,對于逆離散余弦變換的列變換,所述將逆離散余弦變換的輸入值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作,是將整數(shù)逆離散余弦變換的14位的輸入值左移2位。(三)有益效果從上述技術(shù)方案可以看出,本發(fā)明具有以下有益效果本發(fā)明提供的這種用于嵌入式實時解碼器的虛擬小數(shù)IDCT方法,由于將整數(shù)IDCT的系數(shù)值在16位所能表示的范圍內(nèi)進行盡可能多的左移操作,將IDCT的輸入值在16位所能表示的范圍內(nèi)進行盡可能多的左移操作,并將左移之后的系數(shù)值和輸入值相乘,取乘法結(jié)果的高16位,所以能夠有效降低算法執(zhí)行時的復(fù)雜度,提高算法的執(zhí)行速度,節(jié)省程序的執(zhí)行時間,保證圖像的質(zhì)量。圖1是一維8點IDCT變換的W-Chen算法示意圖;圖2是本發(fā)明提供的用于嵌入式實時解碼器的虛擬小數(shù)IDCT的方法流程圖;圖3是編碼端的重建圖像,三幀圖像依次是I幀、B幀和P幀;圖4是整數(shù)IDCT變換得到的圖像,三幀圖像依次是I幀、B幀和P幀;圖5是虛擬小數(shù)IDCT變換得到的圖像,三幀圖像依次是I幀、B幀和P幀。具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進一步詳細(xì)說明。本發(fā)明提出的這種用于嵌入式實時解碼器的虛擬小數(shù)IDCT方法,由行變換和列變換組成。對于性能有限的嵌入式系統(tǒng),虛擬小數(shù)IDCT變換的優(yōu)點在于,能大大節(jié)省程序的執(zhí)行時間,保證圖像有很好的質(zhì)量。這里的虛擬小數(shù)IDCT變換是以整數(shù)IDCT變換為基礎(chǔ)進行的推導(dǎo),涉及的二維IDCT公式如(1)式所示。力=^SSC(")C(V)F(",V)C0S2A/C0S2A/由式(1)可以得到/(x,力二土ZZCO)CO)F(w,力cos^-^~cos國、,W=0v=027V(1)—1^C(")C(v)尸(")cos(2x+l一(2_y+l)v;r4=ov=o52iVcos-27VV8=n\l8=0(2)4式(2)是將二維IDCT變換分離成一維變換的過程。目前大部分二維IDCT的快速算法都是先行列分離,再利用高效的一維IDCT算法,比如W-Chen算法。W-Chen算法是將IDCT原始的變換矩陣分解成幾個小的變換矩陣,然后逐步計算。由于W-Chen算法的乘法運算主要集中在輸入附近,因此大部分乘法中的乘數(shù)是輸入元素,可以通過提前判斷輸入元素中是否有較多的零元素,從而直接跳過一部分的乘加運算,達(dá)到提高運算速度的目的。對于整數(shù)IDCT變換,W-Chen算法采用的是將一維IDCT的行變換和列變換的系數(shù)擴大一定的倍數(shù),這樣就可以避免小數(shù)IDCT的大運算量,執(zhí)行速度慢的缺點。圖1示出了一維8點IDCT變換的W-Chen算法示意圖。圖2是本發(fā)明提供的用于嵌入式實時解碼器的虛擬小數(shù)IDCT的方法流程圖,該方法包括以下步驟步驟201:分析整數(shù)逆離散余弦變換的系數(shù),將整數(shù)逆離散余弦變換的系數(shù)值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作;步驟202:將逆離散余弦變換的輸入值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作;步驟203:將左移之后的系數(shù)值和輸入值相乘,取乘法結(jié)果的高16位。本發(fā)明是對W-Chen算法進行虛擬小數(shù)化,從而得到虛擬小數(shù)IDCT變換,具體實現(xiàn)過程如下所示首先,分析整數(shù)IDCT變換的缺點,無論是在行變換還是列變換中,整數(shù)IDCT變換中間的乘加過程需要用到32位的數(shù)據(jù)存儲類型,這對于在DSP上的編程,該數(shù)據(jù)類型是非常占用硬件資源和影響程序的執(zhí)行速度。因此對于在DSP上的編程,使用匯編語言優(yōu)化整數(shù)IDCT變換,該方法的核心思想是將中間的乘加結(jié)果用16位代替原來的32位數(shù)據(jù),用來提高算法的執(zhí)行速度,相比整數(shù)IDCT這種方法使圖像的精度稍微有損失,不過精度的損失是非常小的。其次,虛擬小數(shù)IDCT的具體實現(xiàn)過程由以下幾步組成a、首先分析整數(shù)IDCT變換的系數(shù),IDCT變換中用到的系數(shù)有Wl=0xB19,W2=0xA74,W3=0x968,W5=0x649,W6=0x454,W7=0x235。b、將整數(shù)IDCT變換的系數(shù)在16位所能表示的范圍內(nèi),將系數(shù)進行左移3位的操作,即Wl,=0x58C8,W2,=0x53A0,W3,=0x4B40,W5,=0x3248,W6,=0x22A0,W7,=0xllA8。c、將IDCT變換的輸入值,在16位所能表示的范圍內(nèi),進行盡可能多的左移操作。d、將左移之后的系數(shù)值和輸入值相乘,取乘法結(jié)果的高16位。具體的操作過程是對于IDCT的行變換,將12位的輸入值左移4位,系數(shù)左移3位,將乘法得到的結(jié)果取高16位。對于IDCT的列變換,將14位的輸入值左移2位,系數(shù)左移3位,將乘法得到的結(jié)果取高16位。以分辨率為128X128的三幀圖像為例,該圖像的幀類型分別是I幀、B幀和P幀,說明分別采用整數(shù)IDCT變換和虛擬小數(shù)IDCT變換的三幀圖像,以及它們相對于編碼端重建圖像的PSNR值。圖3是編碼端的重建圖像,圖4是整數(shù)IDCT變換得到的圖像,圖5是虛擬小數(shù)IDCT變換得到的圖像。5以ADSP2191這個DSP為例,對整數(shù)IDCT變換的指令數(shù)統(tǒng)計結(jié)果為,一維8點的行變換總共有208條匯編語言指令,一維8點列變換總共有249條匯編語言指令;而虛擬小數(shù)IDCT變換的指令數(shù)統(tǒng)計結(jié)果為一維8點行變換總共有141條匯編語言指令,一維8點列變換總共有146條匯編語言指令。因此對于一個8X8的塊,虛擬小數(shù)IDCT變換比整數(shù)IDCT變換最多可以節(jié)省1360條指令,而對于4:2:0的128X128圖像,共有256個8X8亮度塊和128個8X8色度塊,所以一幀圖像最多可以節(jié)省522240條指令。對于4:2:0的720X480圖像,共有5400個8X8亮度塊和2700個8X8色度塊,所以一幀圖像最多可以節(jié)省11016000條指令。現(xiàn)以一個例子來具體說明采用虛擬小數(shù)IDCT和整數(shù)IDCT變換得到的圖像與編碼端重建圖像PSNR的比值。表1是解碼端分別采用整數(shù)IDCT變換和虛擬小數(shù)IDCT變換得到圖像的PSNR值,表2是采用虛擬小數(shù)IDCT變換與編碼端的重建圖像的PSNR值。<table>tableseeoriginaldocumentpage6</column></row><table>表1<table>tableseeoriginaldocumentpage6</column></row><table>表2以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進行了進一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。權(quán)利要求一種用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換方法,其特征在于,該方法包括分析整數(shù)逆離散余弦變換的系數(shù),將整數(shù)逆離散余弦變換的系數(shù)值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作;將逆離散余弦變換的輸入值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作;將左移之后的系數(shù)值和輸入值相乘,取乘法結(jié)果的高16位。2.根據(jù)權(quán)利要求1所述的用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換方法,其特征在于,對于整數(shù)逆離散余弦變換的行變換,所述將整數(shù)逆離散余弦變換的系數(shù)值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作,是將整數(shù)逆離散余弦變換的系數(shù)值左移3位。3.根據(jù)權(quán)利要求1所述的用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換方法,其特征在于,對于整數(shù)逆離散余弦變換的行變換,所述將逆離散余弦變換的輸入值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作,是將整數(shù)逆離散余弦變換的12位的輸入值左移4位。4.根據(jù)權(quán)利要求1所述的用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換方法,其特征在于,對于逆離散余弦變換的列變換,所述將整數(shù)逆離散余弦變換的系數(shù)值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作,是將整數(shù)逆離散余弦變換的系數(shù)值左移3位。5.根據(jù)權(quán)利要求1所述的用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換方法,其特征在于,對于逆離散余弦變換的列變換,所述將逆離散余弦變換的輸入值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作,是將整數(shù)逆離散余弦變換的14位的輸入值左移2位。全文摘要本發(fā)明公開了一種用于嵌入式實時解碼器的虛擬小數(shù)逆離散余弦變換方法,該方法包括分析整數(shù)逆離散余弦變換的系數(shù),將整數(shù)逆離散余弦變換的系數(shù)值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作;將逆離散余弦變換的輸入值在16位所能表示的范圍內(nèi),進行盡可能多的左移操作;將左移之后的系數(shù)值和輸入值相乘,取乘法結(jié)果的高16位。利用本發(fā)明,能夠有效降低算法執(zhí)行時的復(fù)雜度,提高算法的執(zhí)行速度,節(jié)省程序的執(zhí)行時間,保證圖像的質(zhì)量。文檔編號G06T9/00GK101742298SQ20081022668公開日2010年6月16日申請日期2008年11月19日優(yōu)先權(quán)日2008年11月19日發(fā)明者張大勇,梁利平申請人:中國科學(xué)院微電子研究所