文章目录
DPCM预测编码压缩及其分析
1 算法原理
DPCM即差分脉冲编码调制,基本思想是对信号差值进行量化。由于实际图片的像素之间存在相关性,所以进行差值计算之后,得到的重复差值会较多,信源熵随之减小。
通过对《信息论与编码原理》这门课的学习,我们已经知道大量重复,且取值范围比原分布范围更窄的差值,在应用变长Huffman编码时,其优势是显著的(降低平均码长)。
因此,我们一般在编码前,会先让数据经过DPCM系统!而通过对《通信原理》的学习,我们也知道这之间也必然存在着量化误差!
2 算法实现
在最开始,开辟三个Buffer区,分别存放原始图像数据、重建图像数据和残差数据。
主函数
int main() //进行文件读写,并把Y传给DPCM进行插值
{
//读yuv文件
FILE* file1, * file2, * file3;
fopen_s(&file1, "Lena256B.yuv", "rb");
unsigned char* y_buffer = new unsigned char[height * width];
unsigned char* u_buffer = new unsigned char[height * width * 0.25];
unsigned char* v_buffer = new unsigned char[height * width * 0.25];
fread(y_buffer, sizeof(unsigned char), height * width, file1);
fread(u_buffer, sizeof(unsigned char), height * width * 0.25, file1);
fread(v_buffer, sizeof(unsigned char), height * width * 0.25, file1);
fclose(file1);
unsigned char* dBuf = new unsigned char[height * width]; //残差Buffer
unsigned char* reBuf = new unsigned char[height * width]; //重建Buffer