霍夫曼 Huffman 編碼簡單瞭解
阿新 • • 發佈:2021-10-08
霍夫曼編碼(也叫哈夫曼編碼)
即時碼:必須是唯一可譯碼,對一組即時碼來說,其中的任意一個碼字都只能與一種訊號存在對應關係,而且任意一個碼字都不能是其他碼字的字首。
即時碼的產生常採用樹形結構:
是用上邊的即時碼,
假設收到這樣一組訊號:
100101001
則可以唯一解析出以下 4 個碼字:
1
001
01
001
編碼過程
- 設有一個影象序列,含有 8 個灰度級,$x1, x2, x3,,, x8$,概率分別為:
p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 |
---|---|---|---|---|---|---|---|
0.4 | 0.18 | 0.1 | 0.1 | 0.07 | 0.06 | 0.05 | 0.04 |
- 選取最小兩個概率進行合併,形成一個新的概率集合,重新進行排序。重複此步驟直到最終只剩兩個概率為止,得到霍夫曼樹
- 根據霍夫曼樹分配碼字,得到霍夫曼編碼
概率越大,碼長越短;概率越小,碼長越短
計算平均碼長:每一個霍夫曼碼長與它的概率乘積之和
這裡的平均碼長為 2.61,小於自然碼長為 3(表示 8 個數至少需要 3 位),說明進行了壓縮
計算熵、編碼效率
計算絕對冗餘、相對冗餘
總結
霍夫曼編碼是無失真編碼中效率較高的一種編碼方法。
在分配碼字過程中,隨機賦 “0” 和 “1” 的不同,結果會使碼字不同(不唯一),而碼字長和平均碼字長不會改變,他也是唯一可解碼的。
但其缺點是信源縮減過程複雜,運算量大。
解決辦法:(適應性 Huffman 編碼 ⭐⭐)https://blog.csdn.net/qq_28829853/article/details/104111533
- 使用多叉樹壓縮編碼長度,提高碼元攜帶的資訊
- 使用更少的字元來構建編碼表,調高字元的頻次
- 減少檔案頭部攜帶的資訊,提高編位元速率
對於 1.
:
改進後的霍夫曼編碼,不再是二進位制的。它可以是多進位制,例如26進位制。操作方法:
把符號按出現概率排序,合併概率最小的 26 項,為新的節點。然後重複這一過程,剩下的步驟與經典霍夫曼編碼相同。
應用:把漢語單字讀音的416音按26進位制進行霍夫曼編碼,結果,像de,shi,yu這些概率高的讀音分配了較短的編碼;dia,den這些不常用的讀音分配較長的編碼。26進位制對應鍵盤的26鍵,這樣就誕生了一種新的輸入法
原文連結:https://blog.csdn.net/proorck2019/article/details/109445764
參考:
- 西安電子科技大學《現代影象分析 影象壓縮便編碼》https://haokan.baidu.com/v?pd=wisenatural&vid=16617709331236028375