離散余弦變換DCT

2021-07-24 15:52:51 字數 1289 閱讀 1102

dft:離散傅利葉變換

實變換的dft有共軛對稱性,有一半的資料冗餘。

因此,提出dct。

dct:在頻域是實訊號,減少一半以上的計算,實數域變換,變換核為實數,余弦函式。

用處:大多數自然訊號的能量集中在低頻部分(可用於資料壓縮)

二維dct變換定義

因此我們獲得dct和tdct係數矩陣,就可以得到最終的dct變換矩陣。

下面是dct變換的**:

//dct變換子程式:已知192*48的影象矩陣f_short,獲得 hm_w_h_h*hm_w_h_w(16*16)的漢明矩陣f

int mydct2(short f_short[n][m],short f[hm_w_h_h][hm_w_h_w])

//for(i=0;i//

//for(i=0;i//

//}//for(i=0;i//

//} fp_dct = fopen("dct.txt","rb");

fp_tdct = fopen("tdct.txt","rb");

fread(dct,sizeof(dct),1,fp_dct);

fread(tdct,sizeof(tdct),1,fp_tdct);

//注意排流水 dct和f_short的儲存空間不應該有cache衝突 最好這些儲存空間放在l2sram//

//dct變換:res = dctpara(hm_w_h_h*h) * image(h*w) * tdctpara(hm_w_h_h*w)' ;

//最終得到乙個 hm_w_h_h * hm_w_h_h 的矩陣,即取左上角16*16的矩陣

//dct * image(m*n) * tdct' , 只保留左上角的16*16

for(i=0;i//i的取值可以為0~48

} // 最終temp大小為hm_w_h_h*n(16*192)(可以為48*192)

for(i=0;i//0~48

}fclose(fp_dct);

fclose(fp_tdct);

return

0;}

離散余弦變換 DCT

由上面的引用可見,位元速率壓縮基於變換編碼和熵值編碼兩種演算法。前者用於降低熵值,後者將資料變為可降低位元數的有效編碼方式。在mpeg標準中,變換編碼採用的是dct,變換過程本身雖然並不產生位元速率壓縮作用,但是變換後的頻率係數卻非常有利於位元速率壓縮。jpeg影象壓縮演算法 輸入影象被分成8 8或...

離散余弦變換DCT

離散余弦變換的函式如下 void dct double data,int len,double dct,int dctnum dct i log data j cos i j 0.5 3.141592653589793 len double md dct i dct i k double temp2...

初學DCT 離散余弦變換

其中,f i 為原始的訊號,f u 是dct變換後的係數,n為原始訊號的點數,c u 可以認為是乙個補償係數,可以使dct變換矩陣為正交矩陣。看出來變換範圍都是到n 1,所以適用於方陣,如果不是的話,需要先補齊再做變換 看 也的確是這樣,這點比較重要 然後應該是逆變換後再去除重構部分得到原始 圖象等...