为什么要压缩图片?

表示图像需要大量的数据,但图像数据是高度相关的,或者说存在冗余(Redundancy)信息,去掉这些冗余信息后可以有效压缩图像,同时又不会损害图像的有效信息。

视网膜上有两种感光细胞,能够感知亮度变化的视杆细胞,以及能够感知颜色的视锥细胞,由于视杆细胞在数量上远大于视锥细胞,所以我们更容易感知到明暗细节。

数字图像的冗余表现为以下几种形式:空间冗余、时间冗余、视觉冗余、信息熵冗余、结构冗余和知识冗余。

(1)空间冗余:图像内部相邻像素之间存在较强的相关性所造成的冗余。

(2)时间冗余:视频图像序列中的不同帧之间的相关性所造成的冗余。

(3)视觉冗余:是指人眼不能感知或不敏感的那部分图像信息。

(4)信息熵冗余:也称编码冗余,如果图像中平均每个像素使用的比特数大于该图像的信息熵,则图像中存在冗余,这种冗余称为信息熵冗余。

(5)结构冗余:是指图像中存在很强的纹理结构或自相似性。

(6)知识冗余:是指有些图像还包含与某些先验知识有关的信息。

压缩分类

无损压缩:第一类压缩过程是可逆的,也就是说,从压缩后的图象能够完全恢复出原来的图象,信息没有任何丢失

有损压缩:第二类压缩过程是不可逆的,无法完全恢复出原图象,信息有一定的丢失

压缩图片的应用

图象压缩一般通过改变图象的表示方式来达到,因此压缩和编码是分不开的。图象压缩的主要应用是图象信息的传输和存储,可广泛地应用于广播电视、电视会议、计算机通讯、传真、多媒体系统、医学图象、卫星图象等领域。

编码的种类

压缩编码的方法有很多,主要分成以下四大类:(1)象素编码;

(2)预测编码;

(3)变换编码;

(4)其它方法。

1:所谓象素编码是指,编码时对每个象素单独处理,不考虑象素之间的相关性。

2:所谓预测编码是指,去除相邻象素之间的相关性和冗余性,只对新的信息进行编码。举个简单的例子,因为象素的灰度是连续的,所以在一片区域中,相邻象素之间灰度值的差别可能很小。如果我们只记录第一个象素的灰度,其它象素的灰度都用它与前一个象素灰度之差来表示,就能起到压缩的目的。如248,2,1,0,1,3,实际上这6个象素的灰度是248,250,251,251,252,255。表示250需要8个比特,而表示2只需要两个比特,这样就实现了压缩。

3:所谓变换编码是指,将给定的图象变换到另一个数据域(如频域)上,使得大量的信息能用较少的数据来表示,从而达到压缩的目的。

JPEG压缩算法

JPEG算法的第一步:图像被分割成大小为8X8的小块,

第二步:颜色转换RGB为YCbCr

所谓“颜色空间”,是指表达颜色的数学模型,比如我们常见的“RGB”模型,就是把颜色分解成红绿蓝三种分量,这样一张图片就可以分解成三张灰度图,数学表达上,每一个8X8的图案,可以表达成三个8X8的矩阵,其中的数值的范围一般在[0,255]之间。

不同的颜色模型各有不同的应用场景,例如RGB模型适合于像显示器这样的自发光图案,而在JPEG压缩算法中,需要把图案转换成为YCbCr模型,这里的Y表示亮度(Luminance),Cb和Cr分别表示绿色和红色的“色差值”。

人们发现红绿蓝三种颜色所贡献的亮度是不同的,绿色的“亮度”最大,蓝色最暗,设红色所贡献的亮度的份额为KR,蓝色贡献的份额为KB,

最终可以得到RGB转换为YCbCr的数学公式为

PEG把图像转换为YCbCr之后,就可以针对数据得重要程度的不同做不同的处理。

第三步:DCT(离散余弦变换)

利用数学函数,将矩阵

第四步:量化

离散余弦变换,图像数据虽然已经面目全非,但仍然是处于“可逆”的状态。

JPEG压缩的最后一步:对数据进行哈弗曼编码

JPEG压缩过程总结

整个JPEG压缩图片的过程:

  • 将整张图片分为若干8*8的矩阵
  • 对每个8*8矩阵进行DCT变换
  • 对DCT后的矩阵进行量子化
  • 重新进行ZIGZAG排序
  • 将DC分量和AC分量分别进行DPCM和RLE编码
  • 将整体信息进行Huffman编码

