原创地址:http://blog.csdn.net/abcjennifer/article/details/8074492

本文介绍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编码——原理与实现吧。

Reference:

1. http://jilie0226.blog.163.com/blog/static/36792254200902072746964/

2. http://www.stat.ncsu.edu/people/martin/courses/st783/JPEG%20(Transform%20compression).htm

3. http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html

4. http://tomjark.blog.163.com/blog/static/14600788201010137309298/

5. http://blog.chinaunix.net/uid-24517893-id-3074462.html

关于Compression更多的学习资料将继续更新,敬请关注本博客和新浪微博Rachel____Zhang。

JPEG压缩编码算法原理相关推荐

  1. 基于JPEG压缩编码的数据压缩算法的研究与实现(转)

    基于JPEG压缩编码的数据压缩算法的研究与实现(转) 编辑器加载中... JPEG压缩方法由于其较高的压缩比和理想的压缩效果,是目前应用最广泛的图像压缩方法.它采用一种特殊的有损压缩算法,将不易被人眼 ...

  2. 基于JPEG压缩编码的数据压缩算法的研究与实现

      JPEG压缩方法由于其较高的压缩比和理想的压缩效果,是目前应用最广泛的图像压缩方法.它采用一种特殊的有损压缩算法,将不易被人眼察觉 的图像颜色删除,从而能够将图像压缩在很小的储存空间.JPEG压缩 ...

  3. 视频压缩编码算法与原理

    视频压缩编码算法与原理

  4. matlab图像压缩像素编码,基于DCT的图像压缩编码算法的MATLAB实现

    基于DCT的图像压缩编码算法的MATLAB实现 摘要 随着科学技术的发展,图像压缩技术越来越引起人们的关注.为此从众多的图像压缩编码标准中选取了基于DCT变换的JPEG图像压缩编码算法进行研究,并通过 ...

  5. MPEG-2压缩编码技术原理应用

    http://www.cnblogs.com/xkfz007/articles/2615192.html 北京广播学院电视工程系 教授   郭 斌 MPEG是运动图像专家组(Moving Pictur ...

  6. 【老生谈算法】基于matlab的运动目标识别与跟踪系统设计与算法原理及程序源码——目标识别算法

    基于matlab的运动目标识别与跟踪系统设计与算法原理 大家好,今天给大家介绍基于matlab的运动目标的监测与跟踪系统设计与原理. 视频图像分析主要是对运动图像序列进行分析处理,它通常涉及到运动检测 ...

  7. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  8. 三维目标检测算法原理

    三维目标检测算法原理 输入输出接口 Input: (1)图像视频分辨率(整型int) (2)图像视频格式(RGB,YUV,MP4等) (3)左右两边的车道线位置信息摄像头标定参数(中心位置(x,y) ...

  9. 3D-2D:PnP算法原理

    3D-2D:PnP算法原理 1.问题背景-- 什么是PnP问题 ? 2.PnP问题的求解方法 2.1 P3P 2.1.1 算法的实际理解 2.1.2 算法的数学推导 2.1.3 算法的缺陷 2.2 直 ...

  10. MySQL索引背后的数据结构及算法原理【转】

    http://blog.codinglabs.org/articles/theory-of-mysql-index.html MySQL索引背后的数据结构及算法原理[转] 摘要 本文以MySQL数据库 ...

最新文章

  1. eclipse调试web项目
  2. 第三周项目三-输出星号图(2)
  3. FireFox and IE CSS兼容要点
  4. 数据分析:JSON格式数据
  5. 你说我导!微软玩转标题描述生成视频
  6. Could not install from “echarts\lib\visual\dataColor“ as it does not contain a package.json file.
  7. PDF密码去除常用工具
  8. 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)
  9. TIJ摘要:访问控制权限
  10. vue 路由参数变化,页面不刷新(数据不更新)解决方法
  11. 20145239杜文超 《Java程序设计》第3周学习总结
  12. 一维非齐次热传导方程的紧致差分格式(附Matlab代码)
  13. 小趣味:js编写斗地主规则(完整代码)
  14. 编码器控制电机正反转梯形图_PLC控制电机正反转以及其它实例
  15. 平面设计证书怎么考,平面设计证书有用吗:夏雨老师
  16. STC15单片机实战项目 - 项目需求
  17. Linux命令之who命令的使用
  18. 合成大西瓜——修改图片及发布详细教程
  19. wan端口未连接怎么弄_wan口未连接是什么意思?
  20. HTML学习(MDN)

热门文章

  1. linux skype 4.3,Linux下的Skype
  2. 快速彻底删除页眉或页脚横线
  3. Django之wagtail安装及配置
  4. 编写js代码,点击相应的按钮使得网页背景颜色发生改变
  5. 东欧小哥打造超全Python速查表登上GitHub热榜,标星4600+
  6. java开发随记之 Invalidate Caches / Restart
  7. css 全文字体大小,CSS 字体大小
  8. 国内服务器带宽价格是多少?国内服务器带宽为什么贵?
  9. 离线 维基百科 android,iPhone上的离线维基百科(附安装方法)
  10. Android 官方推荐 : DialogFragment 创建对话框