本文介绍JPEG压缩技术的原理,对于DCT变换、Zig-Zag扫描和Huffman编码,给出一个较为清晰的框架。

1. JPEG压缩的编解码互逆过程:

  • 编码

  • 解码

2. 具体过程:(这里仅以编码为例,解码过程为其逆过程)

A. 将原始图像分为8*8的小块, 每个block里有64pixels:

B. 将图像中每个8*8的block进行DCT变换:

数据压缩中有很多变换,比如KLT(Karhunen-Loeve Transform),这里我们用的是DCT离散余弦变换。和FFT一样,DCT也是将信号从时域到频域的变换,不同的是DCT中变换结果没有复数,全是实数。每8*8个original pixels都变成了另外8*8个数字,变换后的每一个数都是由original 64 data通过basis function组合而得的,如下图所示为DCT谱中6个元素的由来。

将低频部分集中在每个8*8块的左上角,高频部分在右下角,所谓JPEG的有损压缩,损的是量化过程中的高频部分。为什么呢?因为有这样一个前提:低频部分比高频部分要重要得多,romove 50%的高频信息可能对于编码信息只损失了5%。

C. 量化:

所谓量化就是用像素值÷量化表对应值所得的结果。由于量化表左上角的值较小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的。JPEG使用的颜色是YUV格式。我们提到过,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些。我们可以对Y采用细量化,对UV采用粗量化,可进一步提高压缩比。所以上面所说的量化表通常有两张,一张是针对Y的;一张是针对UV的。

通过量化可以reducing the number of bits and eliminating some of the components,达到通低频减高频的效果,如下图所示就是两张量化表的例子.

比如左边那个量化表,最右下角的高频÷16,这样原先DCT后[-127,127]的范围就变成了[-7,7],固然减少了码字(从8位减至4位)。

D. 编码分类:

编码信息分两类,一类是每个8*8格子F中的[0,0]位置上元素,这是DC(直流分量),代表8*8个子块的平均值,JPEG中对F[0,0]单独编码,由于两个相邻的8×8子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进行编码。

另一类是8×8块的其它63个子块,即交流(AC)系数,采用行程编码(游程编码Run-length encode,RLE)。这里出现一个问题:这63个系数应该按照怎么样的顺序排列?为了保证低频分量先出现,高频分量后出现,以增加行程中连续“0”的个数,这63个元素采用了“之”字型(Zig-Zag)的排列方法,如下图所示。

E. 编码格式:

上面,我们得到了DC码字和 AC行程码字。为了进一步提高压缩比,需要对RLE编码结果再进行熵编码,这里选用Huffman编码。Huffman编码具体不讲啦,详细地请这篇Huffman编码——原理与实现吧。

转载自Rachel____Zhang。

JPEG压缩原理(DCT)相关推荐

  1. fdct算法 java_ImageSharp源码详解之JPEG压缩原理(3)DCT变换

    DCT变换可谓是JPEG编码原理里面数学难度最高的一环,我也是因为DCT变换的算法才对JPEG编码感兴趣(真是不自量力).这一章我就把我对DCT的研究心得体会分享出来,希望各位大神也不吝赐教. 1.离 ...

  2. JPEG压缩原理与DCT离散余弦变换 量化

    原文网址:http://blog.csdn.net/newchenxf/article/details/51719597 1 前言 JPEG是joint Photographic Experts Gr ...

  3. JPEG压缩原理与DCT离散余弦变换

    原文网址:http://blog.csdn.net/newchenxf/article/details/51719597 转载请注明出处喔 1 前言 JPEG是joint Photographic E ...

  4. JPEG压缩原理与PyTorch实现

    背景介绍 JPEG (Joint Photographic Experts Group) 是JPEG标准的产物,该标准由国际标准化组织(ISO)制订,是面向连续色调静止图像的一种压缩标准.JPEG格式 ...

  5. 【转】JPEG压缩原理

     第一章 图像压缩编码的综述 1.1 图象压缩的目的和方法 图象的数字化表示使得图象信号可以高质量地传输,并便于图像的检索.分析.处理和存储.但是数字图像的表示需要大量的数据,必须进行数据的压缩. ...

  6. 音视频入门(四)-JPEG压缩算法原理

    一.JPEG的引入 JPEG属于一种图片压缩格式,之前我们通过对YUV420图像格式的学习,了解了怎么计算一帧YUV图像的大小.假设这里一帧图片的分辨率为1080p,像素格式为YUV420,那么它的大 ...

  7. JPEG压缩基本原理

    JPEG算法的第一步是将图像分割成8X8的小块. 在计算机中,彩色图像最常见的表示方法是RGB格式,通过R(Red).G(Green)A和(Blue)组合出各种颜色. 除此以外,还有一种表示彩色图像的 ...

  8. 令人拍案叫绝的JPEG图像压缩原理

    作者 | Jack Sigmoid  编辑 | 3D视觉开发者社区 前言 从事各行各业的大佬们,我相信,你们对图像格式是不陌生的,有很多种图像格式,比如,png,jpeg等等,但是你发现,同一张图片, ...

  9. stm32 h743的jpeg压缩硬件压缩的测试实例及问题

    stm32  h743的jpeg压缩硬件压缩的测试实例及问题 代码就不上了,主要是抄袭实例代码 encode_dma.c jpeg_utils.c jpeg_utils.h jpeg_utils_co ...

最新文章

  1. MySQL从5.7.32升级到8.0.22
  2. linux安装ffmpeg
  3. 最全的IDEA快捷键
  4. 评测网页效率的工具—YSlow
  5. JavaSE 7,8:确定特定文件系统支持的视图
  6. Django中提供了6种缓存方式
  7. 文字生成视频,只需一步(附论文下载)
  8. vue在个组件中给body加样式,或者给父级组件元素加样式
  9. Burp Suite Scanner Module - 扫描模块
  10. 平面设计完全手册_平面设计师的三大软件:PS、AI、ID该如何选择?| 平面设计纯干货...
  11. oracle认证视频教程,Oracle认证专家视频教程-OCP全套教程之学习笔记-RMAN-CATALOG
  12. 2019数据安装勾选_【在发票平台确认签名后,为什么在电子税务局增值税申报表上没有自动显示进项数据?】一张发票的“有效税额”是否可以分两个月抵扣?...
  13. USB接线定义和链接摄像头
  14. Win7 XP双系统安装
  15. 泛微OA与SAP通过webservice方式对接数据完整操作
  16. SpringBoot——检索
  17. 设计模式_访问者模式
  18. 【Django | 安全防护】CSRF跨站伪请求和SQL注入攻击
  19. html生成文字乱码,html中文为什么会乱码?html中文乱码怎么解决?
  20. 通过dhcp被动识别指纹原理

热门文章

  1. 以太坊的数据结构(状态树、交易树、收据树)及代码分析
  2. java图片上传保存至服务器并返回可下载的URL
  3. 编译链接运行原理——(二)进程,虚拟地址空间,分段,分页机制
  4. 金蝶云星空与钉钉对接集成供应商查询打通新增表单实例
  5. 设置 电脑开机自启动 选中软件(CMD)
  6. Makefile之cflags参数和ldflags参数
  7. 中值滤波原理及matlab实现代码
  8. Ubuntu安装配置nginx
  9. 在html中如何创建空白子网页,在DreamWeaver中创建空白页
  10. Linux独立的硬盘,linux用户家目录无损迁移到独立硬盘