JPEG 压缩简介

JPEG会分析图片的各个部分,找到并删除人眼不易察觉的元素。

人类的眼睛并不完美,它们有自己的细微差别。
JPEG算法通过这个条件,去除我们的眼睛不擅长感知的信息。
由于每只眼睛有1亿个视杆细胞(深度),600万个视锥细胞(色域),因此人眼对图像的亮度感知能力比颜色感知能力要强的多。

图形学补充

视锥细胞又分成三种,S、M和L三种细胞;因为三种类型的细胞对三种类型的波长的响应各不相同。S感知的是小波长高频率,M感知的是中间波长的光,L感知的是长波长的光。

不同的人眼睛中各种细胞的分布非常不一样。
人看不到光谱,因为:三种不同的细胞会把所有光每个波长的计算出一个数,已经被积分了,最后得到三个数送到大脑处理。

同色异谱现象 Metamers

光谱不一样但是看到的结果一样
正是我们利用这样的现象,才能给人们呈现多种颜色。
这个过程就是color matching,颜色匹配。

这四张光谱各不相同,但是被人看到的效果是一样的。
这个原理用在显示器上了。

计算机的加色系统

标准RGB系统

以常见的RGB加色系统为例。
混合RGB颜色的叠加,在真实上,我们混合不同颜色的光,最终会变为白色。

与绘画不同,绘画混合不同颜色会变黑,这种叫减色系统 (CMYK)。

上图是颜色匹配多。对于任何一个颜色都可以用RGB来表示。
对于每个不同波长的光都要用多少的RGB来混合。

CIE XYZ系统

不是试验测出来的颜色匹配系统,是人造的颜色匹配系统。

sRGB只能表示一部分的色彩。

HSV Color Space (Hue-Saturation-Value)

广泛应用于取色器。
给艺术家用的。
色调:选颜色
饱和度:接近白色还是接近纯色
亮度:接近黑色还是接近纯色

CIELAB Space (AKA LAB*)


a 红色-绿色
b 蓝色-黄色
L* 亮度 白色-黑色
互补色

减色系统 CMYK

Cyan 蓝绿色
Magenta 品红色
Yellow 黄色
Key 黑色
混合CMY本来就可以得到黑色,为什么要带上黑色?
考虑印刷成本,黑色墨水便宜。

参数

Quality:决定压缩的程度

0%- 100%
会得到膺像,artifact

步骤

1. 色彩空间转换 Color Space Conversion

通过图像原本的RGB值0-255
算出三个新的数值:亮度、蓝色色度、红色色度 Y、Cb、Cr

这一步转化是可逆的,没有删除任何数据
Y = 0.299R + 0.587G +0.114B
Cb = -0.1687R -0.3313G +0.5B + 128
Cr = 0.5R -0.4187G -0.0813B +128

2. 色度缩减取样 Chrominance Downsampling

会删除很多数据
在缩减采样中,将蓝色和红色色度分量层上的像素按2x2个像素成一个区块进行划分。
(卷积操作?)
计算每个区块的色度平均值,并删掉重复的信息。
然后缩小图像,使得含有1个平均值的由四个像素组成的区块只占一个像素的空间。

这样做,那些我们颜色不易感知的红蓝色度信息的量被缩减到原来的四分之一,而亮度保持不变。

现在只走了两个步骤,图像的大小就变成原来的一半了。
原来的图片是 RGB 1:1:1 = 3
缩小后的图片是 1/4:1/4:1 = 1.5

在观看图片时,蓝色和红色色度值会被放大到和亮度图层一样的大小。
并根据亮度、蓝色色度、红色色度的值重新计算出RGB的值。

3. 离散余弦变换 Discrete Cosine Transform

利用人眼不擅长感知图像中的高频元素(High Frequency Elements)实现的。
而且,当前大部分自然或风景摄影作品中都有一部分画面是失焦的。

为了更平滑的纹理而移除高频率的颜色变化的操作是人眼难以察觉的。

JPEG是如何利用人眼的细微差别呢?
遍历图像的各个部分,找到具有高频率的色度或亮度的像素频繁出现的区域,将这些人眼很难感知的元素删除。

要分别对亮度、蓝色色度、红色色度图层做这样的操作。
假设对亮度做操作。

第一步

将整个图像按8x8划分成许多区域。称为“区块”。
每个区块有64个像素,每个像素用0~255的数值代表其亮度。
接下来通过减去128,得到[-128,127]区间的数值。

4. 量化 Quantization

