數據壓縮實驗四 DPCM 壓縮系統的實現和分析

一、實驗原理

1.DPCM編解碼原理
  DPCM是差分預測編碼調製的縮寫,是比較典型的預測編碼系統。在DPCM系統中,需要注意的是預測器的輸入是已經解碼以後的樣本。之所以不用原始樣本來做預測,是因爲在解碼端無法得到原始樣本,只能得到存在誤差的樣本。因此,在DPCM編碼器中實際內嵌了一個解碼器,如編碼器中虛線框中所示。
原理圖
  在一個DPCM系統中,有兩個因素需要設計:預測器和量化器。理想情況下,預測器和量化器應進行聯合優化。實際中,採用一種次優的設計法:分別進行線性預測器和量化器的優化設計。
2.DPCM編碼系統的設計
  在本次實驗中,採用固定預測器和均勻量化器。預測器採用左側、上方預測均可。量化器採用8比特均勻量化。本實驗的目標是驗證DPCM編碼的編碼效率。首先讀取一個256級的灰度圖像,採用預設的預測方法計算預測誤差,並對預測誤差進行8比特均勻量化(基本要求) 。還可對預測誤差進行1比特、2比特和4比特的量化設計。

二、代碼分析

處理程序在實驗二BMP2YUV基礎上進行,其中yBuf數組中已存儲着圖像的灰度值,作爲編碼器的輸入。

    qBuf = (unsigned char *)malloc(height*width);
    reBuf = (unsigned char *)malloc(height*width);
    int temp;
    for (int j = 0; j<height; j++)  
    {
        for (int i = 0; i<width; i++)
        {
            if (i == 0)  
            {
                //每列第一個元素保持原來的樣值不變,只是變換相應的數據類型
                temp= (*(yBuf + j*width + i) - 128) / 2 + 128;//計算量化誤差
                *(qBuf + j*width + i) = (unsigned char)temp;
                temp = ((*(qBuf + j*width + i) - 128) *2) + 128; //計算重建值
                *(reBuf + j*width + i) = (unsigned char)temp;

            }
            else
            {    //當前差值信號爲當前樣值與上個預測樣值的差值 並進行了量化
                temp= (*(yBuf + j*width + i) - *(reBuf + j*width + i - 1)) / 2+ 128;
                *(qBuf + j*width + i) = (unsigned char)temp;
                //當前重建信號爲 反量化後的差值信號與上一個重建信號的和
                temp= ((*(qBuf + j*width + i) - 128) *2) + *(reBuf + j*width + i - 1);
                *(reBuf + j*width + i) = (unsigned char)temp;

            }
        }
    }

三.實驗結果與分析

將八幅不同類型的樣圖進行DPCM變換,觀測其重建圖像,與差分數據的顯示效果。對差分文件進行Huffman 編碼,將其符號的分佈統計得到下表結果。

原始圖像 預測量化圖像 重建圖像
zebra stripes are neat $1
zebra stripes are neat
zebra stripes are neat $1
zebra stripes are neat
zebra stripes are neat $1
zebra stripes are neat
zebra stripes are neat $1
zebra stripes are neat
zebra stripes are neat $1
zebra stripes are neat
zebra stripes are neat $1
zebra stripes are neat
zebra stripes are neat $1
zebra stripes are neat
zebra stripes are neat $1
zebra stripes are neat

壓縮性能能比較:

文件名稱 源文件大小(KB) huffman變換(KB) 壓縮比 DPCM+huffman變換(KB) 壓縮比
birds.bmp 384 304 1.26 148 2.59
lena.bmp 64 53 1.20 37 1.73
clown.bmp 64 54 1.18 39 1.64
camman.bmp 64 50 1.28 32 2.00
noise.bmp 64 54 1.18 63 1.01
odie.bmp 64 10 6.40 9 7.11
zone.bmp 64 55 1.16 64 1.00
fruit.bmp 64 54 1.18 34 1.88

結果分析:比較兩種系統(DPCM+熵編碼和僅進行熵編碼)之間的編碼效率(壓縮比和圖像質量)
  1. 可以明顯觀察到重建的圖像與原始圖像十分接近,而預測誤差圖像在邊緣部分的某些差異與採取的預測方案有關。
  2. 預測誤差圖像都爲明顯的灰色,電平集中分佈在128附近,量化過程中將量化誤差擡升128電平所以表明實際預測誤差值集中分佈在 0 左右,證明對於正常圖像,相鄰像素之間存在很強的關聯性,利用相關性對像素量化後進行壓縮壓縮比會很理想。
  3. DPCM+熵編碼的方案比單純只使用熵編碼的效果更好,能達到很高的壓縮率
  4. t05噪聲圖像:預測誤差概率分佈零散沒有規律,使用 DPCM+熵編碼 或者 Huffman 編碼的方案進行壓縮後得到的效果均不如其他有內容圖片。
  5. t07同心圓:雖然不是噪聲圖像,但是兩個極端灰度值 0 和 255交替分佈的,因此誤差範圍也很寬不易壓縮。
  綜上,利用DPCM進行預測編碼時,空間冗餘越大,壓縮效率越高。

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