1. 程式人生 > >DCT 離散餘弦變換 DiscreteCosineTransform

DCT 離散餘弦變換 DiscreteCosineTransform

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

離散餘弦變換(Discrete Cosine Transform,簡稱DCT變換)是一種與傅立葉變換緊密相關的數學運算。在傅立葉級數展開式中,如果被展開的函式是實偶函式,那麼其傅立葉級數中只包含餘弦項,再將其離散化可匯出餘弦變換,因此稱之為離散餘弦變換。

離散餘弦變換(Discrete Cosine Transform)

離散餘弦變換(DCT)是N.Ahmed等人在1974年提出的正交變換方法。它常被認為是對語音和影象訊號進行變換的最佳方法。為了工程上實現的需要,國內外許多學者花費了很大精力去尋找或改進離散餘弦變換的快速演算法。由於近年來 數字訊號處理晶片(DSP)的發展,加上 專用積體電路設計上的優勢,這就牢固地確立離散餘弦變換(DCT)在目前影象編碼中的重要地位,成為H.261、JPEG、MPEG 等國際上公用的編碼標準的重要環節。在視訊壓縮中,最常用的變換方法是DCT,DCT被認為是效能接近K-L變換的準最佳變換,變換編碼的主要特點有:   (1)在變換域裡視訊影象要比空間域裡簡單。   (2)視訊影象的相關性明顯下降,訊號的能量主要集中在少數幾個變換系數上,採用量化和
熵編碼
可有效地壓縮其資料。   (3)具有較強的抗干擾能力,傳輸過程中的誤碼對影象質量的影響遠小於預測編碼。通常,對高質量的影象,DMCP要求通道誤位元速率 ,而變換編碼僅要求通道誤位元速率 。   DCT等變換有快速演算法,能實現實時視訊壓縮。針對目前採用的幀內編碼加 運動補償的視訊壓縮方法的不足, 我們在Westwater 等人提出三維 視訊編碼的基礎上, 將三維變換的結構應用於視訊 影象壓縮, 進一步實現了新的視訊影象序列的編碼方法。

離散餘弦變換英語DCT for Discrete Cosine Transform)是與傅立葉變換相關的一種變換,它類似於

離散傅立葉變換DFT for Discrete Fourier Transform),但是隻使用實數。離散餘弦變換相當於一個長度大概是它兩倍的離散傅立葉變換,這個離散傅立葉變換是對一個實偶函式進行的(因為一個實偶函式的傅立葉變換仍然是一個實偶函式),在有些變形裡面需要將輸入或者輸出的位置移動半個單位(DCT有8種標準型別,其中4種是常見的)。

最常用的一種離散餘弦變換的型別是下面給出的第二種型別,通常我們所說的離散餘弦變換指的就是這種。它的逆,也就是下面給出的第三種類型,通常相應的被稱為"反離散餘弦變換","逆離散餘弦變換"或者"IDCT"。

有兩個相關的變換,一個是離散正弦變換DST for Discrete Sine Transform),它相當於一個長度大概是它兩倍的實奇函式離散傅立葉變換;另一個是改進的離散餘弦變換MDCT for Modified Discrete Cosine Transform),它相當於對交疊的資料進行離散餘弦變換。

離散餘弦變換英語DCT for Discrete Cosine Transform)是與傅立葉變換相關的一種變換,它類似於離散傅立葉變換DFT for Discrete Fourier Transform),但是隻使用實數。離散餘弦變換相當於一個長度大概是它兩倍的離散傅立葉變換,這個離散傅立葉變換是對一個實偶函式進行的(因為一個實偶函式的傅立葉變換仍然是一個實偶函式),在有些變形裡面需要將輸入或者輸出的位置移動半個單位(DCT有8種標準型別,其中4種是常見的)。

最常用的一種離散餘弦變換的型別是下面給出的第二種型別,通常我們所說的離散餘弦變換指的就是這種。它的逆,也就是下面給出的第三種類型,通常相應的被稱為"反離散餘弦變換","逆離散餘弦變換"或者"IDCT"。

