Image and video processing 聽課筆記(一)

本人的研究方向是Multimedia Compute ,最近迷上了某美劇,男主做壓縮算法起家,於是毫無抗拒的開始學習杜克大學在coursera上的公開課(第一週講了關於精度和量化等基礎,如果有不熟悉的童鞋可以看看課程視頻哦微笑)。在這裏希望能與想了解圖像視頻壓縮算法的童鞋分享學習心得!

圖像壓縮有很多標準,課程中只以JPEG爲例來講解。JPEG流程圖如下


從一張圖片的灰度(像素值)直方圖可以看出,像素值出現的概率多數情況下是不同的,所以可以認爲並不是所有的像素值都有必要用8bit來代表。Huffman coding就是用較少的bit來表示較常出現的像素值。如下是已知像素值分佈的圖像,用Huffman coding來精簡圖像信息的過程。


首先通過統計直方圖,將像素值按照出現概率從大到小排列,然後每次迭代都將最小的兩個概率合併,記錄合併節點,再重新排序,直到只剩下兩個概率停止forward的過程,此時可以說從下往上建立了一棵節點樹。接下來就是從上往下給節點反向賦值的過程,也就是JPEG壓縮的流程的Symbol encoder,給像素值重新賦予可逆(decoder可解)的符號。如果我們記錄了合併節點,那麼反向時就在這些點稱做“分裂點”,每次經過分裂點都會增加1bit符號位,重要的是這些符號都是“前綴無關”的(否則decoder無法解釋的符號串內含有的像素值)。

驚訝爲什麼Huffman coding是優化的壓縮編碼呢?


可以從信息熵的角度來看,壓縮算法就是去掉信息中的冗餘。一般來說,均勻分佈的情況下,假定一個字符(或字符串)在文件中出現的概率是p,那麼在這個位置上最多可能出現1/p種情況。需要log2(1/p)個二進制符號位。

推廣到一般情況,假定文件由n個部分組成,每個部分的內容在文件中的出現概率分別是p1,p2,p3pn。那麼,二進制符號位最少(即壓縮極限)爲:

log2(1/p1)+ log2(1/p2) + ... + log2(1/pn)

= ∑ log2(1/pn)

該公式的等價形式

p1*log2(1/p1)+ p2*log2(1/p2) + ... + pn*log2(1/pn)

= ∑ pn*log2(1/pn)

= E( log2(1/p))

可以說熵就是Huffman coding壓縮的平均符號位長度。


本篇主要學習了Huffman編碼的過程,下一篇則要在此基礎上分析圖像壓縮的其他步驟。
發佈了28 篇原創文章 · 獲贊 12 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章