天天看點

【圖像壓縮】基于matlab DCT變換圖像壓縮【含Matlab源碼 804期】

1 圖像壓縮

圖像壓縮按照壓縮過程中是否有資訊的損失以及解壓後與原始圖像是否有誤差可以分為無損壓縮和有損壓縮兩大類。無損壓縮是指不損失圖像品質的壓縮,它是對檔案的存儲方式進行優化,采用某種算法表示重複的資料資訊,檔案可以完全還原,不會影響檔案内容。一般來說,由于無損壓縮隻是删除了圖像資料中的備援資訊,可以準确地恢複原始圖像,是以不可能達到很高的壓縮比。有損壓縮是指損失圖像品質的壓縮,它将不相幹的資訊也删除了,是以解壓時隻能将原始圖像進行近似的還原,它的高壓縮比是以犧牲圖像品質為代價的。

2 JPRG圖像壓縮

JPEG 提出的 JPEG 标準是為連續色調圖像的壓縮提供的公共标準。連續色調圖像并不局限于單色調( 黑白) 圖像,該标準可适用于各種多媒體存儲和通信應用所使用的灰階圖像、攝影圖像及靜止視訊壓縮檔案。

JPEG 标準還提出:

①必須将圖像品質控制在可視保真度高的範圍内,同時編碼器可被參數化,允許設定壓縮或品質水準

②壓縮标準可以應用于任何一類連續色調數字圖像,并不應受到維數、顔色、畫面尺寸、内容和色調的限制

③壓縮标準必須從完全無損到有損範圍内可選,以适應不同的存儲 CPU 和顯示要求

圖像壓縮編碼方法從壓縮編碼算法原理上可以分為無損壓縮編碼、有損壓縮編碼、混合編碼方法。而JPEG 标準就是一種混合編碼方法,既有無損的壓縮編碼又有有損的壓縮編碼。有損壓縮方法是以 DCT 變換為基礎的壓縮方法,其壓縮率比較高,是JPEG 标準的基礎。無損壓縮方法又稱預測壓縮方法,是以二維 DPCM 為基礎的壓縮方式,解碼後能完全精确地恢複原圖像采樣值,其壓縮比低于有損壓縮方法。

觀察下圖中的編碼器負責降低輸入圖像的編碼、像素間和心理視覺備援。在編碼處理的第一階段,離散餘弦變換器将輸入圖像變換成一種( 通常不可見的) 格式,以便減少像素間的備援。在第二階段,量化器根據預定義的保真度準則來減少映射變換器輸出的精确性,以便試圖去除心理視覺備援資料。這種操作是不可逆的,當進行無損壓縮時,則必須将其忽略。在第三個即最後一個處理階段,熵編碼器根據所用的碼字對量化器輸出和離散餘弦變換輸出建立碼字( 減少編碼備援)。

【圖像壓縮】基于matlab DCT變換圖像壓縮【含Matlab源碼 804期】

3 二維離散餘弦變換

離散餘弦變換(Discrete Cosine Transform),簡稱DCT變換.是一種與傅立葉變換緊密相關的數學運算.在傅立葉級數展開式中,如果被展開的函數是實偶函數,那麼其傅立葉級數中隻包含餘弦項,再将其離散化可導出餘弦變換,是以稱之為離散餘弦變換.餘弦變換實際上是傅立葉變換的實數部分,其主要用于圖像的壓縮,目前國際壓縮标準的JPEG格式中就用到了DCT變換。

在編碼過程中,首先将輸入圖像顔色空間轉換後分解為8× 8大小的資料塊,然後用正向二維DCT把每個塊轉變成64個DCT系數值,其中1個數值是直流(DC)系數,即8× 8空域圖像子塊的平均值,其餘的63個是交流(AC)系數,接下來對DCT系數進行量化,最後将變換得到的量化的DCT系數進行編碼和傳送,形成壓縮後的圖像格式。在解碼過程中,先對已編碼的量化的DCT系數進行解碼,然後使用二維DCT反變換求逆量化并把DCT系數轉化為8× 8樣本像塊,最後将操作完成後的塊組合成一個單一的圖像。這樣就完成了圖像的壓縮和解壓過程.研究表明,DCT将8× 8圖像塊變換為頻域時數值集中在左上角,即低頻分量都集中在左上角,高頻分量分布在右下腳。而低頻部分包含了圖像大部分資訊,相比之下,高頻部分包含的資訊量較少。為了壓縮資料,往往采用忽略高頻系數的辦法。而較低頻系數的修改對原始資料的影響較小。基于DCT的壓縮編碼屬于有損壓縮,通過去除圖像本身的備援量和人的視覺備援量來達到壓縮資料的目的,主要分為以下幾個步驟:

(1)正向離散餘弦變換

(2)量化

(3)Z字形編碼

(4)使用差分脈沖編碼調制對直流系數進行編碼

(5)使用行程長度編碼對交流系數進行編碼

(6)熵編碼

(7)組成位資料流

4 二維DCT變換

二維離散餘弦變換的正變換公式為:

【圖像壓縮】基于matlab DCT變換圖像壓縮【含Matlab源碼 804期】

在圖像的壓縮編碼中,N一般取8。

二維DCT的反變換公式為:

【圖像壓縮】基于matlab DCT變換圖像壓縮【含Matlab源碼 804期】

以上各式中的系數:

【圖像壓縮】基于matlab DCT變換圖像壓縮【含Matlab源碼 804期】

5 Matlab調試

根據JPEG 壓縮編碼算法,要将一幅灰階圖像進行壓縮編碼,首先把圖像分成 8* 8 的像素塊,分塊進行 DCT 變換後,根據 JPEG 标準量化表對變換系數進行量化,再對直流系數( DC) 進行預測編碼,對交流系數( AC) 行 zigzag 掃描和可變長編碼,然後根據标準的 Huffman 碼表進行熵編碼,輸出壓縮圖像的比特序列,實作了圖像的壓縮。

DCT 變換的特點是變換後圖像大部分能量集中在左上角,因為左上角反應原圖像低頻部分資料,右下角反應原圖像高頻部分資料,而圖像的能量通常集中在低頻部分。是以 DCT 變換後,隻保留 DCT 系數矩陣最左上角的 10 個系數,然後對每個圖像塊利用這 10個系數進行 DCT 反變換來重構圖像。

其基于 DCT 變換矩陣算法的處理過程如下圖:

【圖像壓縮】基于matlab DCT變換圖像壓縮【含Matlab源碼 804期】
【圖像壓縮】基于matlab DCT變換圖像壓縮【含Matlab源碼 804期】
【圖像壓縮】基于matlab DCT變換圖像壓縮【含Matlab源碼 804期】

1 matlab版本

2014a

2 參考文獻

[1] 蔡利梅.MATLAB圖像處理——理論、算法與執行個體分析[M].清華大學出版社,2020.

[2]楊丹,趙海濱,龍哲.MATLAB圖像處理執行個體詳解[M].清華大學出版社,2013.

[3]周品.MATLAB圖像處理與圖形使用者界面設計[M].清華大學出版社,2013.

[4]劉成龍.精通MATLAB圖像處理[M].清華大學出版社,2015.