壓縮算法——谷歌Webp

WebP適用場景

WebP是一種現代的圖像格式,爲網絡上的圖像提供優異的無損和有損壓縮。使用WebP,網站管理員和網絡開發人員可以創建更小,更豐富的圖像,使網絡更快。

WebP無損圖像的大小比PNG 小26%。WebP有損圖像比同等SSIM質量指數下的可比JPEG圖像 小25-34%。WebP lossyimages are 25-34% smaller than comparable JPEG images at equivalent SSIMquality index.

在Google,我們一直在探索如何加快網頁加載速度。一種方式是通過使web圖像更小。圖像在大多數網頁上佔據高達 60%-65%的字節,頁面大小是總繪製時間的主要因素。頁面大小對移動設備尤其重要,其中較小的圖像可節省帶寬和電池壽命。

WebP是由Google開發的一種新的圖像格式,支持Chrome,Opera和Android,經過優化,可以在網絡上實現更快,更小的圖像。與同等視覺質量的PNG和JPEG圖像相比,WebP圖像的大小要小30%左右。此外,WebP圖像格式還具有與其他格式的功能奇偶校驗。它支持:

  • 有損壓縮:有損壓縮基於 VP8關鍵幀編碼。VP8是由On2Technologies作爲VP6和VP7格式的後續產品創建的視頻壓縮格式。
  • 無損壓縮:無損壓縮格式由WebP團隊開發。
  • 透明度: 8位Alpha通道對於圖形圖像非常有用。Alpha通道可與有損RGB一起使用,這是目前無法與任何其他格式一起使用的功能。
  • 動畫:它支持真彩色動畫圖像。
  • 元數據:它可能有EXIF和XMP元數據(例如攝像機使用)。
  • 顏色配置文件:它可能有一個嵌入的ICC配置文件。

由於更好的壓縮圖像和支持所有這些功能,WebP可以很好地替代大多數圖像格式:PNG,JPEG或GIF。

 

WebP如何工作

有損WebP壓縮使用預測編碼來編碼圖像,VP8視頻編解碼器使用相同的方法來壓縮視頻中的關鍵幀。預測編碼使用相鄰像素塊中的值來預測塊中的值,然後僅對差異進行編碼。 

什麼是 WebP?

WebP(發音 weppy),是一種支持有損壓縮和無損壓縮的圖片文件格式,派生自圖像編碼格式 VP8。根據 Google 的測試,無損壓縮後的 WebP 比 PNG 文件少了 45%的文件大小,即使這些 PNG 文件經過其他壓縮工具壓縮之後,WebP 還是可以減少 28%的文件大小。

PNG 轉 WebP 的壓縮率要高於 PNG 原圖壓縮率,同樣支持有損與無損壓縮

轉換後的 WebP 體積大幅減少,圖片質量也得到保障(同時肉眼幾乎無法看出差異)

轉換後的 WebP 支持 Alpha 透明和 24-bit 顏色數,不存在 PNG8 色彩不夠豐富和在瀏覽器中可能會出現毛邊的問題

WebP 的優勢體現在它具有更優的圖像數據壓縮算法,能帶來更小的圖片體積,而且擁有肉眼識別無差異的圖像質量;同時具備了無損和有損的壓縮模式、Alpha 透明以及動畫的特性,在 JPEG 和 PNG 上的轉化效果都非常優秀、穩定和統一。

WebP始於視頻。WebP的誕生有些巧合。谷歌最初開發一種稱作WebM的視頻格式,這種格式是基於其VP8視頻解碼器。

但Facebook發現,用戶不僅在網站中瀏覽好友的照片,而且下載照片,然後通過電子郵件分享照片,有的用戶甚至還打印照片。部分Facebook用戶就發現,自己常用的應用無法打開.webp格式文件。Facebook不得不再次提供JPEG文件,谷歌迅速作出迴應,讓桌面版Chrome成爲WebP文件的默認瀏覽器。

