JPEG 编码器




离散余弦变换,图像数据虽然已经面目全非,但仍然是处于“可逆”的状态,也就是说我们还没有进入“有损”的那一步。这次我们来玩真的,看一下数据中的细节是如何被滤去的。先来考察一下要对付的问题是什么,经过颜色空间转换和离散余弦变换,每一个8X8的图像块都变成了三个8X8的浮点数矩阵,分别表示Y,Cr,Cb数据,比如以其中某个亮度数据矩阵举例,它的数据如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/d926d4a98ab6472083ffcef627c28186.png

我们的问题是,在可以损失一部分精度的情况下,如何用更少的空间存储这些浮点数?答案是使用量子化( Quantization ),简称量化。“量子”这个概念来自于物理学,意思是说连续的能量可以看做是一个个单元体的组合,看起来高端大气,其实很简单,比如游戏中在处理角色面朝方向时,一般并不是使用0到2π这样的浮点数,而是把方向分成16个区间,用0到16这样的整数来表示,这样只用4个bit就足够了。JPEG提供的量子化算法如下:
(3.1)
其中G是我们需要处理的图像矩阵,Q称作量化系数矩阵(Quantization matrices),JPEG算法提供了两张标准的量化系数矩阵,分别用于处理亮度数据Y和色差数据Cr以及Cb。

其中round函数是取整函数,
比如上面数据,以左上角的-415.38为例,对应的量子化系数是16,那么round(-415.38/16)=round(-25.96125)=-26。最终得到的量子化后的结果为

可以看到,一大部分数据变成了0,这非常有利于后面的压缩存储。这两张神奇的量化表也是有讲究的,还记得我们在第一节中所讲的有损压缩的基本原理吗,有损压缩就是把数据中重要的数据和不重要的数据分开,然后分别处理。DCT系数矩阵中的不同位置的值代表了图像数据中不同频率的分量,这两张表中的数据时人们根据人眼对不不同频率的敏感程度的差别所积累下的经验制定的,一般来说人眼对于低频的分量必高频分量更加敏感,所以两张量化系数矩阵左上角的数值明显小于右下角区域。在实际的压缩过程中,还可以根据需要在这些系数的基础上再乘以一个系数,以使更多或更少的数据变成0,我们平时使用的图像处理软件在省城jpg文件时,在控制压缩质量的时候,就是控制的这个系数。
在进入下一节之前,矩阵的量化还有最后一步要做,就是把量化后的二维矩阵转变成一个一维数组,以方便后面的霍夫曼压缩,但在做这个顺序转换时,需要按照一个特定的取值顺序。

这么做的目的只有一个,就是尽可能把0放在一起,由于0大部分集中在右下角,所以才去这种由左上角到右下角的顺序,经过这种顺序变换,最终矩阵变成一个整数数组
-26,-3,0,-3,-2,-6,2,-4,1,-3,0,1,5,1,2,-1,1,-1,2,0,0,0,0,0,-1,-1,0,0,0,0,…,0,0
后面的工作就是对这个数组进行再一次的哈夫曼压缩,已得到最终的压缩数据。
参考资料:JPEG算法解密(三)
JPEG图像及解压图像中的隐写分析技术研究

