数字图像处理 第6章 图像编码与压缩技术.ppt
第6章 图像编码与压缩技术6.1 概 述 从信息论角度看,信源编码的一个最主要的目的,就是要解决数据的压缩问题。数据压缩是指以最少的数码表示信源所发出的信号,减少容纳给定消息集合或数据采样集合的信号空间。图像编码与压缩的目的就是对图像数据按一定的规则进行变换和组合,从而达到以尽可能少的代码(符号)表示尽可能多的图像信息。图像编码的国际标准主要是国际标准化组织(ISO)和国际电信联盟(ITU)制定的。其主要目的包括:提供高效的压缩编码算法;提供统一的压缩数据流格式。经过大量严格的试验测试,从算法压缩性能到实现的复杂度等综合因素的考虑比较之后,最终形成了两个著名的里程碑式的国际标准,这就是人们熟知的用于连续色调静止图像压缩编码的JPEG标准和码率为p64kbit/s(p=1,2,30)的数字视频压缩编码标准H.261建议。6.1.1 图像的信息冗余 图像数据的压缩是基于图像存在冗余这种特性。压缩就是去掉信息中的冗余,即保留不确定的信息,去掉确定的信息(可推知的);也就是用一种更接近信息本身的描述代替原有冗余的描述。一般来说,图像数据中存在的冗余有8种。(1)空间冗余。在同一幅图像中,规则物体或规则背景的物理表面特性具有的相关性,这种相关性会使它们的图像结构趋于有序和平滑,表现出空间数据的冗余。邻近像素灰度分布的相关性很强。(2)频间冗余。多谱段图像中各谱段图像对应像素之间灰度相关性很强。(3)时间冗余。对于动画或电视图像所形成的图像序列(帧序列),相邻两帧图像之间有较大的相关性,其中有很多局部甚至完全相同,或变化极其微细,这就形成了数据的时间冗余。图像的信息冗余(4)信息熵冗余。(5)结构冗余。有些图像存在纹理或图元(分块子图)的相似结构,这就是图像结构上的冗余。(6)知识冗余。对有些图像的理解与某些知识有相当大的相关性。(7)视觉冗余。人类视觉对于图像场的任何变化并不是都能感知的。如果因为噪声的干扰使图像产生的畸变不足以被视觉感知,则认为这种图像仍然足够好。(8)其他冗余。6.1.2 图像压缩编码技术的分类 从图像压缩技术发展过程可将图像压缩编码分为两代,第一代是指20世纪80年代以前,图像压缩编码主要是根据传统的信源编码方法,研究的内容是有关信息熵、编码方法以及数据压缩比;第二代是指20世纪80年代以后,它突破了信源编码理论,结合分形、模型基、神经网络、小波变换等数学工具,充分利用视觉系统生理特性和图像信源的各种特性。图像压缩编码系统的组成框图如图所示。图像压缩编码技术的分类 图像数据压缩过程有3个基本环节:变换、量化和编码。变换变换的作用是将原始图像表示在另一个量化和编码数据较少的域中,对变换器的要求应是高度去相关的、重建均方差最小的、可逆的和方法简便的。常见的变换包括线性预测、正交变换、多分辨率变换、二值图像的游程变换等。量化器量化器要完成的功能是按一定的规则对抽样值作近似表示,使量化器输出幅值的大小为有限个数。量化器可分为无记忆量化器和有记忆量化器2大类。编码器编码器为量化器输出端的每个符号分配一个码字或二进制比特流,编码器可采用等长码或变长码。不同的图像编码系统可能采用上述框图中的不同组合。图像压缩编码技术的分类 根据编码的作用域划分,图像编码分为空间域编码和变换域编码2大类。6.2.1 基于压缩编码参数的评价 1 图像熵图像熵 设数字图像像素灰度级集合为d1,d2,dm,其对应的概率分别为 p(d1),p(d2),p(dm)。按信息论中信源信息熵的定义,图像的熵定义为 2 平均码字长度平均码字长度 设i为数字图像中灰度级di所对应的码字长度(二进制代码的位数),其相应出现的概率为P(di),则该数字图像所赋予的平均码字长度为基于压缩编码参数的评价 3 编码效率编码效率 =H/R100%根据信息论中信源码理论,可以证明在 RH 条件下,总可以设计出某种无失真编码方法。最好编码结果是使R等于或接近于H。这种状态的编码方法,称为最佳编码。4 压缩比压缩比 压缩比是指编码前后平均码长之比,如果用n表示编码前每个符号的平均码长,通常为用自然二进制码表示时的位数,则压缩比可表示为 rn/R 一般来讲,压缩比大,则说明被压缩掉的数据量多。一个编码系统要研究的问题是设法减小编码平均长度R,使编码效率尽量趋于1,而冗余度趋于0。6.2.2 图像的逼真度准则 描述解码图像相对原始图像偏离程度的测度一般称为保真度(逼真度)准则。常用的准则可分为2大类:客观保真度准则和主观保真度准则。1.客观保真度准则客观保真度准则 最常用的客观保真度准则是原图像和解码图像之间的均方根误差和均方根信噪比。令 f(x,y)代表大小为 MN 的原图像,代表解压缩后得到的图像,对任意x和y,f(x,y)和之间的误差定义为 图像的逼真度准则 则均方根误差为 如果将 看作原始图像f(x,y)和噪声信号e(x,y)的和,那么解压图像的均方根信噪比(SNR)为图像的逼真度准则 2.主观保真度准则主观保真度准则 图像处理的结果,绝大多数是给人观看,由研究人员来解释的,因此,图像质量的好坏与否,既与图像本身的客观质量有关,也与人的视觉系统的特性有关。有时客观保真度完全一样的两幅图像可能会有完全不相同的视觉质量,所以又规定了主观保真度准则。这种方法是把图像显示给观察者,然后把评价结果加以平均,以此评价一副图像的主观质量。6.3 图像的统计编码 统计编码是指一类建立在图像的统计特性基础之上的压缩编码方法,根据信源的概率分布特性分配不同长度的码字,降低平均码字长度,以提高传输速度,节省存储空间。由于二值图像只有两个亮度值,所以采集时每像素用一个比特表示,用“”代表“黑”,“”代表“白”,或者反之,这通常称为直接编码。直接编码时,代表一帧图像的码元数等于该图像的像素数。二值图像的质量一般用分辨率表示,它是一个单位长度所包含的像素数。分辨率越高,图像细节越清晰,图像质量越高,但同时表示一幅图像的比特数就越多。二值图像的相邻像素之间也存在很强的相关性。其突出的表现为图像中的黑点或白点都是以很大的概率连续出现的,这种相关性构成了研究和设计二值图像编码方法的基础。常用的二值图像编码有2种,即行程长度编码和二值图像方块编码。6.3.1 行程编码 行程长度编码,又叫做游程编码(RLC),其基本思想是,当按照二值图像从左到右的扫描顺序去观察每一行时,一定数量的连续白点和一定数量的连续黑点总是交替出现,如图所示。通常把具有相同灰度值的相邻像素组成的序列称为一个游程,游程中像素的个数称为游程长度,简称游长;把连续白点和黑点的数目分别叫做“白行程”和“黑行程”。如果对于不同的行程长度根据其概率分布分配相应的码字,可以得到较好的压缩。在进行行程编码时可以将黑行程与白行程合在一起统一编码,也可以将它们分开,单独进行编码。行程编码 行程长度编码先对每一行交替出现的白游长和黑游长进行统计,然后进行变长编码。在进行变长编码时,经常采用霍夫曼编码,在大量统计的基础上,得到每种白游长和黑游长的发生概率。其概率可分为2种情况,一种是白长和黑长各自发生的概率分布;另一种是游长的概率分布,而不区分白游长和黑游长。对于第一种情况,要分别建立白游长和黑游长的霍夫曼码表;对于第二种情况,只需建立游长的霍夫曼码表。在编码时对每一行的第一个像素要有一个标志码,以区分该行是以白游长还是黑游长开始,对于后面的游长,按照其值查相应的霍夫曼码表,并输出对应的码字。行程编码 设行程长度编码的信息符号集由长度为,N的各种游程组成,这里N是一条扫描线上的像素总数。如果不分黑、白游长而进行统一编码,并设Pi为长度为I的游长的概率,则游长的熵H和平均游长分别为 行程长度的符号熵(即平均每个像素的熵)为行程编码 当根据各游长的概率利用霍夫曼编码时,则每个行程的平均长度满足下列不等式:H H+1 将该不等式两边同除以平均游长L,可得每个像素的平均码长n的估计值为 hnh+1 因此,每个像素的熵h即为游长编码可达到的最小比特率的估计值。6.3.2 方块编码 WBS的编码方法是,对于出现概率大的全白子块,分配最短码字,用1比特码字“0”表示;对有N个黑色像素的子块用N+1比特的码字表示,第1个比特为前缀码“1”,其余N个比特采用直接编码,白为0,黑为1。对图像分别逐行或逐列进行WBS编码,可用一维WBS,此时N=1n,即将图像的每条扫描线分成若干像素段,每段的像素个数为n。例如:某段像素值 相应编码 黑白白黑 1001 白白白白 0方块编码 将一维WBS的像素段扩展为像素块,按照mn的方形块进行编码,称为二维WBS,Nmn。WBS编码的码字平均长度,即比特率bN为 式中,pN 为N个像素为全白的子块的概率,可由实验确定。如果能根据图像的局部结构或统计特性改变段或子块的大小,进行自适应编码,则编码效果会得到进一步的改善。下面是个自适应编码的实例。方块编码 例 下图为二维自适应WBS编码的码字分配图。图像分为2n2n(n为正整数)的子块,每个子块按四叉树结构分为个次子块,并依次分割下去,如图(a)所示;码字的构造与一维时的类似,如图(b)所示。在编码过程中,如某一块全白,则直接由图中得到码字;繁殖,依次考察下面4个子块,如果最小的22子块不是全白,则对其进行直接编码,并加前缀1111。6.3.3 霍夫曼编码 霍夫曼(Huffman)编码是根据可变长最佳编码定理,应用霍夫曼算法而产生的一种编码方法。1 可变长编码可变长编码 对于每个符号,例如经过量化后的图像数据,如果对它们每个值都是以相同长度的二进制码表示的,则称为等长编码或均匀编码。采用等长编码的优点是编码过程和解码过程简单,但由于这种编码方法没有考虑各个符号出现的概率,实际上就是将它们当作等概率事件处理的,因而它的编码效率比较低。例6.3给出了一个等长编码的例子。霍夫曼编码 例 假设一个文件中出现了8种符号S0、S1、S2、S3、S4、S5、S6、S7,那么每种符号编码至少需要3bit,假设编码成 S0=000,S1=001,S2=010,S3=011,S4=100,S5=101,S6=110,S7=111 那么,符号序列S0 S1 S7 S0 S1 S6 S2 S2 S3 S4 S5 S0 S0 S1编码后变成 000 001 111 000 001 110 010 010 011 100 101 000 000 001(共42bit)和等长编码不同的一种方法是可变长编码。在这种编码方法中,表示符号的码字的长度不是固定不变的,而是随着符号出现的概率而变化,对于那些出现概率大的信息符号编以较短的字长的码,而对于那些出现概率小的信息符号编以较长的字长的码。霍夫曼编码例 在例6.3中,可以观察到S0、S1、S2这三个符号出现的频率比较大,其他符号出现的频率比较小,如果采用一种编码方案使得S0、S1、S2的码字短,其他符号的码字长,这样就能够减少上述符号序列占用的位数。例如,可以采用下面的编码方案:S0=01,S1=11,S2=101,S3=0000,S4=0010,S5=0001,S6=0011,S7=100 那么上述符号序列变成 01 11 100 01 11 0011 101 101 0000 0010 0001 01 01 11(共39bit)可见,利用可变长编码方案对符号进行编码,尽管有些码字如S3、S4、S5、S6变长了(由3位变成4位),但使用频繁的几个码字如S0、S1变短,使得整个序列的编码缩短,从而实现了压缩。霍夫曼编码2 霍夫曼编码霍夫曼编码 霍夫曼于1952年提出了一种编码方法,它根据信源字符出现的概率构造码字,这种编码方法形成的平均码字长度最短。实现霍夫曼编码的步骤如下:(1)将信源符号出现的概率按从小到大的顺序排列。(2)把两个最小的概率进行组合相加,形成一个新的概率。(3)重复第(1)、(2)步,直到概率和达到1为止。(4)在每次合并符号时,将被合并的符号赋以1和0(大概率赋1,小概率赋0,或者相反)。(5)寻找从每一个信源符号到概率为1处的路径,记录下路径上的1和0。霍夫曼编码例 一个有8个符号的信源X,各个符号出现的概率为 X=符号:u1 u2 u3 u4 u5 u6 u7 u8 概率:0.40 0.18 0.10 0.10 0.07 0.06 0.05 0.04 试进行霍夫曼编码,并计算编码效率、压缩比、冗余度等。解 霍夫曼编码算法过程如图所示。最终的各符号的霍夫曼编码如下:u1:1 u2:001 u3:011 u4:0000 u5:0100 u6:0101 u7:00010 u8:00011霍夫曼编码霍夫曼编码 霍夫曼编码时,对同一源图像序列,霍夫曼编码并不是唯一的。在上图中,如果节点标1的和标0的对调,则相应的霍夫曼编码变成 u1:0 u2:110 u3:100 u4:1111 u5:1011 u6:1010 u7:11101 u8:11100 对照两组霍夫曼编码不难看出,尽管两者的组成不同,但两者的平均码长是一致的。根据以上数据,可分别计算其信源的熵、平均码长、编码效率及冗余度,即熵 H(x)=0.4log0.40.18log0.180.10log0.1 0.07log0.070.06log0.060.05log0.05 0.04log0.04=2.55霍夫曼编码 平均码长 =10.04+30.18+30.10+40.10+40.0740.06+5 0.05+50.04=2.61 编码效率 H/R=2.55/2.61100%=97.7%压缩之前8个符号需要3个比特量化,经压缩之后的平均码字长度为2.61,因此压缩比为C=3/2.611.15 冗余度为r=12.3%对上述信源X的霍夫曼编码,其编码效率已达97.7%,仅有2.3%的冗余。霍夫曼编码 3 准变长编码准变长编码 霍夫曼编码是依据符号出现的概率对符号进行编码,因而需要对原始数据扫描两遍。第一遍扫描要精确地统计出原始数据中每个符号出现的概率;第二遍是建立霍夫曼树并进行编码。因此当源数据成分复杂时,霍夫曼编码非常麻烦与耗时,从而限制了霍夫曼编码的实际应用。因此在实际编码中经常采用一种性能稍差,但实现方便的方法,即所谓的准变长编码。在最简单的准变长编码方法中只有两种长度的码字,对概率大的符号用长码,反之用短码。同时,在短码字集中留出一个作为长码字的字头,保证整个码字集的非续长性。6.3.4 算术编码 1.算术编码基本原理算术编码基本原理 算术编码用区域划分来表示信源输出序列。对一个独立信源,根据信源信息的概率将半开区间0,1)划分为若干个子区间,使每个子区间对应一个长度为N(任意整数)的可能序列,各个子区间互不重叠。这样,每个子区间有一个唯一的起始值或左端点,只要知道了该端点,也就能确定具体的符号序列。算术编码将待编码的图像数据看作是由多个符号组成的序列,对该序列递归地进行算术运算后,成为一个小数。在接收端,解码过程也是算术运算,由小数反向算术运算,重建图像符号序列。设输入符号串s取自符号集 式中,xi 表示符号序列,pi为对应的概率。算术编码算术编码的迭代关系可表示为 码字刷新 区间刷新其中是符号的累积概率。初始条件为 算术编码例 给出一组信源符号及其概率,试根据该表对符号序列a2、a1、a3、a4进行算术编码。符号 概率 符号 概率 a1 0.5 a3 0.125 a2 0.25 a4 0.125 (1)编码 根据表中字符概率,将区间0,1.0分为4个子区间,每个子区间的长度分别为0.5、0.25、0.125、0.125,如图所示。算术编码 设整个序列的概率初值 对a2进行编码:a2所在的编码区间为 C(a2),C(a2)+A(a2)=0.5,0.5+0.25)=0.5,0.75)算术编码 对a1进行编码:a1所在的区间为C(a1),C(a1)+A(a1)=0.5,0.5+0.125)=0.5,0.625)对a3进行编码 a3所在的区间为C(a3),C(a3)+A(a3)=0.59375,0.59375+0.015625)=0.59375,0.609375)对a4进行编码 最后输出的区域为C(a4),C(a4)+A(a4)=0.607421875,0.607421 875+0.001 953 125)=0.607421875,0.609375)取最后的区间的左端点数值0.607421875,转换为二进制数,并去掉小数点,得到字符串a2、a1、a3、a4的编码结果为100110111。算术编码以上编码过程的区间子分过程如图所示。6.3.5行程编码和霍夫曼编码的Matlab实现1.行程编码的实现方法行程编码的实现方法 I=imread(code.gif);m n=size(I);c=I(1,1);E(1,1)=1;E(1,2)=1;E(1,3)=c;t1=2;for k=1:m for j=1:n if(not(and(k=1,j=1)if(not(I(k,j)=c)E(t1,1)=k;E(t1,2)=j;E(t1,3)=I(k,j);c=I(k,j);t1=t1+1;end end end end 编码后的图像存储在变量E中,该变量是一个三维数组,前两维表示起始像素的横、纵坐标,第三维表示该行程的颜色值。通过调用imfinfo函数观察返回变量info可以知道,原始图像的大小为175123,在Matlab中的位深度为8,所以存储该图像文件需要21525B,而调用whos命令可以知道E是一个2053的数组。哈夫曼编码的实现方法 进行哈夫曼编码首先要统计图像中各种颜色值出现的概率,然后再进行排序编码。这种编码方法较为复杂,但是相对于行程编码方法而言,其效果要好得多。哈夫曼编码的Matlab实现代码见课本151153页。代码中的输出数组c的第一维表示颜色值,第二维表示代码的数值大小,第三维表示该代码的位数,将这3个参数作为码表写在压缩文件头部,则其以下的数据将按照这3个参数记录图像中的所有像素颜色值,就可以得到霍夫曼编码的压缩文件。这里要注意的是,由于Matlab不支持对某一位(bit)的读和写,所以利用该码表生成的每一个码字实际上还是8bit的,最好使用其他软件(例如C语言等)进行改写,以实现真正的压缩。事实上Matlab将图像写成JPEG文件也是用C语言实现的。6.4 预测编码 预测编码主要是减少数据在时间上和空间上的相关性。对于图像信源而言,预测可以在一帧图像内进行(即帧内预测)。也可以在多帧图像之间进行(即帧间预测),无论是帧内预测还是帧间预测,其目的都是减少图像帧间和帧内的相关性。预测编码就是用已传输的样本值对当前的样本值进行预测,然后对预测值与样本实际值的差值(即预测误差)进行编码处理和传输。预测编码有线性预测和非线性预测2类,目前应用较多的是线性预测,线性预测法通常称为差分脉冲编码调制法(DPCM)。6.4.1 DPCM编码 DPCM系统的基本原理是指基于图像中相邻像素之间具有较强的相关性。每个像素可以根据前几个已知的像素值来作预测。因此在预测编码中,编码与传输的值并不是像素取样值本身,而是这个取样值的预测值(也称为估计值)与实际值之间的差值。DPCM系统的原理框图如图所示。6.4.2 最佳线性编码 在线性预测的预测表达式中,预测值xn是 xn-m,xn-1的线性组合,由分析可知,需选择适当的预测系数 ai 使预测误差最小,这是一个求解最佳线性预测的问题。一般情况下,应用均方误差为极少值准则获得的线性预测称为最佳线性预测 在讨论如何确定预测系数 ai 之前,首先简单讨论一下在线性预测DPCM中,对xn作最佳预测时,如何取用以前的已知像素值 xn-1,xn-2,,x1。xn与邻近像素的关系如图所示。最佳线性编码 对于以前的已知像素的选取方法,可分为4种情况。(1)若取用现在像素 xn 的同一扫描行中前面最邻近像素 x1 预测 xn,即 xn 的预测值xn=x1,则称为前值预测;(2)若取用 xn 的同一扫描行中前几个已知像素值,如 x1,x5,预测 xn,则称为一维预测;(3)若取用 xn 的同一行和前几行若干个已知像素值,如x1,x5,x2,x3,x4,预测 xn,则称为二维预测;(4)若取用已知像素不但是前几行的而且还包括前几帧的,那么相应地称其为三维预测。6.4.3 DPCM系统中的图像降质 由于预测器和量化器的设计,以及数字信道传输误码的影响,在DPCM系统中会出现一些图像降质现象。经过许多实验可总结为下列5种。(1)斜率过载引起图像中黑白边沿模糊,分辨率降低。这主要是当扫描到图像中黑白边沿时,预测误差信号比量化器最大输出电平还要大得多,从而引起很大的量化噪声。(2)颗粒噪声。颗粒噪声主要是最小的量化输出电平太大,而图像中灰度缓慢变化区域输出可能在两个最小的输出电平之间随机变化,从而使画面出现细斑,而人眼对灰度平坦区域的颗粒噪声又很敏感,从而使人主观感觉上图像降质严重。(3)假轮廓图案。假轮廓图案主要是由于量化间隔太大,而图像灰度缓慢变化区域的预测误差信号太少,就会产生像地形图中等高线一样的假轮廓图案。DPCM系统中的图像降质(4)边沿忙乱。边沿忙乱主要是在电视图像DPCM编码中出现,因为不同帧在同一像素位置上量化噪声各不相同,黑白边沿在电视监视上将呈现闪烁跳动犬齿状边沿。(5)误码扩散。任何数字信道中总是存在着误码。在DPCM系统中,即使某一位码有差错,对图像一维预测来讲,将使该像素以后的同一行各个像素都产生差错;而对二维预测,误码引起的差错还将扩散到以下各行。这样将使图像质量大大下降,其影响的程度取决于误码在信号代码中的位置,以及有误码的数码所对应的像素在图像中的位置。6.4.4 预测编码的Matlab实现 下面的代码(课本157页)将使用简化预测公式进行线性预测编码。这里以灰度图像为例,通过使用Matlab的文件读写函数fopen、fwrite和fclose,将计算所得的误差以最小的位深度(在Matlab中为8bit)写入文件中。对于真彩色图像,只需对3个颜色通道调用以下代码即可。源程序(略)显然,上面代码实现的压缩比为4:1(即双精度数据位数与8位符号整数位数的比值)。调用以下代码对以上预测编码文件进行解码,并通过显示原始文件和解压后的文件比较压缩效果。预测编码的Matlab实现 原始图像如图(a)所示,编码后的解码图像如图(b)所示,2幅图像稍有差别。6.5 比特面编码 比特面编码是一种非常简单的编码方法,它把灰度图像的编码转换为对各比特面的二值编码。假如灰度图像为8bit/像素,将每个像素的第j个比特抽取出来,就得到一个称为比特面的二值图像,于是图像完全可以用一组共个比特面表示,对灰度图像的编码转化为对比特面的编码。通常将每个比特面分为不重叠的mn个元素的子块,然后再进行二值编码。右图是对8bit的灰度图像的比特面分解(以一个像素为例)情况。比特面编码 1、次最佳方块编码、次最佳方块编码 统计分析表明,比特平面中有2种结构的方块经常出现:mn个全1和全1,并且前者出现的概率多于后者,于是可得下面的次最佳方块编码方案。全0子块:码字为0 全1子块:码字为11 其他情况:码字为10 xxxx xxxx为将子块的比特内容直接输出,故又称为直接编码。这种编码方案的平均码长为L。L=P(0;n,m)+2P(1;n,m)+(2+nm)1-P(0;n,m)-p(1;n,m)=nm1-P(0;m,n)-P(1;n,m)+2-P(0;n,m)式中,P(0;n,m)和 P(1;n,m)分别为mn个全和全子块出现的概率。比特面编码2、用格雷码表示像素亮度、用格雷码表示像素亮度 通常,数字化后像素的电平值都是PCM自然二进制码,这种码的特点是高位最重要的比特面图像简单,并适用于上述方块编码,但重要性稍差的比特面图像相当复杂,尤其是低位最不重要的比特面噪声为主要成分,因而不适宜用方块编码。这样,由高位个最重要的比特面获得的压缩效益将被其他几个低位比特面所抵消,其原因在于对于PCM编码,若相邻像素的灰度值变化了一个等级,其码字也可能相差好几个比特。例如,灰度图像中相邻像素的值分别为63和64,其自然二进制码为和,相邻像素间只发生了细微的灰度变化,却引起比特面的突变。因此,常常采用格雷(Gray)码表示像素的灰度值。由于格雷码的特点是码距为,两个相邻值的格雷码之间只有一个比特是不同的,使得比特面上取值相同的面积增大,即P(0;n,m)和 P(1;n,m)增大,因而增大了压缩比。下表列出了部分自然二进制码和格雷码的对照。比特面编码部分自然二进制码和格雷码的对照 自然二进制码 格雷码 自然二进制码 格雷码 000 000 100 110 001 001 101 111 010 011 110 101 011 010 111 100比特面编码 3.视觉心理编码视觉心理编码 视觉心理编码是指允许恢复图像有一定的失真,只要视觉感觉不出或可以容忍。具体做法是把子块内不超过K个1的子块视为全0子块,而把不超过K个0的子块视为全1子块,这样也等效于取值相同的面积增大,即 P(0;n,m)和 P(1;n,m)增大,因而也提高了压缩比。4.方块尺寸的选择方块尺寸的选择 在压缩比 Cr的表示中,它与n,m的关系是复杂的。当nm增加时,1/nm减少,但很可能导致 P(0;n,m)和 P(1;n,m)减少。5.逐渐浮现的编码传输逐渐浮现的编码传输 将图像从最高到最低位的次序依次传送比特面,接收端将各比特面累加可以得到由粗到细的显示图像,这种编码传输方式是一种简单的逐渐浮现编码方式。如果对每一个比特面采用前述的比特面编码方法,还可以提高传输速率。6.6 变换编码 变换编码就是对图像数据进行某种形式的正交变换,并对变换后的简单数据进行编码,从而达到数据压缩的目的。无论是对单色图像、彩色图像、静止图像,还是运动图像,变换编码都能够获得较好的压缩比。变换编码的基本过程是将原始图像分块,然后对每一块进行某种形式的正交变换;也可以简单地理解为将小块图像由时域变换到频域,使变换图像的能量主要集中在直流分量和低频分量上。在误差允许的条件下,用直流和部分低频分量来代表原始数据,从而达到数据压缩的目的。变换编码采用的正交变换种类很多,比如傅里叶变换、沃尔什哈达玛变换、哈尔变换、斜变换、余弦变换、正弦变换,还有基于统计特性的KL变换等。KL变换后的各系数相关性小,能量集中,压缩生成的误差最小;但是计算复杂,执行速度慢。由于离散余弦变换(DCT变换)与KL变换性能最接近,而且具有易于硬件实现的快速算法,所以得到了广泛的应用。变换编码 用DCT变换实现图像的压缩编码需经过变换、压缩和编码3个步骤。二维DCT变换编码压缩和解压缩的框图如图所示。6.7 编码技术的新进展第二代编码方法 20世纪80年代后期和90年代初,人们结合人类的视觉生理和心理特性、模式识别、计算机视觉、神经网络、小波分析和分形几何学等理论,开始探索图像压缩编码的新途径,称为第二代图像编码技术。第二代编码方法并不局限于Shannon信息论框架,而是充分利用视觉的生理和心理特性,以及信源的各种性质以获得更高的压缩比。1.分裂合并法(分裂合并法(split and merge)这类编码方法的特点是先要对图像进行预处理,一般是根据视觉的敏感性将图像数据进行分割。这种分割可以按空域和频域两种方法进行。空域中一般先将图像分割为纹理和边缘轮廓两个图像,两者各采用不同的编码方法,解码后再合并。编码技术的新进展第二代编码方法2.分形编码方法分形编码方法(fractal encoding)分形图像编码是在Mandelbort分形几何理论的基础上发展起来的一种编码方法。分形几何是欧式几何的扩展,是研究不规则图形和混沌运动的一门学科。3.基于模型的编码(基于模型的编码(modelbased coding)该方法利用了计算机视觉和计算机图形学的方法和理论,是一种很有前途的低比特率编码方法。其基本出发点是在编、解码两端分别建立起相同的模型。4.小波编码(小波编码(wavelet coding)小波图像分解是一个多分辨率分解,实际上是属于子带分解的一个特例。因此,利用小波变换对图像进行压缩的原理与子带编码方法是很相似的。6.8 静止图像压缩编码标准 图像编码技术的发展给图像信息的处理、存储、传输和广泛应用提供了可能性,但要使这种可能性变为现实,还需要做很多工作。因为图像压缩编码只是一种基本技术,所以只能把待加工的数据速率和数字图像联系起来。然而数字图像存储和传输在压缩格式上需要国际广泛接受的标准,使不同厂家的各种产品能够兼容和互通。目前,图像压缩标准化工作主要由挂机标准化组织(ISO)、国际电工委员会(IEC)和国际电信联盟(ITUT)进行,在他们的主持下形成的专家组征求一些大的计算机及通信设备公司、大学和研究机构所提出的建议,然后以图像质量、压缩性能和实际约束条件为依据,从中选出最好的建议,并在此基础上作出一些适应国际上原有的不同制式的修改,最后形成相应的国际标准。6.8.1 JPEG标准JPEG标准的目标和适应性如下所述。(1)适用于任何连续色调的数字图像,对彩色空间、分辨率、图像内容等没有任何限制。(2)采用先进的算法,图像的压缩保真度可在较大范围内调节,可以根据应用情况进行选择。(3)压缩/还原的算法复杂度适中,使软件实现时(在一定处理能力的CPU上)能达到一定的性能,硬件实现时成本不太高。(4)有以下多种操作模式可供设计和使用时选择:JPEG标准 无损压缩编码模式。这种模式保证准确恢复数字图像的所有样本数据,与原数字图像相比不会产生任何失真。基于DCT的顺序编码模式。它以DCT变换为基础,按照从左到右、从上到下的顺序对原图像数据进行压缩编码。图像还原时,也是按照上述顺序进行。基于DCT的累进编码模式。它也以DCT变换为基础,但使用多次扫描的方法对图像数据进行编码,以由粗到细逐步累加的方式进行。解码时,重建图像的过程也是如此,效果与基于DCT的累进编码模式类似,但处理更复杂,压缩比可更高一些。基于DCT的分层编码模式。它以多种分辨率进行图像编码,先从低分辨率开始,逐步提高分辨率,直到与原图像分辨率相同为止。解码时,重建图像的过程也是如此,效果与基于DCT的累进编码模式类似,但处理等复杂,压缩比可更高一些。JPEG标准1 无损压缩编码无损压缩编码 为了满足某些应用领域的要求,如传真机、静止画面的电话电视会议等,JPEG选择了一种简单的线性预测技术,即DPCM作为无损压缩编码的方法。这种方法简单、易于实现,重建的图像质量好,其编码器如图所示。JPEG标准 图中,预测器的3邻域预测模型如图6.14所示,以A、B、C分别表示当前取样点X的3个相邻点a、b、c的取样值。然后,预测值与实际值之差再进行无失真的熵编码,编码方法可选用霍夫曼法和二进制算术编码。JPEG标准2.基于基于DCT的顺序编码模式的顺序编码模式 基于DCT的顺序编码模式是,先对源图像中的所有88子图像进行DCT变换;然后再对DCT系数进行量化,并分别对量化以后的系数进行差分编码和游程长度编码;最后再进行熵编码。整个压缩编码过程如图所示。JPEG标准 下图表示基于DCT的顺序解码过程。这2个图表示的是一个单分量(如图像的灰度信息)的压缩编码和解码过程。对于彩色图像,可以看作多分量进行压缩和解压缩过程。JPEG标准 整个压缩编码的处理过程大体分成以下4个步骤。(1)离散余弦变换 JPEG采用88大小的子图像块进行二维的离散余弦变换。在变换前要将数字图像采用数据从无符号整数转换到带正负号的整数,即把范围为0,28-1的整数映射为-2(8-1)-1,28-1范围内的整数。这时的子图像采样精度为bit,以这些数据作为DCT的输入,在解码器的输出端经IDCT后,得到一系列88图像数据块,并须将其位数范围由-2(8-1)-1,28-1再变回到0,28-1 范围内的无符号整数,才能重构图像。DCT变换可以看作是把88的子图像块分解为64个正交的基信号,变换后输出的64个系数就是这64个基信号的幅值,其中第个是直流系数,其他63个都是交流系数。JPEG标准(2)量化 DCT变换输出的数据F(u,v)还必须进行量化处理。这里所说的量化并非A/D转换,而是指从一个数值到另一个数值范围的映射,其目的是为了减少DCT系数的幅值,增加零值,以达到压缩数据的目的。量化的作用是在图像质量达到一定保真度的前提下,忽略一些次要信息。由于不同频率的基信号(余弦函数)对人眼视觉的作用不同,因此可以根据不同频率的视觉范围值来选择不同的量化步长。通常人眼总是对低频成分比较敏感,所以量化步长较小;对高频成分人眼不太敏感,所以量化步长较大。量化处理的结果一般都是低频成分的系数比较大,高频成分的系数比较小,甚至大多数是0。量化处理是压缩编码过程中图像信息产生失真的主要原因。JPEG标准(3)DC系数的差分编码与AC系数的游程长度编码 64个DCT系数中,DC系数实际上等于源子图像中64个采样值的均值,源图像是被划分成许多88子图像进行DCT变换处理的,相邻子图像的DC系数有较强的相关性。JPEG把所有子图像量化以后的DC系数集合在一起,采用差分编码的方法表示,即用两相邻的DC系数的差值(j=DCj-DCj-1)来表示。(4)熵编码 经过以上转换后的符号通过熵编码过程进一步压缩。JPEG建议的熵编码方法有两种,一种是霍夫曼编码;另一种是算术编码;前者使用霍夫曼码表,而后者使用算术码的条件码表。JPEG标准3 基于基于DCT的累进编码模式的累进编码模式 累进编码模式与压缩编码的算法相同,但每个图像分量的编码要经过多次扫描才能完成,每次扫描均传输一部分DCT量化系数。第一次扫描只进行粗糙的压缩,以很快的速度传送出粗糙的图像,接收方据此可重建一幅质量较低但尚可识别的图像。在随后几次的扫描中再对图像做较细的压缩处理,这时只传送增加的一些信息,接收方收到后把可重建图像的质量逐步提高。这样逐步累进,直到全部图像信息处理完毕后为止。为实现累进编码的操作模式,必须在图6.14中量化器的输出与熵编码的输入之间增添缓冲存储器,用来存放一幅图像量化后的全部DCT系数值;然后对缓冲器中存储的DCT系数进行多次扫描,分批进行熵编码。JPEG标准累进编码的操作方式可以有2种做法。(1)频谱选择法 频谱选择法(spectral selection)指每一次扫描DCT系数时,只对64个DCT系数中的某些频段的系数进行压缩编码和传送。随后进行的扫描中,再对余下的其他段进行编码和传送,直到全部系数都处理完毕为止。(2)连续逼近法 连续逼近法(successive approximation)指沿着DCT系数由高位到低位的方向逐渐累进编码。例如,第一次扫描只取高n位进行编码和传送,然后在随后的几次扫描中,再对剩余的位数进行编码和传送。JPEG标准4基于基于DCT的分层编码模式的分层编码模式 分层编码的操作模式是把一幅原始图像的空间分辨率分成多个低分辨图像进行“锥形”编码的方法。例如,水平方向和垂直方向分辨率均以 2n的倍数改变,如图所示。JPEG标准分层编码的处理过程如下:(1)把原始图像的分辨率分层降低。(2)对已降低分辨率的图像(可看成小尺寸图像)采用无失真预测编码、基于DCT的顺序编码或基于DCT的累进编码中任何一种方式进行压缩编码。(3)对低分辨率图像进行解码,重建图像。(4)使用插值、滤波的方法,使重建图像的分辨率提高至下一层图像分辨率的大小。(5)把升高分辨率的图像作为原始图像的预测值,将它与原始图像的差值采用3种方式中的任何一种进行编码。(6)重复上述步骤(3)、(4)、(5),直到图像达到原图像的分辨率为止。JPEG标准5 JPEG实现实现 JPEG标准规定,JPEG算法结构由3个主要部分组成。(1)独立的无损压缩编码。采用线性预测编码和霍夫曼编码(或算术编码),可保证重建图像与原始图像完全一致(均方误差为0)。(2)基本系统。提供最简单的图像编码/解码能力,实现图像信息的有损压缩,对图像主观评价能达到损伤难以觉察的程度。采用了88 DCT变换线性量化和霍夫曼编码等技术,只有顺序操作模式。(3)扩充系统。它在基本系统的基础上再扩充一组功能