JPEG编码压缩率调整

本文介绍了如何通过调整JPEG编码的量化因子(u32Qfactor)来控制压缩率和图像质量。详细解释了量化表的作用,以及在实际应用中如何根据需求动态调整Qfactor以满足文件大小限制,同时保持良好的视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制压缩率的原理

JPEG压缩编码原理介绍中就知道整个JPEG压缩原理就是通过DCT变换去除空间冗余来达到图片压缩的。

如图1所示,经过DCT变换之后DCT系数只保留的左上角的数据(低频分量数据),右下角部分均变成0.

因此,想要进一步压缩就可以从量化表下手

量化表的量化系数越大,得到的量化后的DCT系数就越小,高频信息消失的更多,图片容量就越小。
在这里插入图片描述

图1. 量化过程

在这里插入图片描述

图2. DCT变换的频谱

海思平台操作

控制JPEG编码参数的接口

HI_MPI_VENC_SetJpegParam
【描述】
设置JPEG协议编码通道的高级参数

【语法】

HI_S32 HI_MPI_VENC_SetJpegParam(VENC_CHN VeChn, const VENC_JPEG_PARAM_S *pstJpegParam);


【参数】

VENC_JPEG_PARAM_S

typedef struct hiVENC_JPEG_PARAM_S
{
	HI_U32 u32Qfactor;
	HI_U8 u8YQt[64];
	HI_U8 u8CbQt[64];
	HI_U8 u8CrQt[64];
	HI_U32 u32MCUPerECS;
} VENC_JPEG_PARAM_S;

其中结构体VENC_JPEG_PARAM_S里的u32Qfactor量化表因子,该因子范围为[1, 99],u32Qfactor 越大,量化表中的量化系数越小,得到的图像质量会更好,同时,编码压缩率更低。同理 u32Qfactor 越小,量化表中的量化系数越大,得到的图像质量会更差,同时,编码压缩率更高。具体的 u32Qfactor 与量化表的关系请见 RFC2435 标准。

因此量化表因子其实就是控制图像所保留高频分量的范围,如果想压缩更低,那就保留的高频分量信息就越少。

在实际应用中,如果对JPEG图片大小没有限制,一般会将u32Qfactor设置为99,这样能保证图像质量最好。但是如果在实际应用场景中,对图片的大小有明确的限制,例如图片必须小于1M,那是不是直接把u32Qfactor调到最小就好了呢?当然不是,通常我们的做法就是先从u32Qfactor从高往下调,每次编码结束后读取JPEG大小是否满足1M,如果不满足的话,那就再把u32Qfactor调小一些,知道满足大小为1M,而图像质量又能得到较好的保证。

参考文档:HiMPP V4.0 媒体处理软件开发参考.pdf

注意

目前的JPEG编码,如果配置的u32Qfactor过低,会导致编码出来的JPEG图片出现偏色等现象,原因是色度的量化步长过大。用户可以通过调用HI_MPI_VENC_SetJpegParam接口修改色度的量化表,限制色度的量化步长,避免偏色等现象。具体的u32Qfactor与量化表的关系请见RFC2435标准。修改色度的量化表有可能会导致JPEG图片容量变大,用于需要权衡图像质量和JPEG图像容量

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值