有兩個相關的變換,一個是離散正弦變換DST for Discrete Sine Transform),它相當於一個長度大概是它兩倍的實奇函式離散傅立葉變換;另一個是改進的離散餘弦變換MDCT for Modified Discrete Cosine Transform),它相當於對交疊的資料進行離散餘弦變換。

File:Dandelion clock quarter dft dct.png

目錄

應用

離散餘弦變換,尤其是它的第二種型別,經常被訊號處理影象處理使用,用於對訊號影象(包括靜止影象運動影象)進行有損資料壓縮。這是由於離散餘弦變換具有很強的"能量集中"特性:大多數的自然訊號(包括聲音和影象)的能量都集中在離散餘弦變換後的低頻部分,而且當訊號具有接近馬爾可夫過程Markov processes)的統計特性時,離散餘弦變換的去相關性接近於K-L變換Karhunen-Loève變換——它具有最優的去相關性)的效能。

例如,在靜止影象編碼標準JPEG中,在運動影象編碼標準MJPEGMPEG的各個標準中都使用了離散餘弦變換。在這些標準制中都使用了二維的第二種型別離散餘弦變換,並將結果進行量化之後進行熵編碼。這時對應第二種型別離散餘弦變換中的n通常是8,並用該公式對每個8x8塊的每行進行變換,然後每列進行變換。得到的是一個8x8的變換系數矩陣。其中(0,0)位置的元素就是直流分量,矩陣中的其他元素根據其位置表示不同頻率的交流分量。

一個類似的變換, 改進的離散餘弦變換被用在高階音訊編碼AAC for Advanced Audio Coding),Vorbis 和 MP3 音訊壓縮當中。

離散餘弦變換也經常被用來使用譜方法來解偏微分方程,這時候離散餘弦變換的不同的變數對應著陣列兩端不同的奇/偶邊界條件。

正式定義

形式上來看,離散餘弦變換一個線性可逆函式F:R^n\rightarrow R^n 其中R實數集, 或者等價的說一個n \times n 的方陣。離散餘弦變換有幾種變形的形式, 它們都是根據下面的某一個公式把n 個實數x_0,\ldots ,x_{n-1} 變換到另外n個實數f_0,\ldots ,f_{n-1} 的操作。

DCT-I

f_m = \frac{1}{2} (x_0 + (-1)^m x_{n-1})      + \sum_{k=1}^{n-2} x_k \cos \left[\frac{\pi}{n-1} m k \right]

有些人認為應該將 x_0x_{n-1} 乘以\sqrt{2},相應的將f_0 和f_{n-1} 乘以\frac{1}{\sqrt{2}}。這樣做的結果是這種 DCT-I 矩陣變為了 正交矩陣 (再乘一個係數的話),但是這樣就不能直接和一個實偶離散傅立葉變換對應了。


一個n=5的對實數abcde的DCT-I型變換等價於一個8點的對實數abcdedcb(偶對稱)的DFT變換,結果再除以2(對應的,DCT-II~DCT-IV相對等價的DFT有一個半個抽樣的位移)。需要指出的是,DCT-I不適用於n<2的情況(其它的DCT型別都適用於所有的整數n)。

所以,DCT-I暗示的邊界條件是: x_k 相對於k=0 點偶對稱,並且相對於 k=n-1 點偶對稱; 對f_m 的情況也類似。

DCT-II

f_m =   \sum_{k=0}^{n-1} x_k \cos \left[\frac{\pi}{n} m \left(k+\frac{1}{2}\right) \right]

DCT-II大概是最常用的一種形式,通常直接被稱為DCT。

有些人更進一步的將f_0再乘以\frac{1}{\sqrt{2}}(參見下面的DCT-III型的對應修改)。這將使得DCT-II成為正交矩陣 (再乘一個係數的話),但是這樣就不能直接和一個有半個抽樣位移的實偶離散傅立葉變換對應了。

