c++实现差分预测编码DPCM以及PSNR的计算

本文介绍了使用C++实现差分预测编码(DPCM)的过程,并详细阐述了如何进行量化处理。同时,文章计算了峰值信噪比(PSNR),用于评估图像质量。随着量化比特数减少,重建图像质量降低,但压缩率提高。
摘要由CSDN通过智能技术生成

编程需要知道的知识点:

  1. 我们这次实现左向预测DPCM
    对于第一列像素点,我们假设它左边的像素点值为128,先用第一列原始图像像素点的值减去128,得到当前位置的残差,再用当前位置的残差加上左边的像素点值,得到当前位置的重建图像像素点。
    对于其他像素点,我们用当前位置的原始图像像素点的值减去重建图像当前位置左边那个像素点,得到当前位置的残差,再用当前位置得到的残差加上重建图像当前位置左边那个像素点的值,得到当前位置的重建图像像素点
  2. 量化
    对于每一个残差像素点的量化具体实现为:
    由于残差的取值范围为-255~255,我们先将他缩小范围 到0~255,加255除以2即可,再除以量化间隔,即2的8次方除以2的量化比特数次方,8bit量化即间隔为1,向下取整后再乘以量化间隔,将此时的值作为残差图像像素点输出。
    为了计算当前位置重建图像像素点,我们需要将量化后的残差乘2再减去255.
  3. PSNR计算
    均方差:
    在这里插入图片描述实际上就是两幅图每个像素点的差值的平方累加起来,最后除以总的像素点个数,即宽乘高
    在这里插入图片描述PSNR实际上就是10乘log以10为底的(255乘255除以mse)

程序图像结果

8bit量化时
在这里插入图片描述4bit量化时

在这里插入图片描述2bit量化时
在这里插入图片描述1bit量化时
在这里插入图片描述

图像质量评估

在这里插入图片描述
可以从上看到量化比特数越小,重建图像质量越差
PSNR大于40时,图像质量是极好的,20到30为较差,20以下为不可接受

压缩率分析

在这里插入图片描述进行DPCM后,由于重复字段增多,熵编码压缩率大幅度提高。

源码

#include<iostream>
#include<fstream>
using namespace std;


int main()
{
   
	const char* out_path_1 = "output.yuv";
	const char* out_path_2 = "wucha.yuv";
	const char* in_path = "Lena256B.yuv";
	int w = 256;
	int h = 256;
	unsigned char* buffer = new unsigned char[w * h];
	unsigned char* uvbuf = new unsigned char[w * h * 0.5];
	int i, j, k;

	// 原始数据
	double** data;
	data = new double* [h];
	for (int i = 0; i < h; i++)
	{
   
		data[i] = new double[w];
	}
	// 重建图像的数据
	double** output;
	output = new double* [h
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值