首页 > 编程知识 正文

JPEG压缩率,jpeg压缩编码的步骤

时间:2023-05-06 05:37:51 阅读:223409 作者:4640

控制压缩率的原理

在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图像容量

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。