背景介绍

JPEG (Joint Photographic Experts Group) 是JPEG标准的产物,该标准由国际标准化组织(ISO)制订,是面向连续色调静止图像的一种压缩标准。JPEG格式是最常用的图像文件格式,后缀名为.jpg或.jpeg。

压缩原理

JPEG压缩主要分成以下几步

#mermaid-svg-1hQahRzSBOoWtV0c {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1hQahRzSBOoWtV0c .error-icon{fill:#552222;}#mermaid-svg-1hQahRzSBOoWtV0c .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1hQahRzSBOoWtV0c .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1hQahRzSBOoWtV0c .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1hQahRzSBOoWtV0c .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1hQahRzSBOoWtV0c .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1hQahRzSBOoWtV0c .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1hQahRzSBOoWtV0c .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1hQahRzSBOoWtV0c .marker.cross{stroke:#333333;}#mermaid-svg-1hQahRzSBOoWtV0c svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1hQahRzSBOoWtV0c .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1hQahRzSBOoWtV0c .cluster-label text{fill:#333;}#mermaid-svg-1hQahRzSBOoWtV0c .cluster-label span{color:#333;}#mermaid-svg-1hQahRzSBOoWtV0c .label text,#mermaid-svg-1hQahRzSBOoWtV0c span{fill:#333;color:#333;}#mermaid-svg-1hQahRzSBOoWtV0c .node rect,#mermaid-svg-1hQahRzSBOoWtV0c .node circle,#mermaid-svg-1hQahRzSBOoWtV0c .node ellipse,#mermaid-svg-1hQahRzSBOoWtV0c .node polygon,#mermaid-svg-1hQahRzSBOoWtV0c .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1hQahRzSBOoWtV0c .node .label{text-align:center;}#mermaid-svg-1hQahRzSBOoWtV0c .node.clickable{cursor:pointer;}#mermaid-svg-1hQahRzSBOoWtV0c .arrowheadPath{fill:#333333;}#mermaid-svg-1hQahRzSBOoWtV0c .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1hQahRzSBOoWtV0c .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1hQahRzSBOoWtV0c .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1hQahRzSBOoWtV0c .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1hQahRzSBOoWtV0c .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1hQahRzSBOoWtV0c .cluster text{fill:#333;}#mermaid-svg-1hQahRzSBOoWtV0c .cluster span{color:#333;}#mermaid-svg-1hQahRzSBOoWtV0c div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1hQahRzSBOoWtV0c :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

YUV采样
块划分
DCT
量化

YUV采样

YUV是一种颜色编码方法。常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。“Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

将RGB图像转换为YUV的计算方法为:
Y=+0.2990R+0.5870G+0.1140BU=−0.1684R−0.3316G+0.5000B+128V=+0.5000R−0.4187G−0.0813B+128\begin{matrix} Y&=&+0.2990R&+0.5870G&+0.1140B& \\ U&=&−0.1684R&−0.3316G&+0.5000B&+128 \\ V &= &+0.5000R& - 0.4187G& - 0.0813B&+128 \end{matrix} YUV​===​+0.2990R−0.1684R+0.5000R​+0.5870G−0.3316G−0.4187G​+0.1140B+0.5000B−0.0813B​+128+128​

在JPEG中使用YUV420采样,即每四个像素中,采样4个Y,1个U和1个V。

块划分

因为JPEG的变换采用8×88\times88×8的DTC,因此需要将整张图片划分为多个8×88\times88×8的格子,每个格子处理是独立的。

DCT

离散余弦变换(DCT)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换,但是只使用实数。对于8×88\times88×8的离散余弦变换,可以理解为是一系列频率的组合。

可以看到左上角的直流分量最为平坦,右下角的交流分量最为复杂。对于任意的8×88\times88×8图像块,均可以表示为64个频率的线性组合。

量化

量化是JPEG压缩失真的主要来源,其原理是人眼对高频信息不敏感。对于JPEG内置了一套量化矩阵,与DCT系数进行整除,即得到了最后的量化系数。量化系数是稀疏的,且大部分位于左上角的低频区域,因此实现了数据压缩。

PyTorch实现

详见PyTorch实现
基于DiffJPEG做了一些细节上的改进

JPEG压缩原理与PyTorch实现相关推荐

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

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

  2. JPEG压缩原理(DCT)

    本文介绍JPEG压缩技术的原理,对于DCT变换.Zig-Zag扫描和Huffman编码,给出一个较为清晰的框架. 1. JPEG压缩的编解码互逆过程: 编码 解码 2. 具体过程:(这里仅以编码为例, ...

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

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

  4. 【转】JPEG压缩原理

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

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

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

  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. 手把手教你从零到一搭建深度学习项目(附PDF下载)
  2. elementui表格复制_Element-UI中关于table表格的那些骚操作
  3. python编程需要安装什么软件_[零基础学pythyon]安装python编程环境
  4. Hibernate框架--学习笔记(中):一对多配置、多对多配置
  5. SAP Analytics Cloud学习笔记(一):从CSV文件导入数据到Analytics Cloud里创建模型和Story
  6. Eclipse中将java类打成jar包形式运行
  7. 主成分分析(PCA)实现代码
  8. Python开发Http代理服务器 - socketref,再见!高德 - C++博客
  9. 虚拟应用DemoApp功能演示详解
  10. 什么是 npm ?npm 下载安装使用
  11. Mac翻译系列软件推荐三:Mate Translate for Mac多国语言翻译工具
  12. 从事汽车电子软件开发需要什么技能?
  13. 计算机自带仿真软件,crt软件(电脑终端仿真工具)V8.5.4 最新版
  14. 在Power BI中如何计算同比增长?
  15. mysql拼音码自动生成_根据中文名,自动生成首字母的拼音码或拼音码(两种方法)...
  16. 网站使用微信网页授权,qq登录
  17. 艾米丽Java游戏_艾米丽玩闹鬼 Emily Wants To Play中文游戏介绍_游戏库_巴士单机游戏...
  18. 如何使scrapy爬取信息不打印在命令窗口中
  19. 2012年信息系统项目管理师下半年上午考试习题与答案解析
  20. 01 APP被苹果APPStore拒绝的各种原因

热门文章

  1. html之表格属性 cellpadding、cellspacing
  2. 设计模式之四:简单工厂(披萨店生产披萨模拟流程)
  3. [RHEL5企业级Linux服务攻略]--第4季 DNS服务全攻略
  4. 遇到个比我还能折腾的
  5. js增加标签(增加元素)和删除标签(删除元素)
  6. Python+Statasmodels+实现泊松回归+实例+代码
  7. PaaS vs FaaS,运行微服务应该选择哪个?
  8. pytorch自定义DataSet
  9. 时序数据预测:LSTM
  10. 第四十一章 关羽战黄忠