一、實驗原理
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...