版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第.4:“Wherearithmeticprecisionisnotspecified,suchasthecalculationoftheIDCT,theprecisionshallbesufficientsothatsignificanterrorsdonotoccurinthefinalintegervalues.”逆DCT變換的過程這里不再詳述,需要實(shí)現(xiàn)這個(gè)的可以去參考這個(gè)標(biāo)準(zhǔn)。在實(shí)際應(yīng)用中一般通過兩次1-DIDCT變換來完成2-DIDCT變換,這種方法通常被稱為行-列法。一般來說,后者在結(jié)構(gòu)上的對稱性更好,并且可以重復(fù)使用硬件資源,所以在我們的芯片設(shè)計(jì)選用一種行-列法來進(jìn)行IDCT單元的結(jié)構(gòu)研究。二維IDCT可以分解成二次一維IDCT運(yùn)算,如以下公式。在結(jié)構(gòu)上,上兩式所定義的運(yùn)算使用了相同的運(yùn)算“核”(如以下公式所示),它們具有相似性。因此利用三角函數(shù)的各種關(guān)系,可以得到“核”的快速算法。其中,為了便于理解,可將快速算法表示成蝶形圖,如下圖。將對模塊進(jìn)行一維IDCT變換的結(jié)果存儲(chǔ)起來,轉(zhuǎn)置輸出,再進(jìn)行一次IDCT變換,即為相應(yīng)的二維IDCT變換。圖4-8折疊結(jié)構(gòu)的二維IDCT單元一行數(shù)據(jù)(一行有8個(gè)像素?cái)?shù)據(jù))在該單元中的處理流程是:1—>2—>3—>4—>5—>6—>7—>8。DCT變換探究1前言
此文適合于那些對DCT或?qū)aar小波的Mallat算法有一定了解的人。
由于我還是高一新丁,文學(xué)底子很薄弱,對于一些技術(shù)方面的知識(shí),我是有口說不出,無法用文字表達(dá)出來,因此這里提供的知識(shí)只是我所知道的1/4左右,還有3/4我不知該如何表達(dá),特別是第三節(jié)“深入研究DCT”,我個(gè)人認(rèn)為簡直是淺入!
如果你只是菜鳥,不但想看懂此文,而且還要看懂其他的類似文章,那么我教你一個(gè)最快的學(xué)習(xí)方法:
設(shè)X={10,20}
分解的方法:低頻=10+20=30,高頻=10-20=-10,
即Y={30,-10}
合并的方法:X(0)=(低頻+高頻)/2=(30+(-10))/2=10,X(1)=X(0)-高頻=10-(-10)=20
即X={10,20}
只要搞清楚低頻和高頻是怎么來的和如何合并的即可。2DCT簡介
DCT全名為DiscreteCosineTransform,中文名為離散余弦變換。在眾人皆知的JPEG編碼中,就是使用了DCT來壓縮圖像的。為什么DCT可以壓縮圖像?我想這個(gè)問題有很多人都想知道,但其實(shí)這是錯(cuò)誤的說法!因?yàn)镈CT在圖像壓縮中僅僅起到扶助的作用,給它n個(gè)數(shù)據(jù),經(jīng)變換后仍然會(huì)得出n個(gè)數(shù)據(jù),DCT只不過消除了這n個(gè)數(shù)據(jù)的冗余性和相關(guān)性。
即,用很少的數(shù)據(jù)就能大致還原出這n個(gè)數(shù)據(jù),其他的一些DCT系數(shù)只起到修正的作用,可有可無。
DCT有一個(gè)缺點(diǎn),就是計(jì)算量很大!因?yàn)槿绻凑誅CT的標(biāo)準(zhǔn)變換公式(二維)來實(shí)現(xiàn)8x8點(diǎn)陣的變換需要將近上萬次計(jì)算!后來提出了一種優(yōu)化方法,即將二維的DCT分解為兩個(gè)一維的DCT,這樣一來計(jì)算量就可以減少為原來的1/4。但是計(jì)算量依然巨大,不具有使用價(jià)值,后來在1988年有人提出了一種快速算法叫AAN,它也是將二維的DCT分解成一維的形式,但是二維計(jì)算量已減少到只有600來次了,JPG和MPEG編碼中的DCT就是使用AAN算法實(shí)現(xiàn)的。
DCT還有一個(gè)缺點(diǎn),就是不能無損變換,因?yàn)镈CT系數(shù)都是一些無理數(shù),目前為止,依然無法解決。3深入研究首先讓我們來看看AAN算法的第一階級(jí)變換代碼:
ForI=0To3
J=7-I
Y(I)=X(I)+X(J)
Y(J)=X(I)-X(J)
NextI
設(shè)X={10,20,30,40,50,60,70,80}
那么Y={90,90,90,90,-10,-30,-50,-70}
可以看出,這一階級(jí)的低頻部分(相加得出的數(shù)據(jù))全部相等,而高頻部分則呈線性或者是有規(guī)律的。DCT之所以能以較少的數(shù)據(jù)大致還原圖像,就是因?yàn)橥ㄟ^預(yù)測高頻部分而達(dá)到的。那么為何高頻部分可以預(yù)測呢?請仔細(xì)看上面的代碼,可以看出DCT是由外到內(nèi)來進(jìn)行處理的,由于像素及像素間有一定的關(guān)聯(lián)性,所以靠的越近的像素之間的差就應(yīng)該越小,越遠(yuǎn)就因該越大,但也并不是說所有的數(shù)據(jù)都具有這種規(guī)律,因此DCT預(yù)測出來的高頻數(shù)據(jù)就會(huì)和原高頻數(shù)據(jù)不大相同,它們之間的差便是第二節(jié)提出的修正數(shù)據(jù)。第二階級(jí)變換則是在第一階級(jí)變換的基礎(chǔ)上再次分解出低、高頻,和預(yù)測高頻,得出修正值。第三階級(jí)……。最后,再將DCT系數(shù)按照重要程度由大到小,由左到右,重排列即可。
例:X={10,20,30,40,50,60,70,80}
經(jīng)過FDCT后:Y={127,-64,0,-7,-0,-2,0,-1}
其中127是最最重要的,而-64次之,以此類推??梢园l(fā)現(xiàn),-7,-2,-1的能量都很小,說明這三個(gè)修正值可以忽略,當(dāng)忽略后,
得Y={127,-64,0,0,0,0,0,0}
經(jīng)過IDCT后:X={14,18,27,39,51,63,72,76}
這及原始數(shù)據(jù):X={10,20,30,40,50,60,70,80}
是非常接近的,肉眼很難發(fā)覺。4為何JPEG2000放棄DCT
在JPEG2000里,放棄了基于塊的DCT,而改為了小波變換。為何要放棄DCT呢?我認(rèn)為最根本的原因還是跟DCT的計(jì)算量有關(guān),第二節(jié)已經(jīng)指出,為了減少計(jì)算量,我們不得不使用只能處理8X8點(diǎn)陣的AAN快速算法(目前,也只有基于8X8點(diǎn)陣的),對于一幅圖像,必須將其分割成無數(shù)個(gè)8X8大小的“塊”,對塊進(jìn)行變換。在低碼率下,就會(huì)產(chǎn)生方塊效應(yīng),要解決這個(gè)問題,唯有不使用基于區(qū)塊的AAN快速算法,而是使用直接變換法,但計(jì)算量驚人!由于小波變換計(jì)算量很少,便于直接處理圖像數(shù)據(jù),因此就不會(huì)產(chǎn)生塊效應(yīng),但假如用小波也進(jìn)行基于8X8點(diǎn)陣的塊變換,在低碼率下,同樣也會(huì)有塊效應(yīng)!只要是基于塊變換的,那么在低碼率下就會(huì)出現(xiàn)塊效應(yīng),無論是DCT還是小波。因此,如果忽略DCT直接處理的計(jì)算量問題的話,我認(rèn)為壓縮效率會(huì)比JPEG2000更好?。ň唧w原因暫不討論)5DCT的改進(jìn)
下面的代碼是我對DCT變換的改進(jìn),它具有以下特性
l無損變換
l計(jì)算量少
l原位計(jì)算
經(jīng)改進(jìn)后,它已不再叫作DCT了,可以認(rèn)為是一種新的算法,只不過是在DCT的基礎(chǔ)上修改而來。
以下是正變換:X為輸入端,Y為輸出端
設(shè)X={10,20,30,40,50,60,70,80}那么Y={45,40,0,0,0,0,0,0}
'第一階級(jí)
ForI=0To3
J=7-I
Y(J)=X(J)-X(I)
Y(I)=X(I)+Fix(Y(J)/2)
NextI
'第二階級(jí)
ForH=0To4Step4
ForI=0To1
J=3-I
X(J+H)=Y(J+H)-Y(I+H)
X(I+H)=Y(I+H)+Fix(X(J+H)/2)
NextI
NextH
'第三階級(jí)
ForI=0To6Step2
Y(I+1)=X(I+1)-X(I)
Y(I)=X(I)+Fix(Y(I+1)/2)
NextI
'預(yù)測
Y(3)=Y(3)-Y(2)
Y(6)=Y(6)-Y(7)
Y(7)=Y(7)-Y(4)
'重要性排序及AAN一樣,皆為{0,4,2,6,1,5,7,3},此略為何能無損?為何能原位?和具體實(shí)現(xiàn)原理暫時(shí)略,以后我會(huì)補(bǔ)上6參考
[1]丁貴廣,計(jì)文平,郭寶龍VisualC++6.0數(shù)字圖像編碼p44,p57,p170快速DCT變換仿效FFT的FDCT方法有及DCT無關(guān)的復(fù)數(shù)運(yùn)算部分,選用代數(shù)分解法可以降低運(yùn)算量,達(dá)到高速運(yùn)算的目的。代數(shù)分解法實(shí)現(xiàn)如下:對一維DCT表達(dá)式直接展開,尋找各點(diǎn)表達(dá)式中共同項(xiàng),仿FFT蝶形關(guān)系,將表達(dá)式中的共同項(xiàng)作為下一級(jí)節(jié)點(diǎn),依次進(jìn)行多次,最后得到變換結(jié)果。一、DCT部分例子:Definecos(n*pi/16)Cn
F(0,v)=0.5*C(0)*[x(0)+x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)]F(1,v)=0.5*C(0)*[x(0)*C1+x(1)*C3+x(2)*C5+x(3)*C7+x(4)*C9
+x(5)*C11+x(6)*C13+x(7)*C15]
=0.5*{[x(0)-X(7)]C1+[X(1)-X(6)]*C3+[X(2)-x(5)]*C5
+[x(3)-x(4)]*C7]從上面的式子可以看到07,16,25,34可以作為第一次運(yùn)算的相加節(jié)點(diǎn),將所有節(jié)點(diǎn)的表達(dá)式列出后,可發(fā)現(xiàn)一個(gè)規(guī)律,得到一蝶形圖,按之編程,如下:#define
C10.9808
#define
C20.9239
#define
C30.8315
#define
C40.7071
#define
C50.5556
#define
C60.3827
#define
C70.1951//先做行DCT
voidfdctrow(double*blk)
{
doubleS07,S16,S25,S34,S0734,S1625;
doubleD07,D16,D25,D34,D0734,D1625;S07=blk[0]+blk[7];
S16=blk[1]+blk[6];
S25=blk[2]+blk[5];
S34=blk[3]+blk[4];
S0734=S07+S34;
S1625=S16+S25;D07=blk[0]-blk[7];
D16=blk[1]-blk[6];
D25=blk[2]-blk[5];
D34=blk[3]-blk[4];
D0734=S07-S34;
D1625=S16-S25;blk[0]=0.5*(C4*(S0734+S1625));
blk[1]=0.5*(C1*D07+C3*D16+C5*D25+C7*D34);
blk[2]=0.5*(C2*D0734+C6*D1625);
blk[3]=0.5*(C3*D07-C7*D16-C1*D25-C5*D34);
blk[4]=0.5*(C4*(S0734-S1625));
blk[5]=0.5*(C5*D07-C1*D16+C7*D25+C3*D34);
blk[6]=0.5*(C6*D0734-C2*D1625);
blk[7]=0.5*(C7*D07-C5*D16+C3*D25-C1*D34);//再做列DCTvoidfdctcol(double*blk)
{
doubleS07,S16,S25,S34,S0734,S1625;
doubleD07,D16,D25,D34,D0734,D1625;S07=blk[0*8]+blk[7*8];
S16=blk[1*8]+blk[6*8];
S25=blk[2*8]+blk[5*8];
S34=blk[3*8]+blk[4*8];
S0734=S07+S34;
S1625=S16+S25;D07=blk[0*8]-blk[7*8];
D16=blk[1*8]-blk[6*8];
D25=blk[2*8]-blk[5*8];
D34=blk[3*8]-blk[4*8];
D0734=S07-S34;
D1625=S16-S25;blk[0*8]=0.5*(C4*(S0734+S1625));
blk[1*8]=0.5*(C1*D07+C3*D16+C5*D25+C7*D34);
blk[2*8]=0.5*(C2*D0734+C6*D1625);
blk[3*8]=0.5*(C3*D07-C7*D16-C1*D25-C5*D34);
blk[4*8]=0.5*(C4*(S0734-S1625));
blk[5*8]=0.5*(C5*D07-C1*D16+C7*D25+C3*D34);
blk[6*8]=0.5*(C6*D0734-C2*D1625);
blk[7*8]=0.5*(C7*D07-C5*D16+C3*D25-C1*D34);voidfdct(double*block)
{
inti;
for(i=0;i<8;i++)
fdctrow(block+8*i);
for(i=0;i<8;i++)
fdctcol(block+i);
}二、IDCT部分
圖片來源:G.G.Pechanek,C.W.Kurak,C.J.Glossner,C.H.L.Moller,andS.J.WalshIBMMicroelectronicsDivision,ResearchTrianglePark,N.C."M.F.A.S.T.:AHIGHLYPARALLELSINGLECHIPDSPWITHA2DIDCTEXAMPLE"圖中未給出系數(shù),需自行算出,仿上述DCT方法直接展開表達(dá)式搜尋規(guī)律即可。編程如下:#define
C10.9808
#define
C20.9239
#define
C30.8315
#define
C40.7071
#define
C50.5556
#define
C60.3827
#define
C70.1951//對行做DCTvoididctrow(double*blk)
{
doubletmp[16];
//firststep
tmp[0]=blk[0]*C4+blk[2]*C2;
tmp[1]=blk[4]*C4+blk[6]*C6;
tmp[2]=blk[0]*C4+blk[2]*C6;
tmp[3]=-blk[4]*C4-blk[6]*C2;
tmp[4]=blk[0]*C4-blk[2]*C6;
tmp[5]=-blk[4]*C4+blk[6]*C2;
tmp[6]=blk[0]*C4-blk[2]*C2;
tmp[7]=blk[4]*C4-blk[6]*C6;
tmp[8]=blk[1]*C7-blk[3]*C5;
tmp[9]=blk[5]*C3-blk[7]*C1;
tmp[10]=blk[1]*C5-blk[3]*C1;
tmp[11]=blk[5]*C7+blk[7]*C3;
tmp[12]=blk[1]*C3-blk[3]*C7;
tmp[13]=-blk[5]*C1-blk[7]*C5;
tmp[14]=blk[1]*C1+blk[3]*C3;
tmp[15]=blk[5]*C5+blk[7]*C7;
//secondstep
tmp[0]=0.5*(tmp[0]+tmp[1]);
tmp[1]=0.5*(tmp[2]+tmp[3]);
tmp[2]=0.5*(tmp[4]+tmp[5]);
tmp[3]=0.5*(tmp[6]+tmp[7]);
tmp[4]=0.5*(tmp[8]+tmp[9]);
tmp[5]=0.5*(tmp[10]+tmp[11]);
tmp[6]=0.5*(tmp[12]+tmp[13]);
tmp[7]=0.5*(tmp[14]+tmp[15]);
//thirdstep
blk[0]=tmp[0]+tmp[7];
blk[1]=tmp[1]+tmp[6];
blk[2]=tmp[2]+tmp[5];
blk[3]=tmp[3]+tmp[4];
blk[4]=tmp[3]-tmp[4];
blk[5]=tmp[2]-tmp[5];
blk[6]=tmp[1]-tmp[6];
blk[7]=tmp[0]-tmp[7];
/*
blk[0]=0.5*(Y0C4+Y2C2+Y4C4+Y6C6+Y1C1+Y3C3+Y5C5+Y7C7);
blk[1]=0.5*(Y0C4+Y2C6-Y4C4-Y6C2+Y1C3-Y3C7-Y5C1-Y7C5);
blk[2]=0.5*(Y0C4-Y2C6-Y4C4+Y6C2+Y1C5-Y3C1+Y5C7+Y7C3);
blk[3]=0.5*(Y0C4-Y2C2+Y4C4-Y6C6+Y1C7-Y3C5+Y5C3-Y7C1);
blk[4]=0.5*(Y0C4-Y2C2+Y4C4-Y6C6-Y1C7+Y3C5-Y5C3+Y7C1);
blk[5]=0.5*(Y0C4-Y2C6-Y4C4+Y6C2-Y1C5+Y3C1-Y5C7-Y7C3);
blk[6]=0.5*(Y0C4+Y2C6-Y4C4-Y6C2-Y1C3+Y3C7+Y5C1+Y7C5);
blk[7]=0.5*(Y0C4+Y2C2+Y4C4+Y6C6-Y1C1-Y3C3-Y5C5-Y7C7);
*///在對列做DCTvoididctcol(double*blk)
{
doubletmp[16];
//firststep
tmp[0]=blk[0*8]*C4+blk[2*8]*C2;
tmp[1]=blk[4*8]*C4+blk[6*8]*C6;
tmp[2]=blk[0*8]*C4+blk[2*8]*C6;
tmp[3]=-blk[4*8]*C4-blk[6*8]*C2;
tmp[4]=blk[0*8]*C4-blk[2*8]*C6;
tmp[5]=-blk[4*8]*C4+blk[6*8]*C2;
tmp[6]=blk[0*8]*C4-blk[2*8]*C2;
tmp[7]=blk[4*8]*C4-blk[6*8]*C6;
tmp[8]=blk[1*8]*C7-blk[3*8]*C5;
tmp[9]=blk[5*8]*C3-blk[7*8]*C1;
tmp[10]=blk[1*8]*C5-blk[3*8]*C1;
tmp[11]=blk[5*8]*C7+blk[7*8]*C3;
tmp[12]=blk[1*8]*C3-blk[3*8]*C7;
tmp[13]=-blk[5*8]*C1-blk[7*8]*C5;
tmp[14]=blk[1*8]*C1+blk[3*8]*C3;
tmp[15]=blk[5*8]*C5+blk[7*8]*C7;
//secondstep
tmp[0]=0.5*(tmp[0]+tmp[1]);
tmp[1]=0.5*(tmp[2]+tmp[3]);
tmp[2]=0.5*(tmp[4]+tmp[5]);
tmp[3]=0.5*(tmp[6]+tmp[7]);
tmp[4]=0.5*(tmp[8]+tmp[9]);
tmp[5]=0.5*(tmp[10]+tmp[11]);
tmp[6]=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保溫隔熱玻璃購銷合同
- 水電暖工程分包合同案例
- 委托貸款協(xié)議樣式
- 老年人養(yǎng)護(hù)服務(wù)合同
- 2024年匯編:國際貿(mào)易擔(dān)保條款集3篇
- 校園演講稿模板集錦九篇
- 房屋粉刷工程分包協(xié)議
- 大型工程土方購銷
- 春節(jié)放假的通知集合6篇
- 特色食品采購合同標(biāo)準(zhǔn)
- 神態(tài)描寫課件
- 醫(yī)惠內(nèi)鏡消毒質(zhì)量追溯系統(tǒng)
- 如何提高基層干部群眾工作能力課件
- 風(fēng)險(xiǎn)分級(jí)管控與隱患排查治理雙重預(yù)防體系建設(shè)資料匯編
- 2022年讀者出版集團(tuán)有限公司招聘筆試試題及答案解析
- NB∕T 33009-2021 電動(dòng)汽車充換電設(shè)施建設(shè)技術(shù)導(dǎo)則
- 大學(xué)《傳播學(xué)概論》試卷及答案
- 工程設(shè)計(jì)費(fèi)收費(fèi)標(biāo)準(zhǔn)
- -堅(jiān)定目標(biāo)贏在執(zhí)行 主題班會(huì)課件
- 英語語法基礎(chǔ)知識(shí)教學(xué)講義課件
- 房屋買賣協(xié)議書電子版模板
評(píng)論
0/150
提交評(píng)論