JPEG压缩中质量因子和量化矩阵之间的关联相关推荐

  1. JPEG压缩如何工作?

    转译自:https://www.impulseadventure.com/photo/jpeg-compression.html 当试图重新保存数码照片时,人们经常会面临使用"质量设置&qu ...

  2. JPEG压缩原理与PyTorch实现

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

  3. 二维矩阵与二维矩阵之间的卷积

    最近在学习数字图像处理(Digital Image Processing,DIP)这门课,感觉有些吃力.由于在数字信号处理(Digital Singal Processing, DSP)这门课中只学了 ...

  4. 读取JPEG文件的压缩质量/质量因子参数

    JPEG是一种图像压缩算法,而JPEG在做压缩编码的时候往往需要设定一个压缩质量/质量因子的参数(quality).而在编码完成以后我们有时候希望获取到JPEG压缩文件的这个quality,好在万恶的 ...

  5. 数字图像处理作业: 包含质量因子的 JPEG压缩 python代码

    JPEG图片压缩的Python实现 注意:比较压缩率是 比较 原图与gpj文件的 大小 而非 解压后的bmp ,不管Q选择多少 解压后的bmp大小都是一样的. import numpy as np i ...

  6. 数字图像处理100问—40 JPEG 压缩——第四步:YCbCr+离散余弦变换+量化

    提示:内容整理自:https://github.com/gzr2017/ImageProcessing100Wen CV小白从0开始学数字图像处理 40 JPEG 压缩--第四步:YCbCr+离散余弦 ...

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

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

  8. 安卓中两种压缩图片详解(比例压缩与质量压缩)

    在提图片压缩之前,我先总结下图片的三种常见格式:JPEG,JPG,PNG Jpeg格式   与jpg格式相似,经常在拷相片的时候看到得,但我们制作图片的时候一般是保存jpg,该种图片格式是文件相对jp ...

  9. 【GlobalMapper精品教程】040:tif转jpg:解决ArcGIS中JPEG压缩仅支持8位或16位无符号数据的问题

    文章目录 一.问题描述 二.Globalmapper软件tif转jpg方法总结 1. 单波段导出RGB模式多个波段 2. 单波段导出单波段(灰度1个8位波段) 3. 多波段导出RGB模式多个波段 一. ...

  10. JPEG压缩matlab实现

    请注意:本文代码参考用MATLAB实现JPEG压缩过程 原作者为新浪博客:dzh_漫漫修行路 文章目录 JPEG原理流程 源代码 JPEG原理流程 1.色彩空间转换及相应预处理 在进行JPEG 压缩之 ...

最新文章

  1. .NET2.0隐形的翅膀,正则表达式搜魂者【月儿原创】
  2. 安全审计产品发展现状与趋势分析
  3. DELL optiplex 解决改回 AHCI蓝屏问题
  4. python、PyTorch图像读取与numpy转换
  5. 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)
  6. JUC并发编程八 并发架构--ReentrantLock
  7. 计算机社团发展目标,计算机社团工作计划
  8. ansible 配置文件优先级
  9. STM32F0使用LL库实现DMA方式AD采集
  10. Python的DoS拒绝服务之TCP/SYN洪水攻击
  11. day055056Django之多表操作,多表查询
  12. iPhone4S安装Linux系统,别失望太早 iPhone 4S其实就是iPhone 5
  13. 史上最强Dubbo面试26题和答案:核心组件+服务治理+架构设计等
  14. 二分查找 python实现
  15. 【JSP入门】只知道HTML却不知道JSP?
  16. 海南大学信号与系统838报考高频问题整理(4)
  17. 如何关闭华为手机连接电脑自动弹出cd驱动器和类似文件管理文件夹
  18. 教士、神父、教父、牧师有什么区别?
  19. 用 Androidx + 蓝牙HC05 点灯(2): Handler 掌舵人 和 Thread 线人,逮着蓝牙老大说黑话:此灯为我开,101011...
  20. plt python 自己制定cmap_带有自定义cmap颜色的matplotlib散点图不正确

热门文章

  1. 浙江大学计算机系自主招生题目,浙江大学自主招生试题
  2. 测试--插拔寿命测试
  3. Rack集成Sentry
  4. NRF24LE1有源RFID首选
  5. Battleship!
  6. 家庭局域网_玩转Windows 10家庭组,轻松共享局域网资源,人人都可以做到
  7. java实现阿里云图片文字识别
  8. 4个方法判断食物的热量高低
  9. Windows下的虚拟桌面软件——Virgo
  10. 海湾gst5000主机消防广播_海湾GST5000消防主机调试步骤