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