970 likes | 1.26k Views
第七章 图像数据压缩. 主要内容 7.1 概述 7.2 无损压缩算法 7.3 有损压缩算法 7.4 变换编码 7.5 混合编码 7.6 国际压缩标准简介 7.7 JPEG 压缩算法. 7.1 概述. 7.1.1 数据压缩编码的重要性 数字图像的数据量非常大 。 1) 彩色视频信息 对于画面的分辨率 640*480 的彩色图像,每秒 30 帧,则一秒钟的数据量为: 640*480*3*30=27.6M 所以播放时, 需要 27.6×8 = 221Mbps 的通信回路 。
E N D
第七章 图像数据压缩 主要内容 • 7.1 概述 • 7.2 无损压缩算法 • 7.3 有损压缩算法 • 7.4 变换编码 • 7.5 混合编码 • 7.6 国际压缩标准简介 • 7.7 JPEG压缩算法
7.1 概述 • 7.1.1 数据压缩编码的重要性 数字图像的数据量非常大 。 1) 彩色视频信息 对于画面的分辨率640*480的彩色图像,每秒30帧,则一秒钟的数据量为: 640*480*3*30=27.6M 所以播放时,需要27.6×8=221Mbps的通信回路。 参考数据:宽带网为512K,电话线为56K。 存储时,1张CD可存640M,则仅可以存放23秒的数据。
7.1 .1 数据压缩编码的重要性 2)传真数据 如果只传送2值图像,以200dpi的分辨率传输,一张A4稿纸的内容的数据量为: 1654*2337*1=3888768bit 按目前14.4K的电话线传输速率,需要传送的时间是:270秒(4.5分)
7.1 .1 数据压缩编码的重要性 两个问题: 1)存储大数据量的图像信息,使存储设备(内存、外存)的存储容量消耗很快。 2)在网络上传输图像时,由于图像信息的数据量太大了,本来就已经非常紧张的网络带宽变得更加不堪重负。 如何用软件的手段来解决硬件上的物理极限。
7.1 .2 数据压缩编码的可能性 • 能进行压缩,是因为图像中存在有各种冗余。 1)数据冗余 数据与信息是不同的概念,数据是信息的载体,相同的信息可以用不同的数据量来表示。 你的妻子,Helen,将于明天晚上6点零5分在上海的虹桥机场接你。 (23*2+10=56个半角字符) 你的妻子将于明天晚上 6点零5分在虹桥机场接你。 (20*2+3=43个半角字符) Helen将于明晚6点在虹桥接你。 (10*2+7=27个半角字符) 结论:只要接收端不会产生误解,就可以减少承载信息的数据量。
7.1 .2 数据压缩编码的可能性 • 描述语言1)“这是一幅 2*2的图像,图像的第一个像素是红的,第二个像素是红的,第三个像素是红的,第四个像素是红的”。 • 由此我们知道,整理图 像的描述方法可以达到 压缩的目的。 2)“这是一幅2*2的图 像,整幅图都是红色的”。
= 8 8 8 24 2 * 2 * 2 2 = 24 16,777,216 2 (248,27,4) (251,32,15) (248,27,4) (248,27,4) 7.1 .2 数据压缩编码的可能性 2)心理视觉冗余 • 图像的视觉冗余 (彩色) 人类视觉分辨率为26,但常用28,就是视觉冗余。
7.1 .2 数据压缩编码的可能性 3空间冗余(象素间冗余) 例: 图像中的“A”是一个规则物体。光的亮度、饱和度及颜色都一样,因此,数据A有很大的冗余。 4.结构冗余 图像有非常强的纹理结构。如草席图结构上存在冗余。 5.知识冗余 图像的理解与某些基础知识有关。 人脸的图像有同样的结构:嘴的上方有鼻子,鼻子上方有眼睛,鼻子在中线上……
7.1.3 图像数据压缩方法的分类 分类方法有很多。按压缩过程中信息有无损失可以将数据压缩方法分为两类: • 有失真压缩(熵压缩) 又称有损压缩,这类压缩的压缩过程是不可逆的,无法完全恢复出原图像,信息有一定的丢失。 • 无失真压缩(冗余压缩、熵编码) 又称为无损压缩,其压缩过程是可逆的,也就是说,从压缩后的图像能够完全恢复出原来的图像,信息没有任何丢失。
7.1.3 图像数据压缩方法的分类 按压缩过程中编码的原理又可以将压缩算法分为:
7.1.4 衡量数据压缩技术好坏的标准 • 三个重要的评价指标: 1. 压缩比大。 2.实现压缩的算法简单、压缩、解压速度快(实时性要求髙)。 3. 恢复效果要好。到底解压缩后图像的质量如何,采用保真度准则来评价。
7.1.5保真度准则 • 保真度准则有两种:客观保真度准则和主观保真度准则。 1.客观保真度准则 以压缩前后图像的误差来度量。具体可以用原图像和压缩后图像之间的均方根误差或压缩后图像的均方根信噪比来度量。
7.1.5保真度准则 1.客观保真度准则 1)设原图像为g(x,y),压缩后恢复的图像为f(x,y)(x,y=0,1…N-1),且每个象素均用m bit表示其灰度,则新旧图像的均方误差为: 相应的均方根误差是:
7.1.5保真度准则 1.客观保真度准则 2)用压缩图像的均方信噪比:如果把压缩后恢复的图像表示成原图像和噪声的叠加,即 : e(x,y)表示编码压缩后新旧图像之间的误差或编码噪声 压缩后图像的均方信噪比 相应的均方根信噪比
7.1.5保真度准则 1.客观保真度准则 3)用f(x,y)的峰值平方与均方噪声之比的均方根,来代替均方根信噪比,作为一种客观保真度的量度 。
7.1.5保真度准则 2.主观保真度准则 通常,被处理的图像最终是让人进行观察,那么用人的视觉来评价图像的质量更有意义。事实上,具有相同客观保真度的不同图像,在人的视觉中可能引起不同的观察效果。这是因为客观保真度准则是一种统计平均意义下的度量准则,对于图像中的细枝末节它是无法反映出来的。
7.1.5保真度准则 2.主观保真度准则 而且人的视觉系统还有许多特殊的性质,例如对光强敏感的对数特性,使得图像暗区的误差比其亮区误差影响更为重要。又如人的视觉系统对灰度突变的特别敏感性,使得发生于图像边缘轮廓附近的误差,比发生于一般背景上的误差对图像质量有着更坏的影响等等。所有这些可能引起视觉明显差异的因素。用客观保真度准则往往是无法表示出来的,因此,根据人的主观感觉来评价图像质量十分必要。
7.1.5保真度准则 主观保真度准则规定为: (1)极好:图像具有极高的质量,和你所想象的一样好。 (2)良好:图像质量高,能供满意的观察,干扰并不令人 讨厌。 (3)通过:图像具有可以接受的质量,干扰并不令人讨 厌。 (4)勉强:图像质量低劣,但你还希望改善它,干扰有些 令人不愉快。 (5)低劣:图像质量很低劣,但还能观看,干扰确实令人 讨厌。 (6)不能用:图像差得无法观看。
7.2 无损压缩算法 • 通过改变图像的描述方式,来实现压缩。常用的有:行程(游长)编码,huffman编码、Fano-Shannon编码、LZW、预测编码(DPCM)等
一、行程编码(RLE编码) • 基本原理: 在一个逐行存储的图像中,具有相同灰度(颜色)值的一些象素组成的序列称为一个行程。将一行中颜色值相同的相邻像素用一个计数值和该颜色值来代替。 • 举例说明:aaaabbbccdeeeeefffffff(共22*8=176 bits) 4a3b2c1d5e7f (共12*8=96 bits)
一、行程编码(RLE编码) • 在传真中的应用: 传真件中一般都是白色比较多,而黑色相对比较少。所以可能常常会出现如下的情况: 600W 3b 100w 12b 4w 3b 200w 因为:512<600<1024 所以:计数值如果均用10bit来表示 10*7=70bit
一、行程编码(RLE编码) • 在传真中的应用: 现在我们就希望对其有一个改善。 白色:10bit,黑色:4bit 600w 3b 100w 12b 4w 3b 200w 所需字节数为: 4*10+3*4=52bit 比原来的方式10*7=70bit减少了18bit
一、行程编码(RLE编码) • 致命弱点:如果图像中每两个相邻点的颜色都不同,用这种算法不但不能压缩,反而数据量增加一倍。 • 图像文件应用:单纯采用行程编码的压缩算法用得并不多,PCX、BMP文件算是其中的二种。 • 行程编码对于仅包含很少几个灰度级的图像,特别是二值图像,比较有效。
二、 Huffman 编码(熵编码) • 信源的熵: 它定义了观察到单个信源符号输出时所获得的平均信息量。 如果信源各符号出现的概率P(Xi)相等,则熵达到最大。
二、 Huffman 编码(熵编码) • 编码的平均码长: 其中ni是符号xi的长度。 可以证明:编码的平均码长满足以下关系: (平均码长的下限是信源的熵)
二、 Huffman 编码(熵编码) • Huffman编码是50年代提出的一种基于统计的无损编码方法,它利用变长的码来使冗余量达到最小。所得到的平均码字长度可以接近信源的熵,因此在变长编码中是最佳的编码方法 。
二、 Huffman 编码(熵编码) • 基本原理: 为了达到更大的压缩率,提出了一种方法,就是将在图像中出现频度大的像素值给一个比较短的编码,将出现频度小的像数值给一个比较长的编码,每个数据的代码各不相同。
二、 Huffman 编码(熵编码) • 举例说明: aaaabbbccdeeeeefffffff(共22*8=176 bits) 4 3 2 1 5 7 编码: f=0 e=10 a=110 b=1111 c=11100 d=11101 11011011011011111111111111100111001110110101010100000000 (共 7*1+5*2+4*3+3*4+2*5+1*5=57 bits) • 问题:怎样给每个数据分配唯一的编码,并使平均码长最短?
二、 Huffman 编码(熵编码) • 通过一个二叉树来编码,使常出现的字符用较短的码代表,不常出现的字符用较长的码代表。静态Huffman编码使用一棵依据字符出现的概率事先生成好的编码树进行编码。而动态Huffman编码需要在编码的过程中建立编码树。
二、 Huffman 编码(熵编码) • Huffman算法的基本步骤 1. 对L个符号按其概率值P从大到小顺序排列,并将每个符号作为一棵树的叶结点 2. 如果没有到根结点,则1)两个概率值最小的结点合并成一个新结点并赋其概率为两子结点概率之和。2)结点到两个子结点的树枝分别赋值1和0 3. 从根结点开始到叶结点,将树枝上的值按顺序组成二进制值,则为该叶结点上符号的Huffman码字。
二、 Huffman 编码(熵编码) 7/22 1 f 1 5/22 e 0 9/22 22/22 0 a 4/22 13/22 1 3/22 1 b 0 6/22 1 2/22 c 0 3/22 1/22 0 d f=11 e=01 a=00 b=101 c=1001 d=1000
二、 Huffman 编码(熵编码) aaaabbbccdeeeeefffffff(共22*8=176 bits) 4 3 2 1 5 7 经过Huffman编码之后的数据为: 00000000101101101100110011000010101010111111111111111 (共 7*2+5*2+4*2+3*3+2*4+1*4=53 bits) 熵: 平均码长:
二、Huffman 编码(熵编码) • Huffman编码在图像压缩中的实现 我们知道,对一幅图像进行编码时,如果图像的大小大于256时,这幅图像的不同的码字就有可能是很大,例如极限为256个不同的码字。 对整幅图直接进行Huffman编码时,小分布的灰度值,就有可能具有很长的编码。 如:100位以上,这样不但达不到压缩的效果反而会使数据量加大,应该如何处理?
二、 Huffman 编码(熵编码) • 常用的且有效的方法是: 将图像分割成若干的小块,对每块进行独立的Huffman编码。例如:分成 的子块,就可以大大降低不同灰度值的个数(最多是64而不是256)。 • 这种编码方法形成的码字是可辨别的,即一个码字不能成为另一码字的前缀。 • Huffman编码对不同的信源其编码效率不同,适合于对概率分布不均匀的信源编码。
三、Fano-Shannon编码 • Huffman编码需要多次排序,当Xi很多时十分不便。 • Fano-Shannon编码更简单。
三、Fano-Shannon编码 1)排序:把X1~ Xn按概率大小从大到小排序。 2)分组:然后分为两组:X1~ Xk、 Xk+1~ Xn使: 3)赋值:给两组分别赋予0和1。 4)重复2)、3)直到每组仅包含一个Xi。
三、Fano-Shannon编码 H=2.14、N=2.2 近熵编码
四、算术编码 • 理论上Huffman编码对信源进行编码可以达到最佳编码效果。但计算机是按“位”进行处理。 例如:设信源由两个符号组成x、y,概率分别为2/3和1/3。最优码长: • 计算机中不可能出现0.585位,只能用1位。Huffman编码结果分别为0和1。对于概率较大的X不能用较短的编码来表示。这是实际编码效果达不到理论压缩比的原因。
四、算术编码 • 算术编码不用一个特定的代码代替一个输入符号。 • 将要处理的数据映射到[0,1)内的一个区间,构造出小于1且大于或等于0的数值,这个值就是这段数据的可译代码。
四、算术编码 • 例如:5符号信源{a1a2a3a4a5},各字符出现的概率和设定的取值范围如下:
四、算术编码 • “范围”给出了字符的赋值区间,这个区间根据字符的概率进行划分(具体把a1、a2、a3、a4、a5分到哪个区间对编码本身没有影响,只要保证编解码器对字符的概率区间有相同定义即可)。
四、算术编码 • 假定: Ns=Fs+Cl*L Ne=Fs+Cr*L 式中:Ns为新子区间的起始位置; Fs为前子区间的起始位置; Cl当前符号的区间左端;Ne为新子区间的结束位置;Fe为前子区间的结束位置;Cr当前符号的区间右端;L为前子区间的长度。
四、算术编码 • 假定输入序列为a1、a2、a3、a2、a4 输入a2时:Ns=Fs+Cl*L=0.2+0.4*0.2=0.28 Ne=Fs+Cr*L=0.2+0.8*0.2=0.36
四、算术编码 • 随着字符的输入,范围越来越小。当序列a1、a2、a3、a2、a4输入完毕后,编码范围为[0.2915,0.2928)。换句话说,这范围内的每一个数值都对应这个序列。可取任意一个值比如: 0.2915即可。 • 解码过程相反,根据概率分配区间表和0.2915可以确定第一个字符为a1,去掉第一个字符的影响,就可以得到第二个字符。 • 这种方法用一个浮点数表示了一个序列。
五、lzw压缩编码 • LZW编码是由Lemple和Ziv提出并经Welch扩充而形成的无损压缩专利技术。在对文件进行编码时,需要生成特定字符序列的表(词典)以及对应的代码。每当表中没有的字符串出现时,就把它与其代码一道存储起来。这以后当该串再次出现时,只存储其代码。实际上,字符串表是在压缩过程中动态生成的,而且由于解压缩算法可以从压缩文件中重构字符串表,因而字符串表也不必存储。 • 词典的大小一般小于4095.因为词典越大表示一个索引所需的字节数越多,有可能会造成反压缩现象。
六、无损预测编码 • 基本思想: 提取每个象素中的新信息并对它们编码来消除象素间的冗余。这里1个象素的新信息定义为该象素的当前或现实值与预测值的差。注意这里正是由于象素间有相关性,所以才使预测成为可能。
六、无损预测编码 • 无损预测编码系统的组成 1个编码器和1个解码器,它们各有1个相同的预测器 。 符号编码器采用变长码对误差进行编码以产生压缩的数据
六、无损预测编码 • 可以提高数据压缩率。主要原因: 误差值与原象素值相比小的多 ,且概率密度函数一般在0点有一个高峰。因此,对误差编码所需要的位数比原来少,压缩率可以进一步提高。 • 解码器根据接收到的变长码重建,并执行下列 操作,恢复原图像。
六、无损预测编码 • 问题:预测器如何设计?即:如何计算 • 一般用前m个象素(上一行、前一列等)的线性组合来进行预测: m是线性预测器的阶, 是预测系数,round是舍入函数 。 n表示的是象素的空间坐标。
六、无损预测编码 • 1-D线性预测: • 2-D线性预测: 是图像从左到右,从上到下进行扫描时所扫描到的先前m个象素的函数。