为什么压缩图片和压缩相关推荐

  1. 不知道电脑压缩图片怎么压缩?这有3个压缩妙招推荐给你

    我们想要在手机上实现图片压缩非常简单,很多美图类的APP里都有图片压缩的功能,那你知道电脑压缩图片怎么压缩吗?今天我带来了3个电脑图片压缩的妙招,感兴趣的小伙伴往下看吧. 妙招一:在"图片转 ...

  2. node 压缩图片_1Mb压缩成100k,图片无损压缩我选择它

    Boss有话说 Compressor 这是一款能够快速高效压缩图片的在线神器,可以在线压缩优化的格式包含 JPEG,PNG,SVG,GIF 和 WEBP 等主流的图片格式.相比之前分享的[ TinyP ...

  3. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )

    文章目录 一.使用 libjpeg-turbo 压缩图片流程 二.初始化 JPEG 压缩对象 三.打开文件 四.设置压缩参数 五.开始压缩 六.循环写入压缩数据 七.完成图片压缩及收尾 八.libjp ...

  4. 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

    文章目录 一. 图片压缩 二. 图片文件压缩类型 三. Android 原生 API 提供的质量压缩 四. Android 原生 API 提供的尺寸压缩 一. 图片压缩 图片压缩 : ① 文件压缩 : ...

  5. python压缩图片--指定压缩大小且保真压缩

    代码核心思路 循环降低图片质量quality 直至图片质量大小符合目标质量后退出循环 pillow压缩失真严重 ''' pip install pillow ''' from io import By ...

  6. 怎么压缩图片,压缩图片轻松搞定

    怎么压缩图片呢?现在的相机手机都比较好,导致拍出来的图片也是比较的大,我们想要将这些图片传到自己的空间中也是相当的麻烦,今天就教给大家压缩图片怎么轻松搞定. 1:将自己需要压缩的图片文件准备好,放在电 ...

  7. Java实现批量压缩图片 裁剪压缩多种尺寸缩略图 一键批量上传图片

    10万+IT人都在关注的图片批量压缩上传方案(完整案例+代码) 背景需求:为了客户端访问图片资源时,加载图片更流畅,体验更好,通常不会直接用原图路径,需要根据不同的场景显示不同规格的缩略图,根据商品关 ...

  8. node 压缩图片_压缩宝Apowersoft Apower Compress v1.1.11 中文特别破解版

    点击上方 蓝字 关注我吧! 我是为大家持续分享软件的阿干,感谢您的到来! 压缩宝 ApowerCompress 是 Apowersoft 官方推出的一款一键快速压缩图片.视频及PDF的专业软件的文件压 ...

  9. php压缩图片,PHP压缩图片功能的介绍

    php程序开发中经常涉及到生成缩略图,利用php生成缩略图这个过程本身没难度,但是你知道php能够优化调节生成的缩略图的质量吗?也就是说php能够控制生成缩略图的清晰度以及生成后的缩略图的体积.下面我 ...

  10. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

最新文章

  1. docker 删除容器_Docker (二) Windows10专业版安装教程
  2. myeclipse和输入法冲突的问题
  3. MySQL zip压缩包安装
  4. 机器人从计算机应用领域看,人的素质差异,本质地不在于他们即存知识信息量的差异,而在于他们思维能力的差异。( )...
  5. 二项式反演[bzoj3622]已经没有什么好害怕的了
  6. tia v15 添加项目_硬技能,TIA 博途软件界面的介绍
  7. 作者:周武柏,男,美国佛罗里达国际大学计算机科学博士生,南京邮电大学计算机学院大数据项目组成员。...
  8. Win7 单机Spark和PySpark安装
  9. JS案例:使用对象、对象数组、正则表达式
  10. 拼多多上买车,累计上线70个小时,成交订单9463笔!
  11. 《计算机组成原理》BCD码 8421编码原理剖析
  12. python统计各分数段人数并可根据选择绘制不同的图形_python习题整理
  13. [2018.11.03 T3] 单调序列
  14. 任务接单平台源码自动挂机阅读文章挣钱系统
  15. 几何语言点C是ab的中点,数学几何定理符号语言[教学备用]
  16. 批量爬取网站图片-“优美库”篇(爬虫实战)
  17. [文档]腾讯云使用手册之云服务器-VPS简介
  18. Kotlin 中的 appy和with方法
  19. axure实现搜索功能_用Axure实验搜索原型
  20. ANTLR4(十三)解决歧义性总结

热门文章

  1. python全栈开发包括那些_简述Python全栈工程师要学会什么
  2. 图片太大怎么压缩变小?图片如何压缩?
  3. 二项分布的期望与方差的证明
  4. 办公室电脑怎么设置共享文件夹?
  5. linux主机名hostname老是被更改为broad原理分析和恢复
  6. Java实现一个简单的计算器功能
  7. 解决无法从Git官网下载Git安装包的具体方法
  8. Win10 开机system进程占用CPU 20%,ACPI.sys hardware interrupt
  9. python背景透明_Python生成透明背景图片
  10. 天啦,这才是英国退欧的真相!