JPEG压缩中质量因子和量化矩阵之间的关联
JPEG 編碼器
離散余弦變換,圖像數據雖然已經面目全非,但仍然是處于“可逆”的狀態,也就是說我們還沒有進入“有損”的那一步。這次我們來玩真的,看一下數據中的細節是如何被濾去的。先來考察一下要對付的問題是什么,經過顏色空間轉換和離散余弦變換,每一個8X8的圖像塊都變成了三個8X8的浮點數矩陣,分別表示Y,Cr,Cb數據,比如以其中某個亮度數據矩陣舉例,它的數據如下
,簡稱量化。“量子”這個概念來自于物理學,意思是說連續的能量可以看做是一個個單元體的組合,看起來高端大氣,其實很簡單,比如游戲中在處理角色面朝方向時,一般并不是使用0到2π這樣的浮點數,而是把方向分成16個區間,用0到16這樣的整數來表示,這樣只用4個bit就足夠了。JPEG提供的量子化算法如下:
(3.1)
其中G是我們需要處理的圖像矩陣,Q稱作量化系數矩陣(Quantization matrices),JPEG算法提供了兩張標準的量化系數矩陣,分別用于處理亮度數據Y和色差數據Cr以及Cb。
其中round函數是取整函數,
比如上面數據,以左上角的-415.38為例,對應的量子化系數是16,那么round(-415.38/16)=round(-25.96125)=-26。最終得到的量子化后的結果為
可以看到,一大部分數據變成了0,這非常有利于后面的壓縮存儲。這兩張神奇的量化表也是有講究的,還記得我們在第一節中所講的有損壓縮的基本原理嗎,有損壓縮就是把數據中重要的數據和不重要的數據分開,然后分別處理。DCT系數矩陣中的不同位置的值代表了圖像數據中不同頻率的分量,這兩張表中的數據時人們根據人眼對不不同頻率的敏感程度的差別所積累下的經驗制定的,一般來說人眼對于低頻的分量必高頻分量更加敏感,所以兩張量化系數矩陣左上角的數值明顯小于右下角區域。在實際的壓縮過程中,還可以根據需要在這些系數的基礎上再乘以一個系數,以使更多或更少的數據變成0,我們平時使用的圖像處理軟件在省城jpg文件時,在控制壓縮質量的時候,就是控制的這個系數。
在進入下一節之前,矩陣的量化還有最后一步要做,就是把量化后的二維矩陣轉變成一個一維數組,以方便后面的霍夫曼壓縮,但在做這個順序轉換時,需要按照一個特定的取值順序。
這么做的目的只有一個,就是盡可能把0放在一起,由于0大部分集中在右下角,所以才去這種由左上角到右下角的順序,經過這種順序變換,最終矩陣變成一個整數數組
-26,-3,0,-3,-2,-6,2,-4,1,-3,0,1,5,1,2,-1,1,-1,2,0,0,0,0,0,-1,-1,0,0,0,0,…,0,0
后面的工作就是對這個數組進行再一次的哈夫曼壓縮,已得到最終的壓縮數據。
參考資料:JPEG算法解密(三)
JPEG圖像及解壓圖像中的隱寫分析技術研究
總結
以上是生活随笔為你收集整理的JPEG压缩中质量因子和量化矩阵之间的关联的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让你的工作变轻松的一套免费的 iPhon
- 下一篇: 学习笔记(一)---Docker概述