jpeg算法简介
JPEG
图片压缩有多重要,可能很多人可能并没有一个直观上的认识,举个例子,一张800X800大小的普通图片,如果未经压缩,大概在1.7MB左右,这个体积如果存放文本文件的话足够保存一部92万字的鸿篇巨著《红楼梦》,现如今互联网上绝大部分图片都使用了JPEG压缩技术,也就是大家使用的jpg文件,通常JPEG文件相对于原始图像,能够得到1/8的压缩比,如此高的压缩率是如何做到的呢?
JPEG能够获得如此高的压缩比是因为使用了有损压缩技术,所谓有损压缩,就是把原始数据中不重要的部分去掉,以便可以用更小的体积保存,这个原理其实很常见,比如485194.200000000001这个数,如果我们用485194.2来保存,就是一种“有损”的保存方法,因为小数点后面的那个“0.000000000001”属于不重要的部分,所以可以被忽略掉。JPEG整个压缩过程基本上也是遵循这个步骤:
- 把数据分为“重要部分”和“不重要部分”
- 滤掉不重要的部分
- 保存
特点: 图片尺寸小,清晰度高
原理: 删除人眼不易察觉的元素
工序
色彩空间转换
Y 亮度
Cb 蓝色色度
Cr 红色色度色度缩减采样
以2x2大小的像素为一个区块,计算每个区块中像素的平均值,并删除重复的信息。然后缩小图像,使得含有一个平均值的由四个像素组成的区块只占一个像素空间,亮度通道Y保持不变。此时,亮度为1,Cb和Cr都缩减为原来的1/4。
这一步完成以后图像大小缩减为1/2。离散余弦变换(DCT)
以8x8大小的像素划分成区块,每个8x8的区域都用64张基础图像线性组合而成。
DCT无法压缩或者缩小图像。量化
DCT变换后的图像除以一个频率举证,这个矩阵左上角为低频数据,人眼感知能力强,所以数值较小;反之右下角频率高,人眼感知能力弱,数值较大。游程编码和哈夫曼编码
由左上角之字形列出所有区块中的亮度和色度数值
游程编码: 将列表中的0不列出来,只显示他有多少个
哈夫曼编码:
jpeg图像重构
按以上工序反向操作。
jpeg的缺点
jpeg适合相机图像但不适合矢量图
H.264压缩算法(AVC)
在每一秒视频的30帧视频中提取两个I帧(iframe),然后对其他的29个帧使用预测或者双向预测,只对差异和运动进行编码,同时使用向前解码的帧作为参考。iframe的操作流程类似与jpeg算法。