JPEG压缩原理与PyTorch实现

背景介绍

JPEG (Joint Photographic Experts Group) 是JPEG标准的产物,该标准由国际标准化组织(ISO)制订,是面向连续色调静止图像的一种压缩标准。JPEG格式是最常用的图像文件格式,后缀名为.jpg或.jpeg。

压缩原理

JPEG压缩主要分成以下几步

YUV采样
块划分
DCT
量化

YUV采样

YUV是一种颜色编码方法。常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。“Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

将RGB图像转换为YUV的计算方法为:
Y = + 0.2990 R + 0.5870 G + 0.1140 B U = − 0.1684 R − 0.3316 G + 0.5000 B + 128 V = + 0.5000 R − 0.4187 G − 0.0813 B + 128 \begin{matrix} Y&=&+0.2990R&+0.5870G&+0.1140B& \\ U&=&−0.1684R&−0.3316G&+0.5000B&+128 \\ V &= &+0.5000R& - 0.4187G& - 0.0813B&+128 \end{matrix} YUV===+0.2990R0.1684R+0.5000R+0.5870G0.3316G0.4187G+0.1140B+0.5000B0.0813B+128+128

在JPEG中使用YUV420采样,即每四个像素中,采样4个Y,1个U和1个V。

块划分

因为JPEG的变换采用 8 × 8 8\times8 8×8的DTC,因此需要将整张图片划分为多个 8 × 8 8\times8 8×8的格子,每个格子处理是独立的。

DCT

离散余弦变换(DCT)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换,但是只使用实数。对于 8 × 8 8\times8 8×8的离散余弦变换,可以理解为是一系列频率的组合。
8*8 DCT频率模板
可以看到左上角的直流分量最为平坦,右下角的交流分量最为复杂。对于任意的 8 × 8 8\times8 8×8图像块,均可以表示为64个频率的线性组合。

量化

量化是JPEG压缩失真的主要来源,其原理是人眼对高频信息不敏感。对于JPEG内置了一套量化矩阵,与DCT系数进行整除,即得到了最后的量化系数。量化系数是稀疏的,且大部分位于左上角的低频区域,因此实现了数据压缩。

PyTorch实现

详见PyTorch实现
基于DiffJPEG做了一些细节上的改进

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值