本節爲opencv數字圖像處理(15):圖像壓縮的第二小節,圖像壓縮中的編碼方法:霍夫曼編碼、Golomb編碼、Rice編碼、算術編碼及其實現,主要包括:霍夫曼編碼、Golomb編碼、Rice編碼、算術編碼的原理與實現代碼。
1. 霍夫曼編碼
霍夫曼編碼對每個信源符號產生可能最小數量的編碼符號。第一步是通過對所考慮的符號的概率進行排序,並將具有最小概率的符號合併爲一個符號代替下次信源化簡過程的符號,從而創建一個簡化信源系列,過程如下圖所示,重複合併直到信源只有兩個符號的簡化信源爲止:
第二步是對每個化簡後的信源進行編碼,從最小的信源開始,直到遍歷原始信源。對兩個符號信源的最小長度的二值碼是0和1,這些符號被分配給最右邊的兩個符號(並不規定順序,誰0誰1無所謂),整個過程如下圖所示:
這樣編碼的平均長度爲:比特/像素。之後也可以通過從左到右的順序對串中每個符號進行分析來解碼,對於一個編碼串010100111100進行從左到右掃描,對應上表中的編碼,可以發現,第一個有效碼字爲01010,對應,下一個是011對應,最終完全解碼的消息爲。
當對大量符號進行編碼時,最佳霍夫曼編碼的構造也比較複雜。對於有個信源符號的通常情況,需要個符號概率,次信源簡化和次編碼賦值,當事先信源符號的概率可以估計時,使用預計算的霍夫曼編碼可以達到接近最佳的編碼,一些通用的圖像壓縮標準比如JPEG和MPEG,都規定了默認的霍夫曼編碼表。同樣適用霍夫曼編碼的壓縮標準還有CCITT、JBIG2、H.261、H.262、H.263、H.264等。
2. Golomb編碼
哥倫布編碼時具有指數衰減概率分佈輸入的非負整數編碼。給定一個非負整數和一個正整數除數m,表示爲的n關於m的Golomb編碼時商的一元編碼和的二進制表示的一個合併,構建如下:
- 形成商的一元編碼(整數q的一元編碼定義爲q個1緊跟着一個0)
- 令,,並計算截短的餘數使其滿足時,其他情況
- 連接上兩步的結果
例如,的一元編碼110,令,,。所以最後的結果就是110和01的連接即,可以看到這種編碼計算上要比最佳霍夫曼簡單很多。
當時,產生的編碼又稱爲Golomb-Rice編碼或Rice碼。當被表示的整數具有概率質量函數的集合分佈時:,可以證明Golobm碼是最佳的,即當時,爲所有唯一可判度的編碼提供了最短的平均碼長。
3. 算術編碼
算術編碼也是一種熵編碼但生成的是非塊碼,假設有一個來自四符號信源的五符號序列,其中信源的概率分別爲0.1、0.2、0.3和0.4,則按照信號的概率可以將區間劃分爲、四部分。然後讀入信號,第一個符號,佔據區間,這樣編碼間隔變爲;然後讀入第二個符號,佔原始區間的前10%,則編碼間隔進一步變化,變爲;然後讀入,佔原始區間的10%—30%,則編碼間隔進一步變化,變爲;然後讀入,佔原始區間的30%—60%,編碼間隔變爲;最後讀入,佔原始區間的60%—100%,編碼間隔變爲,然後從這個區間上任選一個數作爲編碼輸出,比如取0.306。
解碼的時候同樣需要知道信源的概率0.1、0.2、0.3和0.4,編碼輸出爲0.306,原始符號序列長度爲5。開始解碼:0.306在區間,所以第一個符號爲;而0.306在的前10%,所以第二個符號爲;而0.306在的10%—30%上,所以第三個編碼爲;而0.306在區間的30%—60%,所以第四個符號爲a_3;而0.306在區間的%60—100%,所以最後一個符號爲。
歡迎掃描二維碼關注微信公衆號 深度學習與數學 [每天獲取免費的大數據、AI等相關的學習資源、經典和最新的深度學習相關的論文研讀,算法和其他互聯網技能的學習,概率論、線性代數等高等數學知識的回顧]