dct變換可以用什麼方法代替 DCT變換

2021-10-13 00:27:12 字數 4066 閱讀 7237

dct變換的基本思路是將影象分解為8×8的子塊或16×16的子塊,並對每乙個子塊進行單獨的dct變換,然後對變換結果進行量化、編碼。隨著子塊尺寸的增加,演算法的複雜度急劇上公升,因此,實用中通常採用8×8的子塊進行變換,但採用較大的子塊可以明顯減少影象分塊效應。

在影象壓縮中,一般把影象分解為8×8的子塊,然後對每乙個子塊進行dct變換、量化,並對量化後的資料進行huffman編碼。dct變換可以消除影象的空間冗餘,huffman編碼可以消除影象的資訊熵冗餘。

dct 是無損的,它只將影象從空間域轉換到變換域上,使之更能有效地被編碼。對乙個影象子塊而言,將對變換後的6?個係數進行量化,並對z字順序掃瞄係數表進行 編碼。這種排列方法有助於將低頻非0係數置於高頻係數之前,直流係數由於包含了所有影象特徵中的關鍵部分而被單獨編碼。量化後的係數經過熵編碼進一步無損 壓縮,通常採用的是huffman編碼。這種壓縮編碼方法中,影象質量的降低主要是由於對係數的量化造成,且不可恢復。假設子影象為f(x, y),則dct變換可以由下面的公式實現:

其中式(1)的f(u, v)表示變換域的高頻成分,也稱為交流係數;式(2)中f(0, 0)表示變換域中的低頻成分,也稱為直流係數。對變換結果進行分析,可以看出能量主要集中到左上角。dct變換具有良好的去相關特性。在影象的壓縮編碼中,n一般取8。

在解碼時首先得到各點的dct係數,然後根據下面的dct反變換即可恢復出原影象。dct的反變換公式為:

利用公式(3)可以無損地恢復原影象。在實際的應用中,使用dct變換的矩陣描述形式更容易理解。

基於係數重要性的分層編碼

按照上面的方法對影象變換之後的係數進行編碼,產生的碼流不具有分層的特性,因而不具有分級傳輸的能力。為了實現分層壓縮,我們對變換後的係數進行重新排列(見圖1),再進行支援分級傳輸特性的編碼。

由上面圖中的方法可知,變換後能量集中到變換域的左上角。因此基於dct變換的 影象壓縮方法是對係數採用「z」字型掃瞄的方式處理。為了實現分層編碼,我們將這些係數重新排列,然後進行分層次的編碼:左上角的4個係數作為基本層的數 據;左上角16個係數作為第一增強層的資料,這16個係數是除基本層中的四個係數以外的其餘係數;從16-47的資料作為第二增強層的資料;其餘的16個 係數作為第三增強層資料。

經過重排並進行分層壓縮之後,在各個層次上進行測試可以發現,在只傳輸基本層時可提供峰值訊雜比為23.23db以上的影象;增加乙個增強層,影象的峰值訊雜比強達到28.9db以上;如果加入第二個增強層,恢復影象的峰值訊雜比可以達到37.35db。

採用這種方法,通過對dct變換後 的係數按照其重要性進行取捨,可以非常方便地實現影象序列的分層壓縮和分級傳輸,大大提高壓縮演算法對不同傳輸通道的適應能力,並兼顧到幀內影象質量與幀速 率。在一般的應用場合下,只傳輸第一增強層的資料即可達到較好的視覺效果,此時需要熵編碼的資料量已經減少為原資料量的1/4,通過熵編碼的方法,可以獲 得很高的壓縮比。

離散余弦變換(dct)

離散余弦變換dct (discrete cosine transform)是數碼率壓縮需要常用的乙個變換編碼方法。任何連續的實對稱函式的付立葉變換中只含余弦項,因此余弦變換與付立葉變換一樣有明確的物 理意義。dct是先將整體影象分成n*n畫素塊,然後對n*n畫素塊逐一進行dct變換。由於大多數影象的高頻分量較小,相應於影象高頻分量的係數經常為 零,加上人眼對高頻成分的失真不太敏感,所以可用更粗的量化。因此,傳送變換係數的數碼率要大大小於傳送影象畫素所用的數碼率。到達接收端後通過反離散餘 弦變換回到樣值,雖然會有一定的失真,但人眼是可以接受的。二維正反離散余弦變換的算式:

其中n是像塊的水平、垂直畫素數,一般取n=8。n大於8時效率增加不多而複雜性大為增加。8*8的二維資料塊經dct後變成8*8個變換係數,這些系 數都有明確的物理意義。譬如當u=0,v=0時f(0,0)是原64個樣值的平均,相當於直流分量,隨著u,v值增加,相應係數分別代表逐步增加的水平空 間頻率和垂直空間頻率分量的大小。當我們先只考慮水平方向上一行資料(8個畫素)的情況時,如圖1所示:

可見影象訊號被分解成為直流成分;以及從低頻到高頻的各種余弦成分;而dct係數只是表示了該種成分所佔原影象訊號的份額大小;顯然,恢復影象資訊可以表示為這樣乙個矩陣形式:f(n)=c(n)*e(n)

式中e(n)是乙個基底 ,c(n)是dct係數,f(n)則是影象訊號。

如果再考慮垂直方向上的變化,那麼,就需要乙個二維的基底,即該基底不僅要反映水平方向頻率的變化;而且要反映垂直空間頻率的變化;對應於8*8的畫素 塊;其空間基底如圖2所示:它是由64個畫素值所組成的影象,通常也稱之為基本影象。把它們稱為基本影象是因為在離散余弦變換的反變換式中,任何像塊都可 以表示成64個係數的不同大小的組合。既然基本影象相當於變換域中的單一的係數,那麼任何像元也可以看成由64個不同幅度的基本影象的組合。這與任何訊號 可以分解成基波和不同幅度的諧波的組合具有相同的物理意義。

