專利名稱::數(shù)字影像數(shù)據(jù)的壓縮/解壓縮方法
技術(shù)領(lǐng)域:
:本發(fā)明有關(guān)一種數(shù)字影像數(shù)據(jù)的壓縮/解壓縮方法。針對數(shù)字影像數(shù)據(jù)的壓縮,習(xí)知的可變長度霍夫曼(Huffman)編碼方法的主要缺失,系于編碼之前需先對所有的編碼分類(class)建立完整的一概率表(probabilitytable)。針對即時(real-time)高速的數(shù)據(jù)壓縮需求,此一缺失顯己構(gòu)成嚴(yán)重的瓶勁,此因霍夫曼概率表需適時的更新之故。美國專利號4,916,544披露一個有條件的編碼方式,其系考慮被編碼像素的值以及兩個鄰近像素之值,才指定一個可變長度碼給被編碼像素。于此4,916,544專利中,實質(zhì)上具相同出現(xiàn)機率的影像值被合并成一編碼類(class)。尤其當(dāng)影像抓取速度很高時,習(xí)知的影像壓縮/解壓縮方法都不足以應(yīng)付。針對此,本發(fā)明提供一種利用萊斯(Rice)編碼的數(shù)據(jù)壓縮/解壓縮方法。本發(fā)明提供的一種數(shù)字影像數(shù)據(jù)的壓縮/解壓縮方法,此數(shù)字影像包含一目前像素,其值為X,及兩個與其鄰接的像素,其值分別為A、B,Δ為A、B間之差值,此方法包含一壓縮步驟,其包含根據(jù)A、B值產(chǎn)生目前像素的一預(yù)測值P;計算P及X間的差值e;以一第一準(zhǔn)則,將e值映射成一預(yù)測誤差值e′;產(chǎn)生一參數(shù)k,其為Δ的一函數(shù);根據(jù)參數(shù)k值對目前像素的預(yù)測誤差值e進(jìn)行萊斯編碼,而獲得一編碼值;如所得編碼值位元數(shù)超過一預(yù)定長度,則以一替代碼取代該編碼值,替代碼由一預(yù)定型態(tài)碼其后跟隨X值所構(gòu)成。本發(fā)明的目的、特征及優(yōu)點將參考附圖,結(jié)合實施例進(jìn)行詳細(xì)描述。附圖簡要說明圖1揭示被壓縮像素與鄰近像素的關(guān)系;圖2揭示本發(fā)明方法中的壓縮流程;圖3揭示本發(fā)明方法中的解壓縮流程;圖4揭示執(zhí)行本發(fā)明解壓縮流程的一硬件實施例;圖5揭示圖4中解碼單元之一細(xì)部設(shè)計。如圖1所示,設(shè)目前待壓縮像素40之值為X,而同一列前一像素44之值為A,同一行中前一像素42之值為B。于下述,以八個二進(jìn)位碼來代表像素值,亦即每個像素值介于0與255之間。1、壓縮圖2的流程中主要包含四個程序,即預(yù)測2、差值映射(mapping)4,萊斯編碼6、及統(tǒng)計圖末尾舍入(HstogramTailTruncation)12。(a)預(yù)測由于自然影像(naturalimage)之特征,一個影像內(nèi)相鄰像素間之相關(guān)性(correlation)都應(yīng)很高,除了影像邊緣區(qū)域之外。因此,一般而言,目前待壓縮像素的值X可以藉相鄰像素值加以預(yù)測。為了簡化硬件的設(shè)計,本發(fā)明采用公式P=(A+B)/2以產(chǎn)生目前像素的預(yù)測值P。經(jīng)由公式e=X-P之計算,預(yù)測值與真正值X之差值e即可獲得。此值由圖2的方框2輸出。舉例而言,當(dāng)A=130,B=146,X=144時,預(yù)測值P=138,而差值e=X-P=6。(b)差值e的映射差值e的可能范圍為[-P,255-P]。當(dāng)極端情形(P=0,X=255)或(P=255,X=0)發(fā)生時,差值可能介于[-255,255]間,此范圍之值需要九位元代表。下述映射程序之目的即執(zhí)行對差值e的一對一映射,使映射的結(jié)果e′只需八位元代表。值得注意的是,此一映射程序只是一選擇(optional)性程序,缺少此一程序并不影響發(fā)明的其他步驟。<prelisting-type="program-listing"><![CDATA[if(e≠0){if(p≤128)if(|e|≤p)if(e<0)e′=-2*eelsee′=2*e-1elsee′=p+|e|elseif(|e|≤(255-p))if(e<0)e′=-2*eelsee′=2*e-1elsee′=255-p+|e|}]]></pre>當(dāng)P≤128,上述步驟將差值e的可能[-P,-P+1,-P+2,...-1,0,1,...,P,P+1,P+2,...,255-P]值分別映射成的誤差預(yù)測值e′。而當(dāng)P≥128,差值e的可能值[-P,-P+1,-P+2...-1,0,1...,P,P+1,P+2,...,255-P]被分別映射成的誤差預(yù)測值e′。值得注意的是,經(jīng)過此一映射程序,仍能達(dá)到小e值映射小e′值的要求。當(dāng)P=138,e=6時,此e值被映射成e′=2×e-1=11,此值于圖2中的方框四輸出。(c)萊斯編碼(表1)由于小差值發(fā)生的機率一定高于大差值發(fā)生的機率,因此吾人亦采用統(tǒng)計的概念進(jìn)行編碼,以便節(jié)省編碼的大小。本發(fā)明采用下述的萊斯編碼法。萊斯編碼法包含下列步驟,藉參數(shù)k對整數(shù)n進(jìn)行編碼(1)先計算「(n/2k)」值,并將所得以單進(jìn)(Unary)碼表示,其中「」代表整數(shù)運算,亦即「(n/2k)」個“1”,然后再加上一個位元的“0”作為分隔碼,此分隔碼分隔單進(jìn)碼及下述的二進(jìn)位碼;(2)計算(nmod2k),mod為余數(shù)運算,然后所得值以k位元二進(jìn)位碼方式輸出;(3)將(1)(2)所得碼組合即形成萊斯碼。舉例而言,當(dāng)n=4,k=2,「(n/2k)」=「(4/4)」=1,此時單進(jìn)碼為“1”;(nmod2k)=(4mod4)=0,其二位元二進(jìn)位碼為“00”。此二碼組合后(須先加一個分隔碼“0”),得到其萊斯碼為“1000”,其中右邊向左數(shù)第三個“0”即為分隔碼。表1列示有n=0~8時,而參數(shù)k=0~3時,其分別對應(yīng)的萊斯碼。表1</tables>由表1可知,采用小參數(shù)k值來編碼小整數(shù)值n較有利。相反地,采用大參數(shù)k值來編碼大整數(shù)值較有利。因此,如何選擇一個適宜參數(shù)k值就成為一個關(guān)鍵的問題。因?qū)λ朽徑袼刂礎(chǔ),B言,清楚定義e′是小或大是有困難的,因此可能有許多準(zhǔn)則可選擇k值。但為了硬件的單純,最好選擇一個單純的法則選擇k值。對自然影像而言,鄰接的影像都呈現(xiàn)高度相關(guān),除了邊緣部分之外,因此,只于影像邊緣區(qū)的像素會產(chǎn)生大的e′值。而邊緣區(qū)的存在與否可由鄰接點值A(chǔ),B獲知。本發(fā)明所采用的一法則系取k=α(Δ),其中α為依下述準(zhǔn)則的運算子,Δ|A-B|。k=1,ifΔ<=2k=2,if2<Δ<=4k=3,if4<Δ<=8k=4,if8<Δ例如,A=130,B=146,則Δ=16,因而取k=4。當(dāng)以參數(shù)k=4來對e′=11編碼時,「(n/2k)」=「(11/16)」=0,亦即單進(jìn)碼的數(shù)目為零;(nmod2k)=(11mod16)=11,其4位元二進(jìn)位碼為1011。因此,e′=11時,目前像素X的萊斯碼為01011。(d)統(tǒng)計圖末尾舍入通常,得到長的萊斯碼的機率很小。但一旦發(fā)生,會使得壓縮比變差,且為了對付這些長萊斯碼,硬件的設(shè)計也變復(fù)雜。流程圖中的方框10及12可預(yù)防此問題的發(fā)生。當(dāng)所得的萊斯碼的長度大于16位元時,前述的編碼方式即停止,而目前像素碼即以一個24位元的碼代替。此24位元碼包含16位元的前導(dǎo)“1”值,然后跟隨8位元的像素值。16位元的前導(dǎo)“1”作為一個前置(prefix)指標(biāo),以告知后面8位元值即為目前像素的真正值。例如,當(dāng)鄰近像素的A,B值分別為140,且目前像素位在邊緣區(qū)且其值X=10(二進(jìn)位碼=00001010)時,P=140Δ=0,k=1,e=130,而e′=245,以k=1對e′=245編碼時,其萊斯碼為122個“1”加上“0”加上“1”(二進(jìn)位碼)。但其長度大于16個位元,故以111111111111111100001010取代。(e)電路基于前述末尾舍入法則,可使得電路的設(shè)計變得非常單純。上述關(guān)于壓縮程序可以用一些簡單的緩沖器(buffer),及算術(shù)、邏輯運算子,如+,-,X,/,及比較運算來完成。對熟習(xí)此項技術(shù)人士而言,此一硬件線路的設(shè)計是多樣化而具許多選擇。2、解壓縮如圖3所示,本發(fā)明的解壓縮方法包含四大程序即統(tǒng)計圖末尾舍入的回復(fù)22,萊斯碼解碼24,預(yù)測誤差的映射34以及目前像素值的產(chǎn)生36。(a)統(tǒng)計圖末尾舍入的回復(fù)首先,先確定被解壓縮的碼是否有前置值,其為16個前導(dǎo)“1”位元。如有,則于方框26中直接將后面的8位元值作為目前像素值。否則,此一碼送至方框24作萊斯解碼,以求得預(yù)測誤差。例如,如碼值111111111111111100001010須作解壓縮,吾人可用幾個“與”門就可測得16個“1”值的存在。因此,直接將00001010作為像素值即可。(b)萊斯碼解碼于方框24中,利用前述萊斯編碼法敘述中有關(guān)的相同準(zhǔn)則,吾人先利用鄰接像素值之差產(chǎn)生k參數(shù)值。依所獲得之k值,可變長度萊斯碼被解碼后即可得到目前像素的預(yù)測誤差e′。例如,假如鄰接像素的解碼完成后分別得到像素值A(chǔ)=130,B=146。利用壓縮時所用的準(zhǔn)則,即Δ=|A-B|,k=α(Δ),則k=4。對萊斯碼01011進(jìn)行萊斯解碼,其過程為2k=16,且無單進(jìn)碼,故「(n/16)」=0,所以n<16,1011=11(十進(jìn)位),由(nmod16)=11,得n=11。亦即經(jīng)由解碼,得到其預(yù)測誤差e′=11。(c)預(yù)測誤差e′,的映射獲得預(yù)測誤差e′后,采用反向映射即可得到目前像素值與預(yù)測值之差e。其詳細(xì)的步驟如以下的程序{if(p<128)if(e′≤2*p)if(e′isodd)e=[e′2]+1]]>elsee=-e′2]]>elsee=e′-pelseif(e′≤2*p)if(e′isodd)e=[e′2]+1]]>elsee=-e′2]]>elsee=-e′-p}(d)目前像素值的產(chǎn)生目前像素的預(yù)測值由公式P=(A+B)/2得到,此相同于壓縮時所用的公式。最后,將預(yù)測值加上差值e,即可得到目前像素值,即X=p+e。(e)電路本發(fā)明所采用的解壓縮電路,如圖4所示。其分別進(jìn)行(1)將像素碼數(shù)據(jù)由目前行緩沖器(buffer)64送至萊斯解碼器68進(jìn)行解碼,或送至統(tǒng)計圖末尾舍入濾波器(filter)70,供取得八位元的像素原始值;(2)解碼器68輸出e′值至另一解碼單元74以產(chǎn)生目前像素X值;(3)統(tǒng)計圖末尾舍入濾波器70或解碼單元74的輸出被寫入至寫緩沖器(Writebuffer)76;(4)寫緩沖器的值送至輸出緩沖器80。當(dāng)系統(tǒng)是采用32位元的總線時,緩沖器讀-寫運作最有效率的方式亦為32位元傳輸方式。輸入緩沖器72接收并暫時儲存被壓縮影像數(shù)據(jù),而輸出緩沖器80暫時貯存并輸出已解壓縮的影像值至外圍設(shè)備裝置。每當(dāng)它收到的數(shù)據(jù)超過32位元,則64位元長的寫緩沖器76將32位元內(nèi)容送至輸出緩沖器80。目前行緩沖器64及上一行緩沖器62皆為64元寬。有兩個指標(biāo),目前行緩沖器指標(biāo)66及上一行緩沖器指標(biāo)64供分別指示其內(nèi)有效內(nèi)容值之長度。目前行緩沖器64內(nèi)貯存待解壓縮之碼。當(dāng)目前行緩沖器指標(biāo)值小于32時,會從輸入緩沖器72將一個32位元數(shù)據(jù)送給目前行緩沖器64。由于統(tǒng)計圖末尾舍入之安排,本發(fā)明最長的編碼為24位元,每當(dāng)一個32位元傳輸完畢時,在目前行緩沖器64內(nèi)存在至少一待解壓縮碼等待被解壓縮。上一行緩沖器62貯存鄰近像素數(shù)據(jù)供解壓縮之用。每當(dāng)解碼完成乙次,上行緩沖器指標(biāo)值60減少8(位元)。同樣地,當(dāng)上一行緩沖器指標(biāo)值小于32時,會從輸出緩沖器80將一個32位元數(shù)據(jù)送給上一行緩沖器62。PK單元67供產(chǎn)生參數(shù)k及預(yù)測值p,其由上一行緩沖器62及最后位元組緩沖器78分別取得鄰接像素值A(chǔ)、B。依據(jù)參數(shù)k值,萊斯解碼器68將由目前行緩沖器64送來之碼予以解碼,解碼的方式系檢測第一個“0”位元,以檢測尾隨其后的k位元二進(jìn)位碼,經(jīng)過運算及判斷后,輸出預(yù)測誤差e′至解碼單元74。根據(jù)e′、P值,解碼單元74算出差值e,以及利用公式X=p+e,計算出X值,然后將其送至寫緩沖器76以及最后位元組緩沖器78。圖5揭露一個解碼單元74的實施例。其中,MUX代表多工器,ADD代表一個加法器,SUB代表一個減法器。圖5中信號的意義分別為ME=e′,MEB=e′=(255-e′)ME05=e’/2,ME05B=e′/2=(255-ME05)P2=P*2,P2B=(255-P2)ME_ODD=1當(dāng)e’為奇數(shù),=0當(dāng)e’為偶數(shù),P_GE_128=1當(dāng)p>=128,=0當(dāng)p<128權(quán)利要求1.一種數(shù)字影像數(shù)據(jù)的壓縮/解壓縮方法,此數(shù)字影像包含一目前像素,其值為X,及兩個與其鄰接的像素,其值分別為A、B,Δ為A、B間之差值,此方法包含一壓縮步驟,其包含根據(jù)A、B值產(chǎn)生目前像素的一預(yù)測值P;計算P及X間的差值e;以一第一準(zhǔn)則,將e值映射成一預(yù)測誤差值e′;產(chǎn)生一參數(shù)k,其為Δ的一函數(shù);根據(jù)參數(shù)k值對目前像素的預(yù)測誤差值e′進(jìn)行萊斯編碼,而獲得一編碼值;如所得編碼值位元數(shù)超過一預(yù)定長度,則以一替代碼取代該編碼值,替代碼由一預(yù)定型態(tài)碼其后跟隨X值所構(gòu)成。2.如權(quán)利要求1所述的方法,其中,所述預(yù)定型態(tài)碼為一組連續(xù)“1”值所組成。3.如權(quán)利要求1所述的方法,其中,所述預(yù)測誤差e′是差值e的一對一映射,使得表示預(yù)測誤差e′所需的位元數(shù)少于表示差值e所需的位元數(shù)。4.如權(quán)利要求1所述的方法,其中,所述預(yù)測誤差e′等于差值e。5.如權(quán)利要求1所述的方法,其中,此方法進(jìn)一步包含一解壓縮方法,其包含如待解壓縮的編碼值的領(lǐng)先位元包含該預(yù)定型態(tài)碼,則輸出該X值。6.如權(quán)利要求1所述的方法,其中,此方法進(jìn)一步包含一解壓縮方法,其包含如果待解壓縮的編碼值的領(lǐng)先位元未包含該預(yù)定型態(tài)碼,則根據(jù)A、B值產(chǎn)生預(yù)測值P;根據(jù)前述函數(shù),由Δ值產(chǎn)生k值;根據(jù)k值,將編碼值予以解碼,以獲得預(yù)測誤差e′;根據(jù)第一準(zhǔn)則及e′值,計算差值e;將預(yù)測值p與差值e相加,以獲得目前像素值X。全文摘要數(shù)字影像數(shù)據(jù)的壓縮/解壓縮方法,該數(shù)字影像包含一目前像素,其值為X,及兩個與其鄰接的象素,其值分別為A、B,△為A、B間之差值,該壓縮方法包括:(1)根據(jù)與X相鄰的象素A、B值產(chǎn)生目前像素X的一預(yù)測值P;(2)計算P及X間的差值e;(3)以一第一準(zhǔn)則,將e值映射成一預(yù)測誤差值e′;(4)產(chǎn)生一參數(shù)k,其為△的一函數(shù);(5)根據(jù)參數(shù)k值對目前像素的預(yù)測誤差值e′進(jìn)行萊斯編碼,而獲得一編碼值;(6)如所得編碼值位元數(shù)超過一預(yù)定長度,則以一替代碼取代該編碼值。文檔編號H04N7/32GK1182334SQ9611206公開日1998年5月20日申請日期1996年11月8日優(yōu)先權(quán)日1996年11月8日發(fā)明者蘇陽春,黃裕文申請人:明碁電腦股份有限公司