WebP還會增加服務器的負擔。相較編碼JPEG文件,編碼同樣質量的WebP文件需要佔用更多的計算資源。

Webp CompressionTechniques

有損WebP基於VP8視頻編碼中的預測編碼方法來壓縮圖像數據,其基本步驟類似於JPEG壓縮,主要包含格式轉換、分割子塊、預測編碼、FDCT、量化、Z排列、熵編碼,流程如下圖所示,紅色代表與JPEG不同的部分。


編碼原理圖

1) 格式轉換

若壓縮前圖像數據爲RGB格式,則需先進行格式轉換成YUV格式,Y表示亮度分量,UV表示色度分量。之所以轉換成YUV格式是因爲人類視覺對亮度遠比色度敏感,所以可通過適當減少色度數據的存儲來節省數據佔用的空間,但卻不會對視覺效果造成太大影響,如可每兩個或四個相鄰的像素點才保存一對UV值。

2) 分割宏塊

接下來將數據分割成一個個8x8或16x16的宏塊。

3)  預測編碼

預測編碼與VP8幀內預測相同。VP8的幀內預測基本上是從H.264標準照搬過來的:子塊(subblock)預測模式基本上和H.264的i4×4模式完全一致;並且,整塊預測模式和i16×16模式一致。色度的預測模式從經驗上說也和H.264一樣。H.264 High profile中定義的i8×8模式沒有出現在VP8中。另一個區別在於H.264的平面預測模式在VP8中被替換成了TM_PRED,這是一個非常含糊的近似模擬。就特定的預測模式而言,VP8和H.264有細微的差別,但是他們都和H.264有着一樣的名字。

VP8幀內預測模式與三種類型的宏塊一起使用:

4x4 luma

16x16 luma

8x8色度

宏塊裏每個4x4的子塊都有一個預測模型。(又名過濾)。在PNG裏過濾用得非常多,它對每一行都做同樣的事,而WebP過濾的是每一塊。它是這樣處理的,在一個塊周圍定義兩組像素:有一行在它上面爲A,在它左邊那一列爲L。


利用A和L,編碼器會將它們放在一個4x4的測試像素塊填滿,並確定哪一個生成了最接近原始塊的值。這些用不同方法填滿的塊叫做"預測塊"。

這些宏塊共享四個常見的幀內預測模式:


H_PRED(水平預測)。用左列L的副本填充塊的每一列。

V_PRED(垂直預測)。用上面行A的副本填充塊的每一行。

DC_PRED(DC預測)。使用A上方行中的像素的平均值和L左邊的列填充塊,使用單個值。

TM_PRED(TrueMotion預測)。一種從On2Technologies開發的壓縮技術獲得其名稱的模式。除了行A和列L之外,TM_PRED使用塊上方和左側的像素P. A中的像素之間的水平差(從P開始)使用從L到L的像素來傳播,以開始每一行。

對於4×4亮度塊,存在類似於V_PRED和H_PRED的六個額外幀內模式,但對應於在不同方向上預測像素。

如上所述,TM_PRED模式對於VP8是唯一的。下圖使用示例4x4像素塊來說明TM_PRED模式的工作原理:

 

其中C,A s和L s表示來自先前編碼塊的重建像素值,並且X 00至X 33表示當前塊的預測值。TM_PRED使用以下等式來計算X ij:

X ij = L i + A j-C(i,j = 0,1,2,3)

雖然上述示例使用4x4塊,但是8x8和16x16塊的TM_PRED模式以相同的方式工作。

TM_PRED是VP8中更頻繁使用的幀內預測模式之一,並且對於公共視頻序列,其通常被幀內編碼的所有塊的20%至45%使用。總體上,與其它幀內預測模式一起,TM_PRED幫助VP8實現非常好的壓縮效率,特別是對於只能使用幀內模式(關鍵幀本身不能參考先前編碼的幀)的關鍵幀。

4) FDCT

