離散余弦變換的函式如下:
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[100];
//memset(temp2,0,100*sizeof(double));
//memcpy(temp2,dct,dctnum*sizeof(double));
//int n = 0; }
在這個演算法中輸入源資料可能為0,這時log函式將溢位。所以先判斷輸入資料是否為0,判斷的演算法如下:
double d = data[j];
if(d > std::numeric_limits::min())
這裡使用了乙個c++標準庫中的極小值,當乙個double數大於他時就認為不是0。當資料有效是在處理,否則不處理。
離散余弦變換 DCT
由上面的引用可見,位元速率壓縮基於變換編碼和熵值編碼兩種演算法。前者用於降低熵值,後者將資料變為可降低位元數的有效編碼方式。在mpeg標準中,變換編碼採用的是dct,變換過程本身雖然並不產生位元速率壓縮作用,但是變換後的頻率係數卻非常有利於位元速率壓縮。jpeg影象壓縮演算法 輸入影象被分成8 8或...
離散余弦變換DCT
dft 離散傅利葉變換 實變換的dft有共軛對稱性,有一半的資料冗餘。因此,提出dct。dct 在頻域是實訊號,減少一半以上的計算,實數域變換,變換核為實數,余弦函式。用處 大多數自然訊號的能量集中在低頻部分 可用於資料壓縮 二維dct變換定義 因此我們獲得dct和tdct係數矩陣,就可以得到最終的...
初學DCT 離散余弦變換
其中,f i 為原始的訊號,f u 是dct變換後的係數,n為原始訊號的點數,c u 可以認為是乙個補償係數,可以使dct變換矩陣為正交矩陣。看出來變換範圍都是到n 1,所以適用於方陣,如果不是的話,需要先補齊再做變換 看 也的確是這樣,這點比較重要 然後應該是逆變換後再去除重構部分得到原始 圖象等...