一、JPEG压缩是有损压缩,它利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。JPEG算法框图如图:


二、压缩编码大致分成三个步骤:

1、使用正向离散余弦变换(Forward Discrete Cosine Transform,FDCT)把空间域表示的图变换成频率域表示的图。
2、使用加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。
3、使用霍夫曼可变字长编码器对量化系数进行编码。
译码或者叫做解压缩的过程与压缩编码过程正好相反。


三、JPEG压缩编码算法的主要计算步骤如下:

(1)正向离散余弦变换(FDCT)。
 (2)量化(Quantization)。
 (3)Z字形编码(Zigzag Scan)。
 (4)使用差分脉冲编码调制(Differential Pulse Code Modulation,DPCM)对直流系数(DC)进行编码。
 (5)使用行程长度编码(Run-Length Encoding,RLE)对交流系数(AC)进行编码。
 (6)熵编码(Entropy Eoding)。


四、DCT变换说明

(1)对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,如图所示,并作为两维离散余弦变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。

(2)DCT变换(上)与IDCT变换(下)使用下式计算:

上面两式中,
C(u),C(v) = (2)-1/2,当u, v = 0;
C(u),C(v) = 1,其他。
f(i, j)经DCT变换之后,F(0,0)是直流系数,其他为交流系数。


(3)在计算两维的DCT变换时,可使用下面的计算式把两维的DCT变换变成一维的DCT变换:


五、量化说明

量化是对经过FDCT变换后的频率系数进行量化。量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。量化是图像质量下降的最主要原因。对于有损压缩算法,JPEG算法使用如下图所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中的左上角的量化步距要比右下角的量化步距小。下面2个表中的数值对CCIR 601标准电视图像已经是最佳的。如果不使用这两种表,你也可以把自己的量化表替换它们。

亮度量化值表和色度量化值表:


六、Z字形编排

量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排,如下图所示。这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。


七、直流系数的编码DC

8×8图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8×8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值(Delta)进行编码。


八、交流系数的编码AC

量化AC系数的特点是1×64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。
JPEG使用了1个字节的高4位来表示连续“0”的个数,而使用它的低4位来表示编码下一个非“0”系数所需要的位数,跟在它后面的是量化AC系数的数值。


九、熵编码

使用熵编码还可以对DPCM编码后的直流DC系数和RLE编码后的交流AC系数作进一步的压缩。
  在JPEG有损压缩算法中,使用霍夫曼编码器来减少熵。使用霍夫曼编码器的理由是可以使用很简单的查表(Lookup Table)方法进行编码。压缩数据符号时,霍夫曼编码器对出现频度比较高的符号分配比较短的代码,而对出现频度较低的符号分配比较长的代码。这种可变长度的霍夫曼码表可以事先进行定义。

JPEG有损压缩过程介绍相关推荐

  1. jpeg压缩简单介绍及huffman table

    一.jpeg压缩流程的简单介绍 jpeg压缩是基于YUV颜色空间进行压缩编码的,首先将RGB转化成YUV,然后将像素值减去128,转化到范围-128~127.后要进行采样,一般来说有3中采样方式:4: ...

  2. 程序员看的JPEG图像压缩介绍(多图慎入)

    目录 1.介绍 2.数据压缩的前提 3.基于DCT的JPEG压缩编码流程 3.1 色相转换 3.2 区块切割与采样 3.3 离散余弦变换 3.4 DCT量化过程 3.5 Z字型编码过程 3.6 DC系 ...

  3. JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用

    http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/index.html 一.系统架构 本文以一个实际的产品为例,来说明 JPEG 在其中的应用. ...

  4. JPEG算法解密 JPEG原理详解 (转载 by jinchao)

    (转载,个人笔记)https://www.cnblogs.com/Arvin-JIN/p/9133745.html  (随便夸一下CSDN的粘贴功能好强大) 图片压缩有多重要,可能很多人可能并没有一个 ...

  5. JPEG压缩算法详解(转载)

    JPEG压缩算法原理   最近在阅读turbojpeg源码,所以在网上查找JPEG的压缩原理,发现了一篇写的还不错的文章,故转载.https://thecodeway.com/blog/?p=69 / ...

  6. JPEG图像压缩详解

    转载自 www.thecodeway.com http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ JPEG压缩算法之前已有很多前辈详细讲解过,我 ...

  7. JPEG图像压缩算法详解

    转载自 http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ JPEG压缩算法之前已有很多前辈详细讲解过,我就不在这里画蛇添足了(主要是我懒..) ...

  8. JPEG压缩算法步骤原理

    目录 JPEG压缩算法解密 步骤一:图像分割 步骤二:颜色空间转换RGB->YCbCr 步骤三:离散余弦变换 步骤四:数据量化 步骤五:哈弗曼编码 JPEG压缩算法解密 by jinchao 图 ...

  9. JPEG系列三 JPEG图像压缩

    转载自 www.thecodeway.com http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ JPEG压缩算法之前已有很多前辈详细讲解过,我 ...

最新文章

  1. Python 中的用户自定义类型
  2. python网课百度网盘-我的“便(bian)宜”Python网课第一课
  3. Spark SQL JOIN操作代码示例
  4. 参数NLS_LENGTH_SEMANTICS的设置问题
  5. 黑马程序员_集合学习1
  6. Linux内核系统调用处理过程
  7. 持续更新的Zookeeper知识总结
  8. Linux 块设备,Block Layer层架构演变
  9. [转]C++类成员修饰const和mutable
  10. c#水晶报表的进一步功能和使用
  11. 2019.10.15学习总结
  12. 你理解这些Cisco NAT分类和原理吗
  13. 利用SPSS Modeler进行数据挖掘——探究不同程序语言的就业情况
  14. java有哪些服务器_java服务器有哪些?
  15. 是时候让打字更“快舒”了-小鹤双拼
  16. U盘制作成启动盘后容量变小
  17. 大学计算机专业那些课 --左飞
  18. WWW 2017精选论文
  19. JDK+JAVA+TOMCAT+MAVEN+IDEA的安装配置以及新建项目
  20. Google 的免费云服务器的 SSH 管理

热门文章

  1. git 删除远程文件
  2. 数据集大全之 披萨店销售含披萨配料、销售信息、订单信息(含数据集)
  3. 关于《伤心者》,关于那些看不到结果的努力
  4. Hive学习笔记三之函数操作
  5. 水浸传感器漏水探测器作用原理
  6. spring boot 分布式session实现
  7. APP测试内容 -- 流量测试常见测试方法
  8. android微信wcdb,一篇文章get微信开源移动端数据库组件WCDB的一切!
  9. 百度飞桨第一课|让人拍案叫绝的创意都是如何诞生的?
  10. spring 面向切面(AOP)编程例子