静态图像压缩标准JPEG任课老师:厉青从64个数中选出某一个数。可先问“是否大于32?”消除半数的可能,这样只要6次就可选出某数。如果要选择的数是35,则过程如下:1.大于/小于32?大2.大于/小于32+16=48?小3.大于/小于48-8=40?小4.大于/小于40-4=36?小5.大于/小于36-2=34?大6.大于/小于34+1=35等如果要选择的数是63,则其过程如下:1.大于/小于32?大2.大于/小于32+16=48?大3.大于/小于48+8=56?大4.大于/小于56+4=60?大5.大于/小于60+2=62?大6.大于/小于62+1=63等这是因为每提问一次都会得到1比特的信息量。因此,在64个数中选定某一数所需的信息量是log264=6(bits)信息量:指从N个相等的可能事件中选出一个事件所需要的信息度量和含量。数据压缩技术的发展过程20世纪40年代,人们开始系统地研究数据压缩技术;主要表现在数据压缩算法方面:首先是ClaudeShannon与R.M.Fano的Shannon-Fano编码方法;1952年,D.A.Huffman提出了Huffman编码方法;1968年,P.Elias发展了Shannon-Fano编码,构造出更为完美的Shannon-Fano-Elias编码。1976年,J.Rissanen提出了一种可以成功地逼近信息熵极限的编码方法——算术编码。1982年,Rissanen和G.G.Langdon一起改进了算术编码。1977年,JacobZiv和AbrahamLempel提出了LZ77编码算法,78年又作了改进,被称为LZ78编码算法。1984年,TerryWelch提出了LZ78算法的变种算法——LZW。LZ77、LZ78、LZW三种压缩技术就是目前无损压缩领域中最为流行的、被称为“字典式编码”的压缩技术。数据压缩技术的发展过程(续)数据压缩标准逐渐形成,有损压缩算法快速出现。1986年开始制定静态图像压缩标准,1994年后成为国际标准,称为JPEG标准。ITU制定的电视会议系列标准(H.261、H.262、H.263、H.264等)以及由ISO制定的视频系列标准(MPEG-1、MPEG-2、MPEG-4)中,均采用了有损压缩原理作为其核心压缩算法。其中的MPEG-4标准(相当于ITU的H.263和H.263+标准)是为了适应网络视频的需求特点而制定的,具有更高的压缩比、支持并发数据流编码、基于内容的交互操作、增强的时间域随机存取、容错、基于内容的尺度可变性等新特性。数据压缩的分类1、按照压缩内容分为音频数据压缩、静态图像数据压缩、视频数据压缩和其他数据文件压缩等四种类型。2、按照压缩方式分为对称压缩和非对称压缩两种类型。3、按照压缩效果分为有损压缩与无损压缩两种类型。普通数据文件,一般采用无损压缩,对于冗余度较小的图像,需要采用有损压缩。4、按照算法思想分为信息熵编码、预测编码、变换编码、混合编码以及其他编码等五种,每种类型包含了一些具体算法,如下图。数据压缩的主要指标衡量不同压缩方法优劣的技术指标是相同的,主要包括以下几个方面。1)压缩比:指压缩前后的数据量之比,它反映了施加某压缩算法之后,数据量减少的比例;2)恢复效果:指经解压缩算法对压缩数据进行处理后所得到的数据与其表示的原信息的相似程度;3)算法简单、速度快:主要指实现算法的复杂度。看下面这两幅图片:你能分辨哪一幅是Bmp格式,哪一幅是JPEG格式吗?图片1图片2Bmp格式(900K)JPEG格式(40K)为什么会有如此大的差距呢?JPEG采用了图象压缩的技术静态图像压缩标准JPEG静态图像压缩标准(JointPhotographicExpertsGroup,JPEG)是一个由ISO和IEC两个组织机构联合组成的专家组,负责制定静态的数字图像数据压缩编码标准,这个专家组开发的算法称为JPEG算法,并且成为国际上通用的标准(ISO/IEC10918号标准“多灰度连续色调静态图像压缩编码”),又称为JPEG标准。JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。JPEG压缩算法简介JPEG专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(DiscreteCosineTransform,DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。•在DCT方式中,又分为基本系统和扩展系统两类。基本系统是实现DCT编码与解码所需的最小功能集,是必须保证的功能,大多数的应用系统只要用此标准,就能基本上满足需求。扩展系统是为了满足更为广阔领域的应用要求而设置的。•有损压缩利用人的视觉特性,25:1的压缩比可以得到很好的质量。JPEG压缩算法简介•JPEG压缩是有损压缩,它利用了人的视觉系统的特性,使用量化和无损压缩编码相结合来去掉视觉的冗余信息和数据本身的冗余信息。压缩编码大致分成以下3个步骤:1.正向离散余弦变换(ForwardDiscreteCosineTransform,FDCT)把空间域表示的图像变换成频率域表示的图像。2.加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。3.霍夫曼可变字长编码器对量化系数进行编码。译码或者叫做解压缩的过程与压缩编码过程正好相反。•JPEG算法处理的彩色图像是单独的彩色分量,因此它可以压缩来自不同颜色空间的数据,如RGB、HSB和CMYK。JPEG压缩流程在实际的JPEG压缩过程中,具体进行了以下的运算:1.将图像从RGB空间变换到YUV空间。2.将图像矩阵分块,对每一块单独进行DCT变换。DCT变换矩阵的大小为8×8。根据人眼对亮度信号比对色度信号更加敏感的生理特性,对Y分量划分为8×8块,对U、V分量划分为16×16的块。U、V分量的每一块舍弃1/2的信息后形成一个8×8的矩阵。3.对变换后的DCT矩阵进行量化处理,即用JPEG标准所推荐的亮度量化表和JPEG标准所推荐的色度量化表的量化矩阵分别对Y分量和U、V分量量化。量化的原则是低频部分用小的值量化,高频部分用大的值量化,量化的结果将会在高频部分出现大量的0。JPEG压缩流程4.量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排。这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。5.在第4步得到的数据的一个特点就是有大量连续的零。因此对此数据采用了行程编码。6.对全部数据进行霍夫曼编码。17主要内容JPEG背景基于DCT的顺序编码模式基于DPCM的无损编码模式基于DCT的渐进编码模式基于DCT的分层编码模式你认识吗?这是什么文件?请比较数据量高压缩率,高出20%-40%JPEG2000的优势在photoshop中你试过这样吗?渐进传输感兴趣区域压缩为文件加上元数据图像压缩程序实现思路实例演示:利用JPEG2000基本算法(小波变换)实现的图像压缩与解压缩思考:图像处理(压缩)程序实现的基本思路?图像压缩程序实现思路存放到数组(seek、get)处理数组(数据压缩)利用数组生成图像(seek、put)原理22JPEG背景JPEG(JointPhotographicExpertsGroup)由ISO和IEC两个组织机构联合组成的一个图像专家小组负责制定静态的数字图像数据压缩编码标准JPEG标准该专家组开发的算法称为JPEG算法JPEG已经成为国际上通用图像的标准JPEG标准适用范围灰度图像,彩色图像静止图像的压缩,视频序列帧内图像压缩JPEG可以大范围地调节图像码率和质量23JPEG背景JPEG算法与颜色空间无关对于单色图像,只有一个亮度分量对于彩色图像,JPEG对每个分量进行单独编码颜色空间转换不包含在JPEG算法中对于YUV图像:对于YUV采用不同的分辨率,对每个不同分量的可以采用不同的量化参数和熵编码表。可压缩来自不同颜色空间的图像:RGB,CMKY等24JPEG背景JPEG核心算法DCTDPCM25JPEG背景对于一个图像分量,JPEG规定了4种运行模式基于DCT的顺序编码模式(baselineCODEC)单遍扫描完成一个图像分量的编码,扫描次序从左到右,从上到下。基于DPCM(差分脉冲编码调制)无损编码模式无损编码压缩比可以达到2:1基于DCT的渐进编码模式通过多次扫描一幅图像分量的编码,提供了一个由粗到精的渐进码流结构。基于DCT的分层编码模式提供多分辨率的码流结构26基于DCT的顺序编码模式算法基本步骤将原图像用亮度、色差表示(分量图像采样4:1:1)分成8×8数据块,数据[0~255]转换为[-128~127]进行正向离散余弦变换(FDCT)量化(quantization)Z字形排列量化结果(zigzagscan)使用DPCM对直流系数(DC)进行编码使用行程编码对交流系数(AC)进行编码熵编码(entropycoding):哈夫曼或算术编码27基于DCT的顺序编码模式系统框架28基于DCT的顺序编码模式图像块的划分480*640彩色图像,由亮度Y色差Cb,Cr表示,可划分为4800亮度块和两份1200色度块29基于DCT的顺序编码模式离散余弦变换(DCT)残差图像残差图像的8×8块DCT系数分布30基于DCT的顺序编码模式离散余弦变换(DCT)X的离散余弦变换(DCT)为Y,X,Y是N×N块正变换FDCT逆变换IDCTTYAXA=TXAYA=31基于DCT的顺序编码模式离散余弦变换(DCT)32基于DCT的顺序编码模式缺省的量化方式(,)[(,)/(,)]QYxyIntegerRoundYxyQxy=33基于DCT的顺序编码模式缺省的量化方式(,)[(,)/(,)]QYxyIntegerRoundYxyQxy=量化表:根据心理视觉加权函数得到的量化:DCT变换系数除以量化步长,四舍五入取整34基于DCT的顺序编码模式缺省的量化方式35基于DCT的顺序编码模式缺省的量化方式36基于DCT的顺序编码模式缺省的量化方式37基于DCT的顺序编码模式缺省的量化方式38基于DCT的顺序编码模式DC系数和AC系数的编码方式DCT变换后,能量集中在左上角。由于两个相邻的8×8子块的DC系数相差很小,采用DPCM对直流(DC)系数单独编码。其它63个元素是交流(AC)系数,采用行程编码。问题:如何排列这63个系数?为了保证低频分量先出现,高频分量后出现,同时增加连续“0”的个数,采用Zig-Zag的排列方法。39基于DCT的顺序编码模式DC系数和AC系数的编码方式40基于DCT的顺序编码模式DC系数和AC系数的编码方式41基于DCT的顺序编码模式熵编码JPEG标准规定了两种熵编码算法:哈夫曼编码自适应算术编码哈夫曼编码一般采用的是固定的哈夫曼表。对亮度分量和色度分量采用了不同的哈夫曼表。42基于DCT的顺序编码模式熵编码哈夫曼编码包括两部分中间格式表示:用两个字节熵编码可变长编码VLC可变长整数编码VLI对于DC系数,第一个字节的高4位为0000,低4位为DC系数差值的比特数(size/category)第二个字节为DC系数差值43基于DCT的顺序编码模式熵编码任意给定一个整数,通过查此表,获得其对应的比特数44基于DCT的顺序编码模式熵编码对于DC系数差的category编码45基于DCT的顺序编码模式熵编码46基于DCT的顺序编码模式熵编码47基于DCT的顺序编码模式熵编码48基于DCT的顺序编码模式熵编码49基于DCT的顺序编码模式熵编码对于DC系数,设前一个8×8子块DC系数的量化值为12,则本块DC系数与它的差为3,所以DC中间格式为(2)(3)可以求得这个8×8子块熵编码的中间格式为(DC)(2)(3),(1/2)(-2),(0/1)(-1),(0/1)(-1),(0/1)(-1)