霍夫曼編碼(也叫哈夫曼編碼)
即時碼:必須是唯一可譯碼,對一組即時碼來說,其中的任意一個碼字都只能與一種信號存在對應關系,而且任意一個碼字都不能是其他碼字的前綴。
即時碼的產生常采用樹形結構:
![]()
是用上邊的即時碼,
假設收到這樣一組信號:
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