圖2給出了乙個對8*8像塊進行dct變換的具體例子:

在如圖3所示的例項中,可以看出:經過一次dct變換計算後,64個樣值仍然得到64個係數,本身位元速率並沒有壓縮;但是,經dct變換後,位元數卻增加 了。原樣值是8位元,資料從0~255;得到的f10即直流分量的最大值是原來256的64/8份,即0~2047,交流分量的範圍是- 1024~1023;但經過第2個步驟,即量化之後(圖中△:4),大多數高頻分量的係數變為0,一般說來,人眼對低頻分量比較敏感,對高頻分量則不太敏 感;因而量化的結果是去掉了不太重要的高頻分量,降低了位元速率。再通過「之」字型(zig-zag)方式讀出資料,這樣讀出也可以減少位元速率。因為經dct變 換以後,係數大多數集中在左上角,即低頻分量區,因此「之」字型讀出實際上是按二維頻率的高低順序讀出係數的。這樣就便於採用遊程長度編碼(run length encoding),所謂遊程長度編碼是指乙個碼可以同時表示碼的值和前面有幾個零。這樣就發揮了「之」字型讀出的優點,因為「之」字型讀出,出現連零的 機會比較多,特別到最後,如果都是零,在讀到最後乙個數後,只要給出「塊結束」(eob)碼,就可以結束輸出,因此節省了很多位元速率。

離散余弦變換(discrete cosine tranform,簡稱dct)是一種與傅利葉變換緊密相關的數**算。在傅利葉級數展開式中,如果被展開的函式式是偶函式,那麼其傅利葉級數中只包含余弦項,再將其離散化可匯出余弦變換,因此稱之為離散余弦變換。時間域中訊號需要許多資料點表示;在x軸表示時間,在y軸表示幅度。訊號一旦用傅利葉變換轉換到頻率域,就只需要幾點就可以表示這個相同的訊號。如我們已經看到的那樣,原因就是訊號只含有少量的頻率成分。這允許在頻率域中只用幾個資料點就可以表示訊號,而在時間域中表示則需要大量資料點。

這一技術可以應用到彩色影象上。彩色影象有畫素組成,這些畫素具有rgb彩色值。每個畫素都帶有x,y座標,對每種原色使用8x8或者16x16矩陣。在灰度影象中畫素具有灰度值,它的x,y座標由灰色的幅度組成。為了在jpeg中壓縮灰度影象,每個畫素被翻譯為亮度或灰度值。為了壓縮rgb彩色影象,這項工作必須進行三遍,因為jpeg分別得處理每個顏色成分,r成分第乙個被壓縮,然後是g成分,最後是b成分。而乙個8x8矩陣的64個值,每個值都帶有各自的x,y座標,這樣我們就有了乙個畫素的三維表示法,稱作控制項表示式或空間域。通過dct變換,空間表示式就轉化為頻譜表示式或頻率域。從而到達了資料壓縮的目的。

dct式目前最佳的影象變換,它有很多優點。dct是正交變換,它可以將8x8影象空間表示式轉換為頻率域,只需要用少量的資料點表示影象;dct 產生的係數很容易被量化,因此能獲得好的塊壓縮;dct演算法的效能很好,它有快速演算法,如採用快速傅利葉變換可以進行高效的運算,因此它在硬體和軟體中都容易實現;而且dct演算法是對稱的,所以利用逆dct演算法可以用來解壓縮影象。

為什麼採用8x8的影象塊,其原因是由於計算量和畫素之間關係的數量,許多研究表明,在15或20個畫素之後,畫素間的相關性開始下降。就是說,一列相似的畫素通常會持續15到20個畫素那麼長,在此之後,畫素就會改變幅度水平(或反向)。

模擬影象經取樣後成為離散化的亮度值然後分成乙個個巨集塊,而乙個巨集塊有分成8x8大小的塊,可以用乙個矩陣來表示這個塊。

在這裡,n=8,矩陣中元素f(i,j)表示塊中第i行、第j列畫素的亮度值。把該矩陣看作乙個空間域,顯然,塊中這些亮度值的大小有一定的隨機性,無序性,或者說亮度值的分布沒有什麼特徵;dct變換就是來解決這個問題的,把這些隨機的資料變的有序,便於對資料進行編碼壓縮。

一維dct正交變換的公式為:

二維dct逆變換公式:

其中對於一維dct變換,需要n2次乘法,和n(n-1)次加法;像乙個8x8階矩陣運算,如果使用普通的全矩陣乘法運算,需要84次乘法,n2(n2-1)次加法運算,顯然,對於實時的壓縮需要來說,這是乙個極大的運算量,對硬體要求較高。

為什麼可以用while cin

brief the quick and easy status check.this allows you to write constructs such as if a stream and while a stream operator void const 如果你把乙個basic ios類的...

為什麼可以用while cin

brief the quick and easy status check.this allows you to write constructs such as if a stream and while a stream operator void const 如果你把乙個basic ios類的...

我們可以用SharePoint做什麼

前言 sharepoint平台的體系結構 基本平台 核心服務 應用層面 從上面介紹的這些功能大家簡單的了解sharepoint是如何實現了門戶 文件管理,協作,社交等相關功能的無縫銜接。sharepoint基本實現了常見的站點的常見功能。由於微軟一直在大力的支援,因此sharepoint對於大的企業...