JPEG的壓縮原理以及哈夫曼算法

JPEG壓縮原理以及哈夫曼算法

JPEG作為目前最常見的圖片格式之一,其壓縮算法可以將圖像大小壓縮到原來的十分之一,同時保持相同的分辨率和非常高的質(zhì)量。

為什么JPEG如此重要?

1.目前大多數(shù)手機和相機拍攝的圖像都是使用JPEG格式來進(jìn)行保存的;

2.網(wǎng)絡(luò)上傳播和下載的大部分圖片的格式,JPEG格式的占比在80%以上;

3.視頻中目前比較流行的H.264和H.265,在單幀圖像的處理上,也采用了類似JPEG的算法。

JPEG做了什么?

簡言之,JPEG會分析圖片的每個部分,找到并刪除人眼不易察覺的元素,只記錄關(guān)鍵像素點的信息。如下圖的眉毛、眼睛、鼻子的區(qū)域,其他如純色的地方只是用算法做個標(biāo)記,在查看的時候再進(jìn)行還原。

[圖片上傳失敗...(image-5bbbf2-1675585762280)]

在使用JPEG算法壓縮圖片時,有一個“質(zhì)量”的選項可以用于決定壓縮的程度,壓縮的程度越高,圖像的質(zhì)量也就越低,同時圖片的分辨率是沒有改變的,但我們也會得到越來越多的有缺陷的方塊,在技術(shù)上稱之為“膺像”。

[圖片上傳失敗...(image-4d5185-1675585762280)]

JPEG的工作原理

人眼由于視桿細(xì)胞(明暗)的數(shù)量遠(yuǎn)遠(yuǎn)大于視錐細(xì)胞(顏色),所以人眼對于圖像的明暗程度的感知能力要遠(yuǎn)遠(yuǎn)高于色度,JPEG正是利用了人眼這個特殊的工作原理,來移除了人眼不擅長感知的部分。

[圖片上傳失敗...(image-424ca2-1675585762280)]

以下面2張完全相同的郁金香圖片為例,左邊分別是只有色度信息和亮度信息的圖像,右邊是正常圖像:

[圖片上傳失敗...(image-cdc089-1675585762280)]

可以看到,左邊圖像中只有色度信息的部分細(xì)節(jié)相比于黑白圖像細(xì)節(jié)明顯減少,這也是我們?nèi)搜鄣奶攸c,因為是視桿細(xì)胞數(shù)量是視錐細(xì)胞的數(shù)十倍。

JPEG的工作流程

1.Color Space Conversion 色彩空間轉(zhuǎn)換

原始圖像(8位色深)的每一個像素都是由數(shù)值從0~255(2^8=256)的紅R、綠G、藍(lán)B成分組成,每一組不同的RGB值就構(gòu)成了單一像素的顏色:

[圖片上傳失敗...(image-d7c13c-1675585762280)]

色彩空間轉(zhuǎn)換的過程中,算法會根據(jù)公式將R、G、B三個值計算得出三個新的數(shù)值亮度Y、藍(lán)色色度Cb、紅色色度Cr,計算的公式和結(jié)果如下:

[圖片上傳失敗...(image-5dbdde-1675585762280)]

值得一提的是,這個過程是可逆的,在轉(zhuǎn)換過程中沒有刪除任何數(shù)據(jù)。

2.Chrominance Downsampling 色度縮減取樣

這個過程中,將Cb和Cr色度分量層上的像素按照2*2的組合進(jìn)行區(qū)塊劃分:

[圖片上傳失敗...(image-d9d394-1675585762280)]

然后計算每個區(qū)域的色度平均值:

[圖片上傳失敗...(image-7e54bc-1675585762280)]

然后刪掉重復(fù)信息:

[圖片上傳失敗...(image-2d925f-1675585762280)]

最后縮小區(qū)域大小為原來的1/4,經(jīng)過這一步驟,那些人眼不易感知的紅藍(lán)色度信息被縮減為原來的1/4,而亮度保持不變。注意,此時圖像的大小就只有原來的一半了(縮減取樣前:1Y+1Cb+1Cr = 3,取樣后:1Y+1/4Cb+1/4Cr = 1.5),后面當(dāng)我們查看圖像時,紅藍(lán)色度圖層會放大到跟亮度圖層一樣的大小,并根據(jù)Y、Cb、Cr的值重新計算出RGB的值用以顯示。注意,這個操作是會刪除一定的色度信息的,并且由于各個像素點的亮度可能不同,所以重新計算的各個像素上的RGB值也有可能會變化,但取平均值而不是最大或最小值也使得畫面總體上更加的平滑。

PS:接下來的步驟3、4是連貫的,同時也會刪除信息,它們是利用人眼不擅長感知圖像中的高頻率元素的特征來實現(xiàn)的,例如下面這張復(fù)雜的樹木照片:

[圖片上傳失敗...(image-e8425a-1675585762280)]

人眼比較善于發(fā)現(xiàn)如樹枝、巖石等的邊緣,但是對于單片樹葉、一簇草地等的陰影變化,人眼無法甄別其中的細(xì)節(jié);而且對于景深比較淺的圖片,在虛化的部分移除高頻率的顏色變化操作也是人眼難以察覺的。

步驟3、4會遍歷圖像的各個部分,找到具有高頻率的色度或亮度的像素頻繁出現(xiàn)的區(qū)域,然后將這些人眼很難感知的元素刪除。

3.Discrete Cosine Transform 離散余弦變換(DCT)

以亮度圖層為例(當(dāng)然另外兩個色度圖層也會經(jīng)歷這一步),第一步,先將整個圖像按8*8個像素分為許多“區(qū)塊”,每個區(qū)塊有64個像素,每個像素用0-255的數(shù)值代表其亮度:

[圖片上傳失敗...(image-81fcf8-1675585762280)]

接下來,我們將每一個像素的亮度值減去128,改變其亮度值為-128~127,其中-128為純黑色,越接近-128就代表著一個像素越暗;127為純白色,越接近127就越亮。

[圖片上傳失敗...(image-249221-1675585762280)]

4.Quantization 量化
5.Run Length and Huffman Encoding 游程編碼和哈夫曼編碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容