一、實驗原理
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 編碼,將其符號的分佈統計得到下表結果。
原始圖像 | 預測量化圖像 | 重建圖像 |
---|---|---|
壓縮性能能比較:
文件名稱 | 源文件大小(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進行預測編碼時,空間冗餘越大,壓縮效率越高。