資料壓縮原理實驗4 實驗報告

2021-08-03 12:11:30 字數 2662 閱讀 4654

一、實驗原理

1、**編碼:利用信源相鄰符合之間的相關性

 根據某一模型利用以往的樣本值對新樣本進行 **,然後將樣本的實際值與其**值相減得 到乙個誤差值,最後對這一誤差值進行編碼。

 如果模型足夠好,且樣本序列在時間上相關性 較強,則誤差訊號的幅度將遠遠小於原始訊號 ,從而得到較大的資料壓縮。

2、dpcm編譯碼原理

x(n)為當前畫素的原始值,d(n)為**誤差,p(n)為當前畫素的**值,d*(n)為經過量化後的誤差值。

dpcm是差分**編碼調製的縮寫,是比較典型的**編碼系統。在乙個dpcm系統中,有兩個因素需要設計:**器和量化器。理想情況下,**器和量化器應進行聯合優化。實際中,採用一種次優的設計方法:分別進行線性**器和量化器的優化設計。在本次實驗中,我們採用固定**器和均勻量化器。

在dpcm系統中, 需要注意的是**器的輸入是已經解碼以後的樣本。之所以不用原始樣本來做**,是因為在解碼端無法得到原始樣本,只能得到存在誤差的樣本。因此,在dpcm編碼器中實際內嵌了乙個解碼器。

二、實驗流程

1、讀取乙個 256級的灰度影象。

2、採用左側**的方法計算**誤差。

3、對**誤差進行8位元均勻量化。

4、輸出**誤差影象和重建影象,將**誤差影象寫入檔案並將該檔案輸入huffman編碼器,得到輸出碼流、給出概率分布圖並計算壓縮比。 將原始影象檔案輸入huffman編碼器,得到輸出碼流、給出概率分布圖並計算壓縮比。

5、比較兩種系統(dpcm+熵編碼和僅進行熵編碼)之間的編碼效率(壓縮比和影象質量)。

讀取256級的灰度影象

三、實驗**

1、讀取256級的灰度影象

該步驟**與第二次試驗的bmp2yuv類似,在本次實驗中,僅讀出yuv檔案中的亮度值即y的值。

2、開闢三個緩衝區

//ybuf用於儲存原始樣本,ybuffer用於給指標指向的內容賦值

u_int8_t* ybuf = null;

u_int8_t* ybuffer = null;

ybuf = (u_int8_t*)malloc(framewidth * frameheight);

ybuffer = ybuf;

//buildbuf用於儲存重建樣本,buildbuffer用於給指標指向的內容賦值

u_int8_t* buildbuf = null;

u_int8_t* buildbuffer = null;

buildbuf = (u_int8_t*)malloc(framewidth * frameheight);

buildbuffer = buildbuf;

//errorbuf用於儲存**誤差,errorbuffer用於給指標指向的內容賦值

u_int8_t* errorbuf = null;

u_int8_t* errorbuffer = null;

errorbuf = (u_int8_t*)malloc(framewidth * frameheight);

errorbuffer = errorbuf;

3、dpcm編碼及量化

for (i = 0; i < frameheight; i++)

else}}

四、實驗結果

以下分別為重建後的影象,原始影象,**誤差生成的影象。

將**誤差影象寫入檔案並將該檔案輸入huffman編碼器,得到輸出碼流,計算壓縮比。

將原始影象檔案輸入huffman編碼器,得到輸出碼流,計算壓縮比。

通過比較兩種系統之間的編碼效率得出如下結論:一幅影象相鄰畫素的相關性越大,壓縮比就越大,壓縮效率就越高,且高於僅進行熵編碼的壓縮效率,而當影象相鄰畫素的相關性越小,此時經過dpcm編碼再進行熵編碼,其壓縮效率就低於僅進行熵編碼的壓縮效率。

資料壓縮實驗一 yuv轉rgb格式實驗報告

一 實驗基本原理 yuv轉 rgb格式轉換公式 r y 1.4020 v 128 g y 0.3441 u 128 0.7141 v 128 b y 1.7720 u 128 分析 由rgb到 yuv格式的轉換公式 y 0.2990r 0.5870g 0.1140b r y 0.7010r 0.58...

資料壓縮實驗報告2 bmp轉yuv

1 bmp檔案格式 bmp bitmap 是windows作業系統中的標準影象檔案格式,可分為裝置相關位圖 ddb 和裝置無關位圖 dib 使用十分廣泛。它採用位對映存貯格式,除了影象深度可選外,絕大多數無壓縮,因此所佔空間很大。bmp檔案的影象深度可選1bit,4bit,8bit,16bit及24...

資料壓縮實驗報告3 LZW編譯碼

寫在前面 本次實驗由老師寫好了lzw編碼的 先理解了已有 之後,自己再寫解碼 時比較容易。下面給出完整的 以及實驗結果 bitio.h 全部由老師給出,自己寫了一些注釋 declaration for bitwise io vim ts 4 sw 4 cindent ifndef bitio def...