數據壓縮 DPCM編碼

DPCMcoding


實驗原理

在一個DPCM系統中,有兩個因素需要設計:預測器和量化器。理想情況下,預測器和量化器應進行聯合優化。實際中,採用一種次優的設計方法:分別進行線性預測器和量化器的優化設計。
在本次實驗中,我們採用固定預測器和均勻量化器。預測器採用左側、上方預測均可。
量化器採用8比特均勻量化。

預測編碼基本原理

  • 信源的相鄰符號通常是相關的。
    相鄰像素具有相關性。
  • 預測編碼:
    利用信源相鄰符合之間的相關性。
    ->根據某一模型利用以往的樣本值對新樣本進行 預測,然後將樣本的實際值與其預測值相減得 到一個誤差值,最後對這一誤差值進行編碼。
    ->如果模型足夠好,且樣本序列在時間上相關性 較強,則誤差信號的幅度將遠遠小於原始信號 ,從而得到較大的數據壓縮。
    DPCM原理圖
    DPCM原理圖
    爲防止量化誤差累積,採用上一個樣點的重建值對當前樣點進行預測,故編碼器中應內嵌一個解碼器(如虛線所示),需要在編碼端獲得解碼重建值。

量化

一、量化器的形式化描述
編碼器將每個量化區間的索引發給解碼器,解碼器用重構水平表示該區間內所有的值。
這裏寫圖片描述
這裏寫圖片描述
1. 需要決定的參數:
(1)量化區間的數目
(2)決策邊界(判決門限)
(3)重構水平
(4)量化區間索引的碼字(量化碼字)
2.優化方案
碼率與失真之間需要折中,爲了降低編碼的比特數,需要減低量化區間 的數目,則導致更大的誤差。
有兩種方案來進行量化器設計:
(1)定長編碼,給定Rbit進行量化編碼,則量化區間數和量化區間索引碼字都定了。確定判決電平和重建電平來使量化誤差最小(可以求量化的均量誤差MSE)。

這裏寫圖片描述

(2)給定率失真函數或是量化誤差,去決定量化區間數和量化區間的索引碼字。
通常採用第一種方式優化量化設計。

二、均勻量化

1.均勻量化器的分類
1.1 中升型Midrise
這裏寫圖片描述
1.2 中平型Midtread
這裏寫圖片描述

2.均勻量化對不同分佈的效果
2.1 均勻分佈
均勻量化器只對均勻分佈信源是最佳的。
這裏寫圖片描述
Midrise↓
這裏寫圖片描述
Midtread↓
這裏寫圖片描述

2.2 非均勻分佈
對於非均勻分佈,可以採用均勻量化或者非均勻量化。

  • 非均勻分佈的均勻量化
    除了最後兩邊的量化區間,量化間隔是相等的。
    例如,對非均勻分佈進行3bit量化,共8個量化區間,其中有6個等長量化區間。
    量化間隔△越大,顆粒噪聲功率越大,過載噪聲功率越小。

Midrise↓
這裏寫圖片描述
Midtread↓
這裏寫圖片描述

  • 非均勻分佈的非均勻量化

    這裏寫圖片描述
    非均勻量化具有多種方法,下面僅以LIoyd-Max標量量化器爲例。
    這裏寫圖片描述
    給定量化級數M=2^n,則每個量化區間的索引用n個比特表示。求最佳bi,yi使得量化誤差最小。
    這裏寫圖片描述
    這裏寫圖片描述

若系統只是一個量化過程,對於非均勻分佈進行非均勻量化無疑是最優的。
若系統是量化+熵編碼,由於熵編碼對於分佈越不均勻的信源,壓縮效率越高,故此時對非均勻分佈進行均勻量化,系統性能最優。


實驗流程

本實驗代碼只需在實驗二BMPtoYUV基礎上加上少量代碼實現DPCM編碼即可。
1. 寫入BMP文件,轉化爲YUV文件,提取Y部分(256級的灰度圖像)。
2. 對該灰度圖像進行預測,計算預測誤差(預測器的輸入爲上一個樣點的重建值)。
3. 對預測誤差進行8bit均勻量化。
4. 對量化後的預測誤差進行反量化,求重建值。
5. 將預測誤差圖像寫入文件,並將該文件輸入Huffman編碼器,得到輸出碼字的必要信息。將原始灰度圖像輸入Huffman編碼器,得到碼字必要信息。比較兩種系統(DPCM+熵編碼和僅進行熵編碼)之間的編碼效率。


