DCT算法的原理及实现简介
DCT算法的原理及實現簡介
DCT變換的全稱是離散余弦變換(Discrete Cosine Transform),離散余弦變換相當于一個長度大概是它兩倍的離散傅里葉變換,這個離散傅里葉變換是對一個實偶函數進行的。通過數字信號處理的學習我們知道實函數的傅立葉變換獲得的頻譜大多是復數,而偶函數的傅立葉變換結果是實函數。以此為基礎,使信號函數成為偶函數,去掉頻譜函數的虛部,是余弦變換的特點之一。它可以將將一組光強數據轉換成頻率數據,以便得知強度變化的情形。若對高頻的數據做些修飾,再轉回原來形式的數據時,顯然與原始數據有些差異,但是人類的眼睛卻是不容易辨認出來。壓縮時,將原始圖像數據分成8*8數據單元矩陣,例如亮度值的第一個矩陣內。
2.DCT產生的工程背景:
視頻信號的頻譜線在0-6MHz范圍內,而且1幅視頻圖像內包含的大多數為低頻頻譜線,只在占圖像區域比例很低的圖像邊緣的視頻信號中才含有高頻的譜線。因此,在視頻信號數字處理時,可根據頻譜因素分配比特數:對包含信息量大的低頻譜區域分配較多的比特數,對包含信息量低的高頻?譜區域分配較少的比特數,而圖像質量并沒有可察覺的損傷,達到碼率壓縮的目的。然而,這一切要在低熵(Entropy)值的情況下,才能達到有效的編碼。能否對一串數據進行有效的編碼,取決于每個數據出現的概率。每個數據出現的概率差別大,就表明熵值低,?可以對該串數據進行高效編碼。反之,出現的概率差別小,熵值高,則不能進行高效編碼。視頻信號的數字化是在規定的取樣頻率下由A/D轉換器對視頻電平轉換而來的,每個像素的視頻信號幅度隨著每層的時間而周期性地變化。每個像素的平均信息量的總和為總平均信息量,即熵值。由于每個視頻電平發生幾乎具有相等的概率,所以視頻信號的熵值很高。?熵值是一個定義碼率壓縮率的參數,視頻圖像的壓縮率依賴于視頻信號的熵值,在多數情況下視頻信號為高熵值,要進行高效編碼,就要將高熵值變為低熵值。怎樣變成低熵值呢?這就需要分析視頻頻譜的特點。大多數情況下,視頻頻譜的幅度隨著頻率的升高而降低。其中?低頻頻譜在幾乎相等的概率下獲得0到最高的電平。與此相對照,高頻頻譜通常得到的是低電平及稀少的高電平。顯然,低頻頻譜具有較高的熵值,高頻頻譜具有較低的熵值。據此,可對視頻的低頻分量和高頻分量分別處理,獲得高頻的壓縮值。
自從Ahmed和Rao于1974年給出了離散余弦變換(DCT)的定義以來,離散余弦變換(DCT)與改進型離散余弦變換(MDCT)就成為廣泛應用于信號處理和圖像處理特別是用于圖像壓縮和語音壓縮編解碼的重要工具和技術,一直是國際學術界和高科技產業界的研究熱點。現在的很多圖像和視頻編碼標準(如MPEG-1 , MEPG-2 ,MEPG-4中的第二部分)都要求實現整數的8×8 的DCT和IDCT,而MDCT 和IMDCT 則主要被應用于音頻信號的編解碼中(如MPEG-1 ,MEPG-2 和AC-]等標準的音頻編碼部分)。正是由于這類變換被廣泛采用,對于這類變換的快速算法的研究才顯得尤為重要。特別是針對特定的應用條件下的快速算法的研究對于提高整個系統的性能表現有很大幫助。
??? 由上面的引用可見,碼率壓縮基于變換編碼和熵值編碼兩種算法。前者用于降低熵值,后者將數據變為可降低比特數的有效編碼方式。在MPEG標準中,變換編碼采用的是DCT,變換過程本身雖然并不產生碼率壓縮作用,但是變換后的頻率系數卻非常有利于碼率壓縮。?實際上壓縮數字視頻信號的整個過程分為塊取樣、DCT、量化、編碼4個主要過程進行-----首先在時間域將原始圖像分成N(水平)×N(垂直)取樣塊,根據需要可選擇4×4、4×8、8×8、8×16、16×16等塊,這些取樣的像素塊代表了原圖像幀各像素的灰度值,其范圍在139-163之間,并依序送入DCT編碼器,以便將取樣塊由時間域轉換為頻率域的DCT系數塊。DCT系統的轉換分別在每個取樣塊中進行,這些塊中每個取樣是數字化后的值,表示一場中對應像素的視頻信號幅度值
3.離散余弦變換的實現:
實現DCT的方法很多,最直接的是根據DCT的定義來計算。以二維8xSDCT為例,需要作4096次乘法和3584次加法。這種算法的實現需要巨大的計算量,不具有實用價值。在應用中,需要尋找快速而又精確的算法。較為常用的方法是利用DCT的可拆分特性,同樣以二維8xSDCT為例,先進行8行一維DCT需要64xS次乘法和56xS次加法,再進行8列一維DCT要64xS次乘法和56xS次加法,共需要64x8xZ=1024次乘法和56x8xZ=896次加法,計算量大為減少。
除此之外,DCT還有很多公開的快速算法。快速算法主要是通過減少運算次數而減少運算時間,這對于設計快速的硬件系統非常有效。二維DCT的快速算法則一般采用行列分離DCT算法,即轉換為兩次一維變換,其間通過轉置矩陣連接。最為經典和常用的快速算法是由Arai等人于1988年提出的AAN算法以及Loeffier等人于1989年提出的LLM算法。但是,由于行列分離DCT算法能夠重復使用一維變換結構,因此在實際實現上,尤其在硬件上比二維直接計算算法更有優勢。
總結
以上是生活随笔為你收集整理的DCT算法的原理及实现简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 完整的维纳滤波器Matlab源程序
- 下一篇: ML重要概念:梯度(Gradient)与