所以,DCT-II暗示的邊界條件是: x_k 相對於k=-\frac{1}{2} 點偶對稱,並且相對於 k=n-\frac{1}{2} 點偶對稱; 對f_m 相對於m=0 點偶對稱,並且相對於m=n 點奇對稱。

DCT-III

f_m = \frac{1}{2} x_0 +   \sum_{k=1}^{n-1} x_k \cos \left[\frac{\pi}{n} \left(m+\frac{1}{2}\right) k \right]

因為這是DCT-II的逆變換(再乘一個係數的話),這種變形通常被簡單的稱為逆離散餘弦變換。

有些人更進一步的將x_0再乘以\sqrt{2}(參見上面的DCT-II型的對應修改),這將使得DCT-III成為正交矩陣 (再乘一個係數的話),但是這樣就不能直接和一個結果有半個抽樣位移的實偶離散傅立葉變換對應了。

所以,DCT-III暗示的邊界條件是: x_k 相對於k=0 點偶對稱,並且相對於 k=n 點奇對稱; 對f_m 相對於m=-\frac{1}{2} 點偶對稱,並且相對於m=n-\frac{1}{2} 點奇對稱。

DCT-IV

f_m =   \sum_{k=0}^{n-1} x_k \cos \left[\frac{\pi}{n} \left(m+\frac{1}{2}\right) \left(k+\frac{1}{2}\right) \right]

DCT-IV對應的矩陣是正交矩陣 (再乘一個係數的話)。


一種DCT-IV的變形,將不同的變換的資料重疊起來,被稱為改進的離散餘弦變換

DCT-IV暗示的邊界條件是: x_k 相對於k=-\frac{1}{2} 點偶對稱,並且相對於 k=''n''-1/2 點奇對稱;對j 類似。

DCT V~VIII

上面提到的DCT I~IV是和偶數階的實偶DFT對應的。原則上,還有四種DCT變換(Martucci, 1994)是和奇數階的實偶DFT對應的,它們在分母中都有一個''n''+1/2的係數。但是在實際應用中,這幾種變型很少被用到。

最平凡的和奇數階的實偶DFT對應的DCT是1階的DCT (1也是奇數),可以說變換隻是乘上一個係數a而已,對應於DCT-V的長度為1的狀況。

反變換

DCT-I的反變換是把DCT-I乘以係數\frac{1}{n-1}。 DCT-IV的反變換是把DCT-IV乘以係數\frac{2}{n}。 DCT-II的反變換是把DCT-III乘以係數\frac{2}{n},反之亦然。

離散傅立葉變換類似,變化前面的歸一化係數僅僅是常規而已,改變這個係數並不改變變換的性質。例如,有些人喜歡在DCT-II變換的前面乘以\sqrt{\frac{2}{n}},這樣反變換從形式上就和變換更相似,而不需要另外的歸一化係數。

計算

儘管直接使用公式進行變換需要進行O(n^2)次操作,但是和快速傅立葉變換類似,我們有複雜度為O(n \log(n))的快速演算法,這就是常常被稱做蝶形變換的一種分解演算法。另外一種方法是通過快速傅立葉變換來計算DCT,這時候需要O(n)的預操作和後操作。

參考

  • K. R. Rao and P. Yip, 離散餘弦變換 : 演算法、優點和應用 (Discrete Cosine Transform: Algorithms, Advantages, Applications) (Academic Press, Boston, 1990).
  • A. V. Oppenheim, R. W. Schafer, and J. R. Buck, 時間離散訊號處理 (Discrete-Time Signal Processing), second edition (Prentice-Hall, New Jersey, 1999).
  • S. A. Martucci, 對稱卷積和離散正弦餘弦變換 (Symmetric convolution and the discrete sine and cosine transforms),IEEE Trans. Sig. ProcessingSP-42, 1038-1051 (1994).
  • Matteo Frigo and Steven G. Johnson: FFTW, http://www.fftw.org/. 一個免費的C語言GPL,可以計算DCT-I~IV的1維到多維的任意大小的變換
  • M. Frigo and S. G. Johnson, "FFTW3的設計和實現,"Proceedings of the IEEE93 (2), 216–231 (2005).

