DCT(Discrete Cosine Transform)離散余弦變換是一種經典譜分析方法,屬於離散傅立葉變換的一種特殊情況,即在變換后的傅立葉級數中只包括余弦項,變化后的數據比較集中。經過DCT變換可以將圖片從色彩域轉換到頻率域,將原始圖像的信息塊轉化為代表不同頻率分量的系數集。它是一種廣泛使用的壓縮方法,首先把每個單獨的彩色圖像分量分成8×8圖像塊,然后經過二維DCT變換,其低頻分量都集中在左上角,高頻分量分布在右下角。變換之后還是8×8的數據塊,也就是說DCT變換本身並沒有起到壓縮數據的作用,但是它為以后的數據壓縮奠定了必不可少的基礎。
經過DCT變換的數據有2個優點:1,信號常將其能量的大部分集中於頻率域的一個小范圍內,這樣一來,描述不重要的分量只需要很少的比特數;2,頻率域分解映射了人類視覺系統的處理過程,並允許后繼的量化過程滿足其靈敏度的要求。對於變換之后的8×8的數據矩陣塊,矩陣最左上角的直流 (DC)系數幅度最大,以DC 系數為出發點向下、向右的其它DCT 系數,離DC 分量越遠,頻率越高,幅度值越小,即圖像信息的大部分集中於直流系數及其附近的低頻頻譜上,離DC 系數越來越遠的高頻頻譜幾乎不含圖像信息,甚至於只含雜波。
壓縮圖像是經過DCT變換之后的圖像,我們要對壓縮圖像進行解壓就要對壓縮數據進行“反DCT變換(DCT逆變換)”。DCT逆變換的方法有好幾種,我們這里采用行列分解的方法。
DCT逆變換的公式為:
可改寫為:
f=AτFA
其中A為矩陣:
對上面的公式進行變形的
Y =FA
f =AT Y
fT =(AT Y)T =YT A
其中F的數據塊。
經分析可知,完成一次DCT逆變換需要4步:
1:壓縮數據塊(8×8)矩陣與矩陣A(8×8)相乘,得到矩陣Y(8×8)。
2:對矩陣Y進行轉秩得到(8×8)。
3:Y的轉秩再與矩陣A相乘得到8×8的矩陣ft。
4:對ft 進行轉秩得到f。
所以整個設計中需要兩個模塊,一個用於矩陣的相乘,兩個用於矩陣的轉秩。
總體設計如下:
A矩陣乘法器的作用是實現輸入矩陣和A矩陣的相乘。注意A矩陣在乘法的右邊。
iDCT變換的對象是8 ×8的數據單元,既輸入數據共64個,按行輸入,每8個數據為一行。每輸入一行數據就分別和A矩陣的每一列進行乘加運算,每完成一次這樣的乘加運算就輸出一次結果。由於輸入在左邊,所以輸出的按矩陣的行的序列輸出的。比如,輸入第一行數據,分別和A矩陣的各列相乘,按順序輸出8個結果,這8個結果就是輸出矩陣的第一行;當輸入第二行數據時,同樣輸出8個結果,這8個結果是輸出矩陣的第二行。所以經過第一次矩陣乘法之后得到的是Y矩陣。
轉秩就是對64個數據進行重新排列的結果。
如下圖:
左邊為未轉秩的數據順序,右邊為轉秩之后的數據順序。