• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > JPEG的DCT压缩原理,谁能通俗易懂解释一下?

JPEG的DCT压缩原理,谁能通俗易懂解释一下?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了通俗易懂,通俗易懂的近义词,通俗易懂的意思,通俗易懂的反义词,量子是什么通俗易懂等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:JPEG的DCT压缩原理,谁能通俗易懂解释一下?
描述:

看了这篇博文http://blog.csdn.net/jubincn/article/details/6882179,对JPEG的压缩原理还是有点模糊:

1.JPEG经过离散余弦处理后为什么就能压缩图片大小?
2.JPEG图片到底存储的是什么,压缩后减少的是什么?
3.对每个像素点进行离散余弦变换,是每个像素点的R、G、B值分别进行吗?

上面问题虽然很菜,还是希望大大们不吝赐教,感激不尽。


解决方案1:

1,首先说一下存储的是什么,这个问题解决后自然就可以明白为何文件变小,也就是压缩。
简单说jpeg存储的是DCT后模矩阵的系数。那模矩阵又是什么呢,看图
jpeg压缩 dct,jpeg dct变

如果显示出所对应的色块的话,是这样的!

jpeg压缩 dct,jpeg dct变
借助2楼的矩阵我们来看一下,第三个矩阵既是系数矩阵,也就是jpeg存储的,为什么右下角大部分都是零?因为模矩阵右下角是高频嘛,画成函数图像就是超级密集的cos波形,最右下角达到了7pi/16,不是说这么细小的地方我们把它忽视,而是JPEG在yuv采样的时候也达不到如此精细。

2,知道存储的是系数我们回到第一个问题,为啥就压缩了呢,为了便于理解咱们先把霍夫曼算法放一边,简单说一下压缩这个概念,以游程编码为例,10000010001001000100这么一串数如果写成,51 150的话是不省地方,解码器一看,啊就是TM5个1,15个0啊,当然真正游程编码还要分段这里就打个比方。霍夫曼编码又有自己的思想,查一下就知,但是那个树状图也是1,0构成。

3,这里纠正下楼主,一般jpeg是把图像分块,每个区是8*8,越保真的分的块越多,当然文件大小也变大,保真和大小是鱼和熊掌不可兼得。所以是以矩阵的形式做dct至于图层是以RGB还是YUV,发明者说他们是以YUV做的。最后附上发明者解说视频https://www.youtube.com/watch?v=Q2aEzeMDHMA

解决方案2:

1.DCT变换只是将空间域的像素点转换成频率域而已,压缩是靠哈弗曼压缩技术。
这里就要说一下信号与系统,当一些信号在当前信号域下不好处理的时候,可以转换到别的域处理。像素点所在的是空间域,如果通过离散余弦变换(DCT)之后,转换到频率域。在这个信号域下处理更方便。类似的变换方式还有 离散傅里叶变换,小波变换等。这些个变换在去噪、滤波方面用的多。
而压缩图片大小的根本方式是哈弗曼编码,如果你知道这个编码就好办,如果不知道我就简单说一下。这个事可证明的,效率最高的压缩方式。对单个字符按照频率编码长度,比如使用频率最高的字符a就可以直接编写为2进制01两位,频率最低的x可能编码超过一个字节,比如0001010101总共10位二进制位。但是这样的总码长是最短的。通过这样的方式给每个DCT系数编码,这样处理来压缩数据大小。
2.存储的是DCT系数表,不过这个DCT系数表是用Huffman编码之后存储的。Huffman编码分为两部分,一个是编码表,另外的一个是编码数据。当然JPEG图片不可能只存储这些东西,其他的内容,你可以看一下jpeg图像格式,知道具体分为哪些部分,就明白了。
3.对的。是分别进行的。

我也是一知半解,希望我的回答能够解答你最基础的疑惑。

解决方案3:

1

首先人眼对低频敏感对高频不敏感,而维基百科里说了

由于离散余弦变换具有很强的"能量集中"特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分

所以可以省去离散余弦变换后矩阵里的高频部分来对图像进行压缩,这是JPEG的主要原理。

那么什么是高频部分?对于一个矩阵
jpeg压缩 dct,jpeg dct变
对其离散余弦变换后并舍位取最接近的整数,得
jpeg压缩 dct,jpeg dct变
可以看到矩阵每个元素的绝对值是从左上角到右下角越来越小的,其中左上角称为DC系数,是整个矩阵的平均值。其余的称为AC系数。越靠近右下角,其对应的频率越高。那么根据人眼对低频敏感对高频敏感这个原理,省掉右下部分的一些值的话,对人眼来说,看起来实际上是没什么区别的。

2

对一个图像的矩阵DCT之后,需要对它进行量化。这方面我不是很熟悉。

From wiki

简单地把频率领域上每个成份,除以一个对于该成份的常数就可完成,且接着舍位取最接近的整数。这是整个过程中的主要有损运算。以这个结果而言,经常会把很多更高频率的成份舍位成为接近0,且剩下很多会变成小的正或负数。

对1中的结果进行量化的结果如图
jpeg压缩 dct,jpeg dct变

接下来对这个矩阵使用熵编码,最后存的就是熵编码再二进制编码(总不可能直接以文本的形式存储熵编码吧)之后的东西。

回答1里说了,压缩减少的是高频区域上的信息量。

3

不可能对一个像素点进行离散余弦变换的,没有意义。你的原文里也说了,是将矩阵分为8x8的块,分别进行DCT、量化、熵编码。

对于第二个问题,简单的回答是是。但是维基百科说

图像由RGB(红绿蓝)转换为一种称为YUV的不同色彩空间。... 。这种编码系统非常有用,因为人类的眼睛对于亮度差异的敏感度高于色彩变化。使用这种知识,编码器(encoder)可以被设计得更有效率地压缩图像。

然后在DCT过程中对每个成分(Y,U,V)分别使用离散余弦变换和余下的步骤。

时间仓促,错误之处请不吝指正。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • js中如何通俗易懂的理解多态?
  • (golang)请问go语言中的反射有什么用,能用通俗易懂的话介绍下吗??在什么情形下会需要用到这个东西?
  • JPEG的DCT压缩原理,谁能通俗易懂解释一下?
  • 怎样才能通俗易懂地解释EM算法?

相关文章

  • 2017-06-07 (python)如何使用django搭建直播网站?
  • 2017-06-07 请问怎么测试七牛的CDN
  • 2017-06-07 jboss不能部署项目
  • 2017-06-07 C#通过API如何右下角托盘的气泡提示框上的标题?
  • 2017-06-07 我上传了txt文本,能通过IE打开,可是不能用程序读取
  • 2017-06-07 C++一直超时,如何优化
  • 2017-06-07 (golang)goget特别慢,怎么办?老是卡主。。。
  • 2017-06-07 powershell中如何启动软件和调用python脚本?
  • 2017-06-07 比较排序的最小比较次数问题
  • 2017-06-07 计算机领域有哪些未来可能改变世界的算法和技术?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • rails安装问题
    • 为什么一维数组的存到文档再提取出来与原数组的形式不一样
    • (flask)jinja2怎样获取循环{%foriinn%}的索引
    • 请问,哪里有ExcelRibbon中所有的选择卡(包括上下文选项卡)和组的idMso名称?谢谢!
    • 会员储值卡管理系统[会员储值]怎么翻译成英文?
    • 当linux系统出现toomanyopenfiles的时候应该如何优化
    • 两点间小于指定长度的所有路径组成的子图
    • golanggolang实现任务的下发与上报?
    • 我上传了txt文本,能通过IE打开,可是不能用程序读取
    • macOSSierra1012安装mysql571出现错误

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有