JPEG算法 格式压缩方案相关推荐

  1. 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

    文章目录 一. 图片质量压缩 二. 图片尺寸压缩 三. Android 10 文件访问 四. 完整源码示例 上一篇博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供 ...

  2. jpg图片与jpeg图片格式的区别(没有区别,.jpg只是扩展名.jpeg的缩写)JPEG图像压缩(YUV4:2:0 缩减采样、缩减取样)(离散余弦变换 DCT算法)(量化)(熵编码)(霍夫曼哈夫曼)

    文章目录 20191026 20220414 更新,更系统去了解里面的编码压缩流程 科普:关于图像格式JPG和JPEG你知多少? 一.前言 二.JPEG和JPG的关系 三.色彩空间转换 缩减取样 离散 ...

  3. Bitmap之压缩方案

    文章目录 前言 1.基础知识 1.1色彩模式 1.2四种模式的区别 1.3具体对比 1.4bitmap内存占用大小计算方式 1.5图片存在的形式 1.6BitampFactory加载Bitmap对象的 ...

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

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

  5. JPEG图片格式简单分析

    JPEG文件格式简单分析 作者:小爽 摘要: 这篇文章大体上介绍了JPEG文件的结构信息以及它的压缩算法和编码方式.使读者能够对JPEG文件格式有大体上的了解.为读者进一步进行学习JPEG文件压缩做好 ...

  6. Android中图片压缩方案详解

    如感觉排版不舒服,可移步至此处查看 图片的展示可以说在我们任何一个应用中都避免不了,可是大量的图片就会出现很多的问题,比如加载大图片或者多图时的OOM问题,可以移步到Android高效加载大图.多图避 ...

  7. 干货:Unity游戏开发图片纹理压缩方案

    原文链接:http://www.jianshu.com/p/f7c3741f22af Unity3d引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己 ...

  8. .rar .zip格式压缩原理

    压缩基本原理 如果您从互联网上下载了许多程序和文件,可能会遇到很多ZIP文件.这种压缩机制是一种很方便的发明,尤其是对网络用户,因为它可以减小文件中的比特和字节总数,使文件能够通过较慢的互联网连接实现 ...

  9. JPEG算法概述及实现

    本文将简单介绍下JPEG算法的实现流程,包括图像分割.颜色空间转换.DCT.Quantization.Huffman coding等. JPEG概述 图像压缩很重要.有这么几种压缩算法: JPEG(非 ...

  10. java putnextentry_Java对zip格式压缩和解压缩

    Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格 ...

最新文章

  1. 44.作用域,局部和全局变量
  2. 回溯法和DFS leetcode Combination Sum
  3. Assembly.Load()不能加载程序集的问题
  4. Markdown 中的常用 LaTex 数学公式
  5. linux 串口编程_ARM-Linux开发与MCU开发有何不同?上篇
  6. helm发布自定义Chart:指定namespace、设置NodePort
  7. 省、省、省!!!企业如何搭建易用性网络
  8. 本田2022年新车将搭载谷歌Automotive OS
  9. mac 使用js打开计算器_Numi for Mac(mac计算器软件)
  10. 据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?
  11. 【小技巧】PhotoShop + lllustrator制作电子签名矢量图
  12. 5G成鸡肋?运营商可能冷处理,中国移动则加快建设4G的FDD900
  13. 微信语音amr文件转mp3
  14. www.gvlib video.php,求大佬帮忙
  15. Java处理CSV或者制表符等分隔文件,比如Maf文件
  16. 【TortoiseSVN】配置比较工具为Beyond Compare
  17. 哪个安卓模拟器比较好用 2023年好用的安卓模拟器推荐
  18. 计算机进制转换专项训练,计算机进制转换练习题.doc
  19. 看微软IE7.0更新的一家之言(转)
  20. 洛谷3964 松鼠聚会

热门文章

  1. 帝国源码php安装文件是哪个,帝国CMS数据库配置文件是哪个文件?
  2. xp信息服务器iis5.0,XP中安装iis5.0/IIS6.0的详细操作方法步骤(图文教程)
  3. 解决“用友U8输入中文汉字显示问号“的问题
  4. Python基础知识(二):序列结构---字符串、 列表、 元组、 字典、 集合
  5. scrapy抓取斗鱼APP主播信息
  6. SpatialTE:从空间转录组数据集分析转座因子表达的工具
  7. UItraEdit激活码
  8. 适配 Android N 需要注意什么
  9. vue 环境配置.env;.env.development;.env.production配置
  10. Navicat 压缩包免费下载