目錄

應用

離散餘弦變換,尤其是它的第二種型別,經常被訊號處理影象處理使用,用於對訊號影象(包括靜止影象運動影象)進行有損資料壓縮。這是由於離散餘弦變換具有很強的"能量集中"特性:大多數的自然訊號(包括聲音和影象)的能量都集中在離散餘弦變換後的低頻部分,而且當訊號具有接近馬爾可夫過程Markov processes)的統計特性時,離散餘弦變換的去相關性接近於K-L變換Karhunen-Loève變換——它具有最優的去相關性)的效能。

例如,在靜止影象編碼標準JPEG中,在運動影象編碼標準MJPEGMPEG的各個標準中都使用了離散餘弦變換。在這些標準制中都使用了二維的第二種型別離散餘弦變換,並將結果進行量化之後進行熵編碼。這時對應第二種型別離散餘弦變換中的n通常是8,並用該公式對每個8x8塊的每行進行變換,然後每列進行變換。得到的是一個8x8的變換系數矩陣。其中(0,0)位置的元素就是直流分量,矩陣中的其他元素根據其位置表示不同頻率的交流分量。

一個類似的變換, 改進的離散餘弦變換被用在高階音訊編碼AAC for Advanced Audio Coding),Vorbis 和 MP3 音訊壓縮當中。

離散餘弦變換也經常被用來使用譜方法來解偏微分方程,這時候離散餘弦變換的不同的變數對應著陣列兩端不同的奇/偶邊界條件。

正式定義

形式上來看,離散餘弦變換一個線性可逆函式F:R^n\rightarrow R^n 其中R實數集, 或者等價的說一個n \times n 的方陣。離散餘弦變換有幾種變形的形式, 它們都是根據下面的某一個公式把n 個實數x_0,\ldots ,x_{n-1} 變換到另外n個實數f_0,\ldots ,f_{n-1} 的操作。

DCT-I

f_m = \frac{1}{2} (x_0 + (-1)^m x_{n-1})      + \sum_{k=1}^{n-2} x_k \cos \left[\frac{\pi}{n-1} m k \right]

有些人認為應該將 x_0x_{n-1} 乘以\sqrt{2},相應的將f_0 和f_{n-1} 乘以\frac{1}{\sqrt{2}}。這樣做的結果是這種 DCT-I 矩陣變為了 正交矩陣 (再乘一個係數的話),但是這樣就不能直接和一個實偶離散傅立葉變換對應了。


一個n=5的對實數abcde的DCT-I型變換等價於一個8點的對實數abcdedcb(偶對稱)的DFT變換,結果再除以2(對應的,DCT-II~DCT-IV相對等價的DFT有一個半個抽樣的位移)。需要指出的是,DCT-I不適用於n<2的情況(其它的DCT型別都適用於所有的整數n)。

所以,DCT-I暗示的邊界條件是: x_k 相對於k=0 點偶對稱,並且相對於 k=n-1 點偶對稱; 對f_m 的情況也類似。

DCT-II

f_m =   \sum_{k=0}^{n-1} x_k \cos \left[\frac{\pi}{n} m \left(k+\frac{1}{2}\right) \right]

DCT-II大概是最常用的一種形式,通常直接被稱為DCT。

有些人更進一步的將f_0再乘以\frac{1}{\sqrt{2}}(參見下面的DCT-III型的對應修改)。這將使得DCT-II成為正交矩陣 (再乘一個係數的話),但是這樣就不能直接和一個有半個抽樣位移的實偶離散傅立葉變換對應了。

所以,DCT-II暗示的邊界條件是: x_k 相對於k=-\frac{1}{2} 點偶對稱,並且相對於 k=n-\frac{1}{2} 點偶對稱; 對f_m 相對於m=0 點偶對稱,並且相對於m=n 點奇對稱。