代碼分析

省略文件打開、文件關閉、以及與BMPtoYUV、HuffmanCoding相同部分。

void DO_DPCM(void * yBuf, void * quanBuf, void *rebuildBuf, unsigned int width, unsigned int height)
{
    unsigned char *y_buffer = NULL;
    unsigned char *quan_buffer = NULL;
    unsigned char *rebuild_buffer = NULL;
    int immediate = 0;
    int i = 0;
    int j = 0;
    y_buffer = (unsigned char *)yBuf;//定義指針指向原始圖像緩衝區
    quan_buffer = (unsigned char *)quanBuf;//定義指針指向預測誤差圖像緩衝區
    rebuild_buffer = (unsigned char *)rebuildBuf;//定義指針指向重建圖像緩衝區
    for (i = 0; i < width; i++)
    {
        for (j = 0; j < height; j++)
        {
            if (j == 0)
            {
                /*本程序令當前像素對左邊一個像素進行預測,
                每列第一個像素則對灰度128進行預測。
                256級的灰度圖像,預測值取值範圍[-255,255],
                則對其進行8bit量化可以將預測值除以2,
                此時取值範圍[-127,127],再加上128,使預測誤差
                能以灰度圖像正常顯示。
                */
                /*immediate先是爲量化後的預測誤差。
                後用來存放反量化後的預測誤差。*/
                immediate = (*y_buffer - 128)/2+128;
                *quan_buffer = (unsigned char)immediate;
                immediate = (*quan_buffer - 128) * 2+128;
                *rebuild_buffer =  (unsigned char)immediate;
                y_buffer++;
                quan_buffer++;
                rebuild_buffer++;
            }
            else
            {
                immediate = (*y_buffer - *(rebuild_buffer-1))/2+128;
                *quan_buffer = (unsigned char)immediate;
                immediate = (*quan_buffer - 128) * 2 + *(rebuild_buffer - 1);
                *rebuild_buffer =(unsigned char)immediate;
                y_buffer++;
                quan_buffer++;
                rebuild_buffer++;
            }
        }
    }
}

實驗結果

選擇十種不同bmp文件,使用DPCM編碼程序該文件的預測誤差值,然後送進實驗三設計的Huffman編碼器進行熵編碼。根據輸出的碼字及其必要信息的文件,對各種不同格式的文件進行壓縮效率的分析。將存有碼字信息的txt文件導入到excel中,進行統計分析。

1.以表格形式表示的實驗結果

FileName Birds Bird_q Camman Camman_q Clown Clown_q Fruit Fruit_q
raw file size(KB) 384 384 64 64 64 64 64 64
compressed file size(KB) 346 147 52.3 30.8 61.1 38.3 60.4 32.9
Compression ratio 1.10982659 2.612244898 1.223709369 2.077922078 1.047463175 1.671018277 1.059602649 1.945288754
FileName Lena Lena_q Noise Noise_q Odie Odie_q Zone Zone_q
raw file size(KB) 64 64 64 64 64 64 64 64
compressed file size(KB) 60.1 36.6 54.9 61.1 9.9 8.71 50.8 60.4
Compression ratio 1.064891847 1.74863388 1.16575592 1.047463175 6.464646465 7.347876005 1.25984252 1.059602649
FileName shuimu shuimu_q miao miao_q
raw file size(KB) 337 337 384 384
compressed file size(KB) 282 67.9 321 153
Compression ratio 1.195035461 4.963181149 1.196261682 2.509803922

2.各樣本文件的概率分佈圖(含部分灰度圖像截圖)
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

以下是兩張自己找的圖片:
shuimu.bmp
這裏寫圖片描述
這裏寫圖片描述
miao.bmp
這裏寫圖片描述
這裏寫圖片描述
3.實驗結果的分析

對於相鄰像素相關性高的灰度圖像,量化誤差集中在 0 附近,DPCM+熵編碼的系統性能最優。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章