DCT变换学习
http://blog.csdn.net/timebomb/article/details/5960624 timebomb的博客
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,通過熵編碼的方法,可以獲 得很高的壓縮比。
總結
- 上一篇: 针对深度学习的GPU芯片选择
- 下一篇: 出汗越多减肥越快吗