DPCM差分预测编码原理及实现 您所在的位置:网站首页 线性预测编码 DPCM差分预测编码原理及实现

DPCM差分预测编码原理及实现

2023-09-13 14:23| 来源: 网络整理| 查看: 265

文章目录 DPCM差分预测编码算法原理实现功能实验代码实验过程实验结果

DPCM差分预测编码 算法原理

DPCM编解码的框图如下所示,可以很明显得发现这是一个带有负反馈的算法系统。 在这里插入图片描述 如上图所示,首先输入一个像素值,与上一个像素的预测值做差,将得到的差值进行编码,编码后的差值有两个去向:一个是直接输出,另一个是通过解码器反解出差值,和上一像素的预测值相加,就得到了当前像素的预测值,为下一个像素的到来做准备。

实现功能

本次采用左侧预测,并且默认最左侧像素前的真实值为均为128。并且实现了如下功能:

进行不同量化bit数的差分预测编码将编码结果进行输出并进行霍夫曼编码分别计算原图像和量化后的图像进行概率分布分别计算原图像经过熵编码和经过DPCM+熵编码的图像的压缩比比较二者压缩效率计算重建图像的PSNR 实验代码 #include #include #include #include #include #define uchar unsigned char #define ll long long using namespace std; const string path = "C:\\Users\\sdlwq\\Desktop\\test\\Lena256B.yuv"; // 原始图像4:1:1 const string build_out = "build.yuv"; // 重建 const string code_out = "code.yuv"; // 量化编码 const int width = 256; const int height = 256; double freq[256]; uchar* input_buffer; //原始图像 uchar* out_buffer; //重建图 uchar* code_buffer; //量化输出 uchar* u_buffer; // 色差信号 uchar* v_buffer; int bitnum; inline void calculate_freq(uchar* buffer) //计算概率分布 { memset(freq, 0.0, sizeof(freq)); for (int i = 0;i int max = 255; double mse = 0; for (int i = 0; i mse += (standard[i * width + j] - image[i * width + j]) * (standard[i * width + j] - image[i * width + j]); } } mse = (double)mse / (double)(width * height); double psnr = 10 * log10((double)(max * max) / mse); cout cout 8, 4, 2, 1}) { for (int h = 0;h prediction = out_buffer[h * width + w - 1]; preError = input_buffer[h * width + w] - prediction; int temp = (preError + 255) / pow(2, 9 - i); code_buffer[h * width + w] = limit(temp, 0, (pow(2, i) - 1)); enqPreError = code_buffer[h * width + w] * pow(2, 9 - i) - 255; out_buffer[h * width + w] = limit(enqPreError + prediction, 0, 255); } } cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有