图像压缩的过程可以概括成图所示的三个步骤,原始图像经映射变换后的数据再经量化器和熵编码器成为码流输出。
(1)映射变换。其目的是通过映射改变图像数据的特性,使之更有利于压缩编码。
(2)量化器。在限失真编码中要对映射后的数据进行量化,若量化是对映射后的数据逐个的进行的,则称标准量化,若量化是成组的进行的,则称矢量量化,量化总会造成某些信息丢失,形成失真,即量化失真或量化噪声,为使失真小,应量化的精细,但压缩比就高不了,这是一对矛盾,应选用恰当的量化级数和量化曲线形状来缓解这对矛盾,量化器的引入是图像编码产生失真的根源,在要求复原图像与原图完全一致的无失真编码器中必须不用量化器,但这样一来,压缩比难以提高,在多数应用中,存在少量失真并不可怕,只要把失真的程
度和性质控制在允许的范围内,也就是把复原图像的主观质量控制在允许的程度内,就可以
在满足应用要求的前提下提高压缩比,值得注意的是,对于同样的量化失真,不同的映射变
换和反变换反映不同性质的复原图像的失真,人眼对某些性质的失真敏感而对另一些性质
的失真不敏感。
(3)熵编码器。这一步是用来消除符号编码冗余度的,它一般不产生失真,理想的情况
是编出的码流的平均码长等于量化后数据的信息熵,常用的编码方法有许多种,例如分组
码、行程码(RLC)和变长码(VLC)、不分组码以及算术码(Arithmatic Coing等)。行程码传输
的是数据行程长度而不是数据本身,例如要传108个0,用行程码是改为传行程码标记和行程长度1080在变长码中最常用的是霍夫曼(Hufman)码,基本原则是对出现概率大的数值用短码来编,对出现概率小的数值用长码来编,从而使平均码长减小。降低码率,在实际编码器中常把RLc和Hufman码结合起来,称为霍夫曼行程码,在H.261,JPEG,啪PEG等国际昧准中用到它,而算术码则用于JPEG,H.263,JBIG等国际标准中。
3) MATLAB仿真实现
根据压缩编码算法,要将一幅灰度图像进行压缩编码,首先把图像分成8×8的像素块,分块
进行DCT变换后,根据标准量化表Es]对变换系数进行量化后,再对直流系数(DC)进行预测编码,然后根据标准的Huffman码表蜘进行熵编码,输出压缩图像的比特序列,实现了图像压缩。在接收端,则经过Huffman熵解码、DC系数和AC系数可变长解码、反量化后,再进行反DCT变换得到重建图像。对一幅图像进行编解码的MATLAB程序流程图:
2、离散余弦变换(DCT)
2.1DCT的定义
DCT变换利用傅立叶变换的性质.采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,