在圖像傳輸過程中,為了有效的傳輸圖像,降低圖像數據所需帶寬,因此會對圖像數據進行壓縮,依據圖像保真度,圖像壓縮可以分為無損壓縮和有損壓縮。無損壓縮一般是把圖像數據壓縮到原本數據的1/2~1/4,常見的無損壓縮的圖像格式有:BMP、PNG、GIF。有損壓縮會將圖像信息量減少,前後圖像數據不一致,因此圖像質量會下降,常見的有損壓縮的圖像格式有:JPEG、WebP。
此篇博文著重介紹有損壓縮中的JPEG算法。
JPEG
JPEG算法壓縮後的圖像後綴一般為.JPG或者.JPEG,二者實質相同。
『通常中我們所見到的圖像一般是三通道(R、G、B)或者四通道的圖像(R、G、B、Alpha),四通道圖像只有PNG格式能夠支持。
JPEG算法採用的是YUV顏色空間,其中“Y”表示亮度,“U”和”V”表示色度,YUV的作用是描述影像色彩及飽和度,用於指定像素的顏色。因為人眼對圖像亮度敏感,而對色度不那麼敏感,因此可以在UV空間上減少信息。』(注1)
RGB轉換為YUV空間的轉換算法為:
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
JPEG算法採用4:2:0的方式採樣,也就是2:1水平方向採樣,2:1垂直方向採樣,即每四個Y共用一組UV。因為人眼對於高頻分量不是很敏感,因此可以通過離散餘弦變換(DCT)分析出其中的高低頻分量,進一步壓縮數據。
二維離散餘弦變換公式為:
由上離散餘弦變化生成8*8的矩陣,去除高頻分量。由此8*8矩陣除以JPEG算法提供的標準係數矩陣,後取整,如下圖1所示。

圖1 JPGE標準化係數矩陣
經過上述步驟後得到的矩陣進行ZIGZAG排序,排序方式如下圖2所示:

圖2 ZIGZAG排序
最後通過對得到矩陣進行編碼並按照JPEG格式存儲,即可得到jpg格式的圖像文件。
Q&A
Q:JPEG壓縮算法對於圖像還原性如何?
A:因為JPEG是有損壓縮,且數據已經改變,因此是無法還原原始圖像,同時因為壓縮率較高的因素,可能存在圖像模糊的問題。
Q:目前圖像壓縮算法中有沒有更好的圖像壓縮算法,且傳輸速度更快的?
A:目前在針對高PPI、高刷等移動端方面有著更好的VESA壓縮算法,傳輸速度更快,切實無損壓縮,以Novatek的OLED drive IC NT37XXX系列,對於VESA算法的使用已經十分成熟。
Q:YUV算法除了4:2:0採樣還有什麼採樣嗎?
A:YUV的採樣方式有:
4:4:4表示完全取樣。
4:2:2表示2:1的水平取樣,垂直完全採樣。
4:2:0表示2:1的水平取樣,垂直2:1採樣。
4:1:1表示4:1的水平取樣,垂直完全採樣。
Q:為什麼會用到YUV採樣方式?
A:因為為了兼顧彩色電視與黑白電視,降低所需的信道帶寬。
Q:圖像壓縮比計算方式是怎樣的?
A:壓縮比=壓縮前所占空間大小/實際所占空間大小
註1:作者:Vinegar �;出處:https://blog.csdn.net/VinagerJoe/article/details/129023880
評論