简述JPEG静态图象压缩编码的过程及其实现技术
发布网友
发布时间:2022-04-21 06:31
我来回答
共1个回答
热心网友
时间:2023-11-04 17:22
不是吧。。。。啥专业?
10、详述JPEG静态图象压缩编码原理及实现技术。
答:JPEG是由国际电报咨询委员会(CCITT)和国际标准化协会(OSI)联合组成的一个图象专家小组开发研制的连续色调、多级灰度、静止图象的数字图象压缩编码方法。JPEG适于静止图象的压缩,此外,电视图象序列的帧内图象的压缩编码也常采用JPEG压缩标准。JPEG数字图象压缩文件作为一种数据类型,如同文本和图形文件一样地存储和传输。基于离散余弦变换(DCT)的编码方法是JPEG算法的核心内容。算法的编解码过程如教材136页图4.25-4.26所示。编码处理过程包括原图象数据输入、正向DCT变换器、量化器、熵编码器和压缩图象数据的输出,除此之外还附有量化表和熵编码表(即哈夫曼表);接收端由信道收到压缩图象数据流后,经过熵解码器、逆量化器、逆变换(IDCT),恢复并重构出数字图象,量化表和熵编码表同发送端完全一致。编码原图象输入,可以是单色图象的灰度值,也可以是彩色图象的亮度分量或色差分量信号。DCT的变换压缩是对一系列8*8采样数据作块变换压缩处理,可以对一幅像,从左到右、从上到下、一块一块(8*8/块)地变换压缩,或者对多幅图轮流取8*8采样数据块压缩。解码输出数据,需按照编码时的分块顺序作重构处理,得到恢复数字图象。
具体的实现技术如下:
(1)首先把一幅图象分8*8的子块按图中的框图进行离散余弦正变换(FDCT)和离散余弦逆变换(IDCT)。
在编码器的输入端,原始图象被分成一系列8*8的块,作为离散余弦正变换(FDCT)的输入。在解码器的输出端,离散余弦逆变换(IDCT)输出许多8*8的数据块,用以重构图象。8*8 FDCT和8*8 IDCT数学定义表达式如下:
离散余弦正变换(FDCT)可看作为一个谐波分析仪,把离散余弦逆变换(IDCT)看作一个谐波合成器。每个8*8二维原图象采样数据块,实际上是64点离散信号,该信号是空间二维参数x和y的函数。FDCT把这些信号作为输入,然后把它分解成64个正交基信号,每个正交信号对应于64个二维(2D)空间频率中的一个,这些空间频率是由输入信号的频谱组成。FDCT的输出是64个基信号的幅值(即DCT系数),每个系数值由64点输入信号唯一地确定,即离散余弦变换的变换系数。在频域平面上变换系数二维频域变量u和v的函数。对应于u=0,v=0的系数,称做直流分量(DC系数),其余63个系数称做交流分量(AC系数)。因为在一幅图象中像素之间的灰度或色差信号变化缓慢,在8*8子块中像素之间相关性很强,所以通过离散余弦正变换处理后,在空间频率低频范围内集中了数值大的系数,这样为数据压缩提供了可能。远离直流系数的高频交流系数大多为零或趋于零。如果FDCT和IDCT变换计算中计算精度足够高,并且DCT系数没有被量化,那么原始的64点信号就能精确地恢复。
(2)量化
为了达到压缩数据的目的,对DCT系数F(u,v)需作量化处理。量化处理是一个多到一的映射它是造成DCT编解码信息损失的根源。在JPEG标准中采用线性均匀量化器。量化定义为,对64个DCT变换系数F(u,v)除以量化步长Q(u,v)后四舍五入取整。即量化器步长是量化表的元素,量化表元素随DCT变换系数的位置而改变,同一像素的亮度量化表和色差量化表不同值,量化表的尺寸也是64,与64个变换系数一一对应。量化表中的每一个元素值为1至255之间的任意整数,其值规定了对应位置变换系数的量化器步长。在接收端要进行逆量化,逆量化的计算公式为:
不同频率的余弦函数对视觉的影响不同,量化处理是在一定的主观保真度图像质量的前提下,可据不同频率的视觉阈值来选择量化表中的元素值的大小。根据心理视觉加权函数得到亮度化表和色度量化表。DCT变换系数F(u,v)除以量化表中对应位置的量化步长,其幅值下降,动态范围变窄,高频系数的零值数目增加。
(3)熵编码
为进一步达到压缩数据的目的,需对量化后的DC系数和行程编码后的AC系数进行基于统计特性的熵编码。64个变换系数经量化后,坐标u=v=0的值是直流分量(即DC系数)。DC系数是64个图像采样平均值。因为相邻的8×8块之间有强的相关性,所以相邻块的DC系数值很接近,对量化后前后两块之间的DC系数差值进行编码,可以用较少的比特数。DC系数包含了整个图像能量的主要部分。经量化后的63个AC系数编码时从左上方AC(u=7,v=7)开始,沿箭头方向,以“Z”字形行程扫描,直到AC(u=7,v=7)扫描结束。量化后特编码的AC系数通常有许多零值,沿“Z”字形路径行进,可使零AC系数集中,便于使用行程编码方法。63个AC系数行程编码和码字,可用两个字节表示。JPEG建议使用两种熵编码方法:Huffman编码和自适应二进制算术编码。熵编码可分成两步进行,首先把DC和AC系数转换成一个中间格式的符号序列,第二步是给这些符号赋以变长码字。
参考资料:http://www.sytvu.cn/lwt/work%204.htm