为什么压缩图片和压缩
为什么要压缩图片?
表示图像需要大量的数据,但图像数据是高度相关的,或者说存在冗余(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编码
为什么压缩图片和压缩相关推荐
- 不知道电脑压缩图片怎么压缩?这有3个压缩妙招推荐给你
我们想要在手机上实现图片压缩非常简单,很多美图类的APP里都有图片压缩的功能,那你知道电脑压缩图片怎么压缩吗?今天我带来了3个电脑图片压缩的妙招,感兴趣的小伙伴往下看吧. 妙招一:在"图片转 ...
- node 压缩图片_1Mb压缩成100k,图片无损压缩我选择它
Boss有话说 Compressor 这是一款能够快速高效压缩图片的在线神器,可以在线压缩优化的格式包含 JPEG,PNG,SVG,GIF 和 WEBP 等主流的图片格式.相比之前分享的[ TinyP ...
- 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )
文章目录 一.使用 libjpeg-turbo 压缩图片流程 二.初始化 JPEG 压缩对象 三.打开文件 四.设置压缩参数 五.开始压缩 六.循环写入压缩数据 七.完成图片压缩及收尾 八.libjp ...
- 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )
文章目录 一. 图片压缩 二. 图片文件压缩类型 三. Android 原生 API 提供的质量压缩 四. Android 原生 API 提供的尺寸压缩 一. 图片压缩 图片压缩 : ① 文件压缩 : ...
- python压缩图片--指定压缩大小且保真压缩
代码核心思路 循环降低图片质量quality 直至图片质量大小符合目标质量后退出循环 pillow压缩失真严重 ''' pip install pillow ''' from io import By ...
- 怎么压缩图片,压缩图片轻松搞定
怎么压缩图片呢?现在的相机手机都比较好,导致拍出来的图片也是比较的大,我们想要将这些图片传到自己的空间中也是相当的麻烦,今天就教给大家压缩图片怎么轻松搞定. 1:将自己需要压缩的图片文件准备好,放在电 ...
- Java实现批量压缩图片 裁剪压缩多种尺寸缩略图 一键批量上传图片
10万+IT人都在关注的图片批量压缩上传方案(完整案例+代码) 背景需求:为了客户端访问图片资源时,加载图片更流畅,体验更好,通常不会直接用原图路径,需要根据不同的场景显示不同规格的缩略图,根据商品关 ...
- node 压缩图片_压缩宝Apowersoft Apower Compress v1.1.11 中文特别破解版
点击上方 蓝字 关注我吧! 我是为大家持续分享软件的阿干,感谢您的到来! 压缩宝 ApowerCompress 是 Apowersoft 官方推出的一款一键快速压缩图片.视频及PDF的专业软件的文件压 ...
- php压缩图片,PHP压缩图片功能的介绍
php程序开发中经常涉及到生成缩略图,利用php生成缩略图这个过程本身没难度,但是你知道php能够优化调节生成的缩略图的质量吗?也就是说php能够控制生成缩略图的清晰度以及生成后的缩略图的体积.下面我 ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )
文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...
最新文章
- docker 删除容器_Docker (二) Windows10专业版安装教程
- myeclipse和输入法冲突的问题
- MySQL zip压缩包安装
- 机器人从计算机应用领域看,人的素质差异,本质地不在于他们即存知识信息量的差异,而在于他们思维能力的差异。( )...
- 二项式反演[bzoj3622]已经没有什么好害怕的了
- tia v15 添加项目_硬技能,TIA 博途软件界面的介绍
- 作者:周武柏,男,美国佛罗里达国际大学计算机科学博士生,南京邮电大学计算机学院大数据项目组成员。...
- Win7 单机Spark和PySpark安装
- JS案例:使用对象、对象数组、正则表达式
- 拼多多上买车,累计上线70个小时,成交订单9463笔!
- 《计算机组成原理》BCD码 8421编码原理剖析
- python统计各分数段人数并可根据选择绘制不同的图形_python习题整理
- [2018.11.03 T3] 单调序列
- 任务接单平台源码自动挂机阅读文章挣钱系统
- 几何语言点C是ab的中点,数学几何定理符号语言[教学备用]
- 批量爬取网站图片-“优美库”篇(爬虫实战)
- [文档]腾讯云使用手册之云服务器-VPS简介
- Kotlin 中的 appy和with方法
- axure实现搜索功能_用Axure实验搜索原型
- ANTLR4(十三)解决歧义性总结