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