FDCT(Forward Discrete Cosine Transform,正向離散餘弦變換)是將一組空間域的像素點轉變成頻域中的係數,對每個宏塊執行FDCT,使得變換後數據的低頻部分分佈在數據塊的左上方,高頻部分集中在右下方,其中左上角第一個係數稱爲直流係數,其他均爲交流係數。

5) 量化

量化是壓縮中損失數據的主要步驟,它主要原理是把經過DCT變換後的宏塊中每個數值除以量化表中對應的係數並取整。其中量化表中高頻部分對應的係數比低頻部分系數要大得 多,則在經過量化後,高頻部分的頻率係數被大大衰減甚至許多被清零,而低頻部分的頻率係數則較好地被保留。由於人眼對低頻部分更敏感,所以經過量化後再還原成圖像對視覺效果影響較小,但數據得到有效的壓縮。量化的最終目的是減少低頻部分非零係數的幅值並增加高頻部分零值係數的數量。

6) Z排列

爲更便於後續的編碼,需在編碼前對數據塊進行重新的排列,使得低頻部分的數據排在前面,高頻部分的數據排在後面,以增加數組中連續零值的數量,所以採用一種Z字型的排列方式。

7) DPCM

可用DPCM(DifferentialPulse Code Modulation,差分脈衝編碼調製)對直流係數進行編碼。由於直流係數的數值較大,且相鄰數據塊的直流係數相差不大,所以可使用DPCM對相鄰數據塊間量化後的直流係數差值進行編碼,從而提高壓縮比。 

8) 行程編碼

行程編碼是一種根據相同數據重複多次的情況簡化表示的算法,例如1111222222333按照行程編碼表示爲(1,4)(2,6)(3,3)。由於量化後的交流係數中包含較多連續零值係數,因此可用行程編碼對它們進行編碼來有效壓縮數據長度。

9) 熵編碼

熵編碼是一種無損數據壓縮編碼方式,WebP中採用布爾算術編碼作爲熵編碼方式。和其它熵編碼方法不同的地方在於,其他的熵編碼方法通常是把輸入的消息分割爲符號,然後對每個符號進行編碼,而算術編碼是直接把整個輸入的消息編碼爲一個數,一個滿足(0.0 ≤ n < 1.0)的小數n。消息越長,編碼表示它的間隔就越小,表示這一間隔所需的二進制位就越多。

 

其他:

1.    自適應塊量化

爲了提高圖像的質量,將圖像分割成具有明顯相似特徵的區域。對於這些段中的每一個,獨立地調整壓縮參數(量化步長,濾波強度等)。這通過將位重新分配到它們最有用的位置來產生有效的壓縮。VP8允許最多四個段(VP8比特流的限制)。

2.    環路濾波用於消除由來自塊變換的DCT係數的量化引入的塊效應

 

爲什麼WebP(有損)比JPEG更好

預測編碼是WebP勝過JPEG的主要原因。塊自適應量化也有很大的區別。過濾有助於中/低位速率。與霍夫曼編碼相比,布爾算術編碼提供5%-10%的壓縮增益。

 

無損WebP

WebP無損編碼基於使用幾種不同技術變換圖像。然後,對變換參數和變換後的圖像數據執行熵編碼。應用於圖像的變換包括像素的空間預測,顏色空間變換,使用局部出現的調色板,將多個像素打包到一個像素中,以及α替換。對於熵編碼,我們使用LZ77-Huffman編碼的變體,其使用距離值和緊湊稀疏值的2D編碼。

WebP 格式:WebP容器規範_WebP _ Google開發人員.htm

參考Link:

https://developers.google.com/speed/webp/docs/compression

https://zhuanlan.zhihu.com/p/23648251

http://www.jianshu.com/p/555859783f63 webp的工作原理

http://blog.csdn.net/zhangcanyan/article/details/51842211

http://www.tuicool.com/articles/FFZ73y

發佈了25 篇原創文章 · 獲贊 60 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章