DCT-III

f_m = \frac{1}{2} x_0 +   \sum_{k=1}^{n-1} x_k \cos \left[\frac{\pi}{n} \left(m+\frac{1}{2}\right) k \right]

因為這是DCT-II的逆變換(再乘一個係數的話),這種變形通常被簡單的稱為逆離散餘弦變換。

有些人更進一步的將x_0再乘以\sqrt{2}(參見上面的DCT-II型的對應修改),這將使得DCT-III成為正交矩陣 (再乘一個係數的話),但是這樣就不能直接和一個結果有半個抽樣位移的實偶離散傅立葉變換對應了。

所以,DCT-III暗示的邊界條件是: x_k 相對於k=0 點偶對稱,並且相對於 k=n 點奇對稱; 對f_m 相對於m=-\frac{1}{2} 點偶對稱,並且相對於m=n-\frac{1}{2} 點奇對稱。

DCT-IV

f_m =   \sum_{k=0}^{n-1} x_k \cos \left[\frac{\pi}{n} \left(m+\frac{1}{2}\right) \left(k+\frac{1}{2}\right) \right]

DCT-IV對應的矩陣是正交矩陣 (再乘一個係數的話)。


一種DCT-IV的變形,將不同的變換的資料重疊起來,被稱為改進的離散餘弦變換

DCT-IV暗示的邊界條件是: x_k 相對於k=-\frac{1}{2} 點偶對稱,並且相對於 k=''n''-1/2 點奇對稱;對j 類似。

DCT V~VIII

上面提到的DCT I~IV是和偶數階的實偶DFT對應的。原則上,還有四種DCT變換(Martucci, 1994)是和奇數階的實偶DFT對應的,它們在分母中都有一個''n''+1/2的係數。但是在實際應用中,這幾種變型很少被用到。

最平凡的和奇數階的實偶DFT對應的DCT是1階的DCT (1也是奇數),可以說變換隻是乘上一個係數a而已,對應於DCT-V的長度為1的狀況。

反變換

DCT-I的反變換是把DCT-I乘以係數\frac{1}{n-1}。 DCT-IV的反變換是把DCT-IV乘以係數\frac{2}{n}。 DCT-II的反變換是把DCT-III乘以係數\frac{2}{n},反之亦然。

離散傅立葉變換類似,變化前面的歸一化係數僅僅是常規而已,改變這個係數並不改變變換的性質。例如,有些人喜歡在DCT-II變換的前面乘以\sqrt{\frac{2}{n}},這樣反變換從形式上就和變換更相似,而不需要另外的歸一化係數。

計算

儘管直接使用公式進行變換需要進行O(n^2)次操作,但是和快速傅立葉變換類似,我們有複雜度為O(n \log(n))的快速演算法,這就是常常被稱做蝶形變換的一種分解演算法。另外一種方法是通過快速傅立葉變換來計算DCT,這時候需要O(n)的預操作和後操作。

參考

  • K. R. Rao and P. Yip, 離散餘弦變換 : 演算法、優點和應用 (Discrete Cosine Transform: Algorithms, Advantages, Applications) (Academic Press, Boston, 1990).
  • A. V. Oppenheim, R. W. Schafer, and J. R. Buck, 時間離散訊號處理 (Discrete-Time Signal Processing), second edition (Prentice-Hall, New Jersey, 1999).
  • S. A. Martucci, 對稱卷積和離散正弦餘弦變換 (Symmetric convolution and the discrete sine and cosine transforms),IEEE Trans. Sig. ProcessingSP-42, 1038-1051 (1994).
  • Matteo Frigo and Steven G. Johnson: FFTW, http://www.fftw.org/. 一個免費的C語言GPL,可以計算DCT-I~IV的1維到多維的任意大小的變換
  • M. Frigo and S. G. Johnson, "FFTW3的設計和實現,"Proceedings of the IEEE93 (2), 216–231 (2005).


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述