離散余弦變換(Discrete Cosine Transform)


  • DCT變換和FFT變換都屬於變換壓縮方法(TransformCompression),變換壓縮的一個特點是將從前密度均勻的信息分布變換為密度不同的信息分布。在圖像中,低頻部分的信息量要大於高頻部分的信息量,盡管低頻部分的數據量比高頻部分的數據量要小的多。例如刪除掉占50%存儲空間的高頻部分,信息量的損失可能還不到5%。
  • 變換編碼有很多種。K–L變換的壓縮效率很高,但算法實現困難;FFT變換算法實現簡單,但壓縮效率不是很理想。經過多方面的比較,最終勝出的算法是DCT,一種源自FFT的變換編碼。
  • 與FFT變換同時使用正弦和余弦函數來表達信號不同,DCT只使用余弦函數來表達信號。DCT變換有多個版本,有一種常用的DCT實現過程是這樣的:對一個長度為129(0到128)的信號進行DCT變換。首先,復制點127到點1,使整個信號變為:

                                                                           0, 1, 2, .., 127, 128, 127, …, 2, 1

     這串長度為256的時間域信號經過FFT變換后會生成一個長度為129的信號。生成的信號長度之所以129,而不是256,是因為時間域的信號對稱,根據二元性(duality),對應的頻率域信號的虛數部分全部為0。也就是說,我們輸入的長度為129的時間域信號經過DCT變換后,產生一個長度為129的頻率域信號,並且頻率域完全由余弦函數組成。
     在圖像處理中,每副圖像都會被切成8×8的小塊,塊的大小可以是任意,只是因為歷史原因人們習慣於切為8×8的塊。二維的圖像處理與一維的信號處理原理是一致的,只是一些計算公式不一樣,在二維圖像中,基函數的公式如下:
     公式中x和y指像素在空間域(對應一維的時間域)的坐標,u和v指基函數頻率域中的坐標。這個基函數公式基於8×8的塊,x,y, u, v的取值范圍都是0–7。
圖像經DCT變換后,低頻信息集中在矩陣的左上角,高頻信息則向右下角集中。直流分量在[0,0]處,[0,1]處的基函數在一個方向上是一個半周期的余弦函數,在另一個方向上是一個常數。[1,0]處的基函數與[0,1]類似,只不過方向旋轉了90度。

圖3-1 DCT變換中使用的基函數

  •       圖3-1是一個8×8的基函數示意圖,從中拿出了6個基函數並做出其在二維平面上的示意圖。這些基函數是不變的,在DCT變換中,這些基函數將與空間域中的每一個元素進行分別相乘,並將結果累加起來,就完成了空間域到頻率域的初步變換。此時還需要兩步就可以完成DCT變換:1.將第0行和第0列的值除以2(也就是說,[0,0]要除以4)。2.所有64個元素都除以16。

     DCT反變換(InverseDCT)更為容易,將頻率域中的基函數分別與對應的振幅(spectrum)相乘並累加,即可得到相應的空間域元素的值。

圖3-2 JPEG中DCT轉換示例

      在圖3-2中,最右側的那一欄表示使用不同比特數來表達頻率域的效果。原始頻率域需要64個bit來存儲,而g對應的頻率域使用10個bit來存儲頻率域中的單個元素,h和i對應的頻率域分別使用8個bit和5個bit。然后對d,e和f分別進行InverseDCT變換,g,h和i分別是使用原始空間域的值來減掉反變換(IDCT)后得到的殘差。從圖g可以看出,使用DCT壓縮將一個32bit的塊壓縮為10bit,但信息損失很小,幾乎可以忽略。從圖h和i可以看出,隨壓縮率的增大,信息損失也逐漸變大。

      經過DCT變換,壓縮還可以通過丟棄64個振幅(Spectrum)中的一些信息量較小的元素來實現,這樣即可以實現壓縮,還可以盡可能最大地保持信息。

      圖3-3顯示了使用不同數量的頻率域振幅(Spectrum)所得的重建圖像(a,b和c)與原始圖像d的對比效果。從圖c可以看出,即使棄掉占總數3/4的高頻振幅(Spectrum),使用占總數1/4的低頻振幅(Spectrum)也可以得到與原始圖像很接近的結果。而且誤差看起來是隨機分布的,可以看作是隨機噪聲。

圖3-3使用不同數量的Spectrum重建JPEG的效果

  • 下面使用JPEG的壓縮過程來介紹DCT變換在圖像處理中的應用。JPEG的壓縮過程可以分為以下幾步:1.將整副圖像分解為8×8的小塊。2.對每個小塊做DCT變換。3.對變換后得到的頻率域使用前面所介紹的方法進行壓縮:減少每個元素的bit值以及丟棄一些元素。通過量化表(QuantizationTable),這兩個壓縮操作可以一步實現。

     圖3-4是兩個JPEG量化表的示例,頻率域中的每個振幅(Spectrum)與量化表中對應的元素想除,即可得到壓縮后的頻率域。量化表a的壓縮率較低,表b的壓縮率比較高。例如a中最右下角的值為16,將對應振幅(Spectrum)的取值范圍由-127– 127縮小為-7– 7。而在圖b中右下角的值為256,將其清零,相當於將對應的高頻信息刪除。

圖3-4 JPEG量化表

      JPEG壓縮的第四步,8×8的塊被掃描為線性序列,掃描順序如圖3-5所示。對塊進行量化處理后,再進行游程編碼,那些振幅(Spectrum)為0的元素就被刪除掉了。

圖3-5線性掃描順序

     JPEG壓縮第五步是對線性序列進行游程編碼,第六步是對游程編碼后的序列進行Huffman編碼。

     JPEG的壓縮率可以設定,圖3-6顯示不同壓縮率的圖像與原始圖像的對比。

圖3-6不同壓縮率的JPEG對比

        為什么DCT變換對圖像的壓縮效果要比DFT好?主要原因是DCT中使用了半周期的基函數,而DFT使用的是整周期基函數。圖像中大部分像素的變化都是漸變的,因此DCT可以更好地表達圖像,從而獲得更高的壓縮效率。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM