当前位置:
文档之家› 基于DCT的JPEG图像编解码概述
基于DCT的JPEG图像编解码概述
率分量的大小。在变换后系数矩阵的右下角,高频系数几乎 趋近于0。图2描绘了DCT变换块系数分布情况。 DC DC 垂直方向
低频
中频
水 平 方 向
高频
对 角 线
方 向
图2 DCT系数频带和方向信息
2.2 量化 JPEG是一种利用了量化的图像有损压缩。JPEG的编码过程 对原始的图像数据作离散余弦变换,然后对离散结果进行量化并 作熵编码。JPEG算法的第二步是量化处理,这里DCT输出利用 同维数的整数矩阵进行点状处理,基本JPEG的“损耗” 特性就 是由量化过程产生的。通过剔除图像中的不必要的信息,量化完 成JPEG主要压缩部分。因为图像在特定位置通常会由较低空间频 率改变,并且人类倾向于忽略高空间频率改变,所以量化可以过 滤掉很多这类因素。在量化过程中,系数量化过程可通过选择合 适的量化因子完成,量化值越高,系数就越接近零。量化损耗是 由于它的值总是要取整而造成的,这也是量化因子越大,丢失的 信息就越多的原因过量化位数的选择加以控制。 JPEG的色度量化表与亮度量化表不尽相同(见表1和表2)。从 量化表中可以看出各变换系数的量化间隔是不一样的。对于低频 分量,量化间隔小,量化误差也会较小,对于高频分量,因为它 只影响图像的细节,从整体上看它没有低频分量那么重要,因此
(1)基于FFT的快速算法(直接实现算法)。该算法的程序代码如下: IMG = imread( ‘handshake. tif’) ; %读入图像 I = rgb2gray( IMG) ; %转换成灰度图像 J = dct2( I) ; %对I进行二维DCT colormap( jet(256) ) ; J( abs( J) < 10) = 0; %将DCT变换值的绝对值小于10的 元素值设为0 K = idct2( J) ; %DCT逆变换 figure; subplot(1,2,1 ) ; imshow( I,[0, 255]) ; title( ‘原始图像’) ; %显示原始图像 subplot(1,2,2) ; imshow(K,[0,255]) ; title('IDCT·反变换图像') ; %显示IDCT反变换后的图像
在Matlab中运行程序后,图3给出了原始图像和重构后图像的 对比图。从IDCT反变换得到的图像可以看出,原始图像和重构后 的图像在视觉效果上几乎一模一样,用基于FFT的快速算法能达 到令人满意的效果,在图像做DCT变换后,图像数据压缩到原始 数据的15.11%左右,压缩比高。
原始图像
IDCT反变换图像
图3 直接实现算法—原始图像和重构后图像对比
(2) DCT变换矩阵算法(间接实现算法)。该算法的程序代码如下: IMG = imread( ‘handshake. tif’) ; %读入图像 N = 8; %子块的大小,可为4,8,16 I = rgb2gray( IMG) ; %转换成灰度图像 I = im2double( I) ; %转换为双精度型 [C, R] = size( I) ; %C: 列数,R: 行数 C = floor( C /N) * N; %使列数为N的倍数 R = floor( R /N) * N; %使行数为N的倍数 IZ = zeros( C, R) ; IZ = I(1 : C, 1 : R) ; %包含X个N* N的大小 T = dctmtx( N) ; %产生二维DCT变换矩阵 %计算二维 DCT,矩阵T及其转置是DCT函数P1*x*P2的参数 %二值掩膜,用来压缩DCT系数,只留下DCT系数中左上角的 10个系数 B=blkproc(IZ,[N, N],'P1*x*P2',T,T'); %x是待处理 的N*N矩阵,P1对应T,P2对应T',T'是T的转置矩阵
基于DCT的JPEG图像编解码
Name: id: Name: id:
1 课题背景 2 JPEG静止图像解压缩的基本原理 2.1 DCT变换 2.2 量化 2.3 熵编码 3 matlab仿真实现
1 课题背景
随着信息技术的发展,图像信息被广泛应用于多媒体通信和 计算机系统中,但是图像数据的一个显著特点就是信息量大。 具有庞大的数据量,如果不经过压缩,不仅超出了计算机的存 储和处理能力,而且在现有的通信信道的传输速率下,是无法 完成大量多媒体信息实时传输的,因此,为了更有效的存储、 处理和传输这些图像数据,必须对其进行压缩,因此有必要对 图像压缩编码进行研究。由于组成图像的各像素之间,无论是 在水平方向还是在垂直方向上都存在着一定的相关性,因此只 要应用某种图像压缩编码方法减少这种相关性,就可以达到压 缩数据的目的。
2 JPEG静止图像解压缩的基本原理
JPEG提出的JPEG标准是为连续色调图像的压缩提供的公共 标准。连续色调图像并不局限于单色调(黑白)图像,该标准可适 用于各种多媒体存储和通信应用所使用的灰度图像、摄影图像及 静止视频压缩文件。 JPEG 标准还提出 : ①必须将图像质量控制在可视保真度高的范围内,同时编码器 可被参数化,允许设置压缩或质量水平。 ②压缩标准可以应用于任何一类连续色调数字图像,并不应受 到维数、颜色、画面尺寸、内容和色调的限制。 ③压缩标准必须从完全无损到有损范围内可选,以适应不同的 存储CPU和显示要求。 图像压缩编码方法从压缩编码算法原理上可以分为无损压缩编 码、有损压缩编码、混合编码方法。而文中介绍的JPEG标准就 是一种混合编码方法,既有损的压缩编码又有有损的压缩编码。 有损压缩方法是以DCT变换为基础的压缩方法,其压缩率比较
3 Matlab 仿真实现
Matlab是一种将数值分析、矩阵计算、科学数据可视化以及非 线性动态系统的建模和仿真等诸多强大功能集成于一体的科学计 算软件。对于 DCT 变换的矩阵实现,它具有运算快速、语言简 单、实现方便的优点。 DCT变换在Matlab中,主要有两种实现方法:一是基于FFT的快 速算法,由于这种算法是直接利用DCT变换公式来实现的,又被 称为直接实现算法;二是DCT变换矩阵算法,这种方法是根据分块 矩阵的思路实现,又被称为间接实现算法。 根据DCT变换在Matlab中的两种实现方法,将一幅图像分别进 行压缩处理,实现过程具体如下。
Mask =[1 1 1 1 0 0 0 0 11100000 11000000 10000000 00000000 00000000 00000000 0 0 0 0 0 0 0 0 ; %此处N = 8 B2 = blkproc(B,[N N],‘P1*x’,mask); %只保留DCT变 换的10个系数 I2 = blkproc(B2,[N N], 'P1*x*P2',T',T); %重构图像 subplot(1,2,1 ) ; imshow(IZ); title( ‘原始图像’) ; %显示原始图像 subplot(1,2,2) ; imshow(I2) ; title( '压缩重构后的图像') ; %显示压缩重构后的图像
5
7 12 18 23 33 37 48
ห้องสมุดไป่ตู้
6
13 17 24 32 38 47 49
14
16 25 31 39 46 50 57
15
26 30 40 45 51 56 58
27
29 41 44 52 55 59 62
28
42 43 53 54 60 61 63
表2 JPEG的zigzag系数排列顺序
2.3 熵编码 DCT最后处理的步骤是熵编码,目的是在统计特征基础上通 过对量化DCT系数进一步压缩,得到额外的无损压缩。根据信息 论的原理,可以找到最佳数据压缩编码的方法,数据压缩的理论 极限是信息熵 。如果在编码过程中不损失信息量,即要求保持信 息熵,则这种编码叫做熵编码。在编码之前,需要把二维变换的 变换系数矩阵转换为一维序列。这样做的目的是为后续的熵编码 做准备,即之字形扫描。熵编码将之字形量化系数序列转换成中 间符号序列,然后将这些符号转换成没有外部确定边界的数据流 ,即最终编码后的图像数据流文件。JPEG的基本系统的熵编码 采纳了平均压缩比最高的编码哈夫曼编码,其理论依据是变字长 编码理论。在变字长编码中,编码器的编码输出码字是长度不等 的码字,按照编码输入信息符号出现的统计概率,给输出码字分 配不同的字长,出现概率极高的分配较短的码字,反之出现概率 较低的则分配较长的码字,从而得到较好的压缩效果 。
F(u,v) 输入图像
DCT变换
量 化 器
[F(u,v)]Q
熵编 码器
压缩后图像
f(x,y) 8*8像素块
量化表 Q(u,v)
Huffman表
图1(a)
JPEG编码框图
F’(u,v)
量 化 器
f’(x,y)
DCT 反变换
压缩后图像
熵编码器
解压缩后图像
f(x,y) 8*8像素块
Huffman表
量化表
高,是JPEG 标准的基础。无损压缩方法又称预测压缩方法, 是以二维DPCM为基础的压缩方式,解码后能完全精确地恢 复原图像采样值,其压缩比低于有损压缩方法。 从图1中注意到图中的编码器负责降低输入图像的编码、 像素间和心理视觉冗余。在编码处理的第一阶段,离散余弦 变换器将输入图像变换成一种(通常不可见的) 格式,以便减 少像素间的冗余。在第二阶段,量化器根据预定义的保真度 准则来减少映射变换器输出的精确性,以便试图去除心理视 觉冗余数据。这种操作是不可逆的,当进行无损压缩时,则 必须将其忽略。在第三个即最后一个处理阶段,熵编码器根 据所用的码字对量化器输出和离散余弦变换输出创建码字(减 少编码冗余)。
Q(u,v)
图1(b)
JPEG解码框图
图1 基于DCT的JPEG编/解码原理框图
2.1 DCT变换 DCT变换利用了傅里叶变换的对称性,变换后的结果只包含 余弦项。虽然变换的种类很多,比如DCT、DFT(Discrete Fourier Transform,离散傅里叶变换) 、KLT(Karhunen Loeve Transform,卡洛变换) 、WHT(Walsh-Hadamard,沃尔什-哈达 玛变换)等,但从变换后能量集中从优到劣的排列顺序KLT、 DCT、DFT、WHT和运算量从小到大的排列顺序WHT、DCT、 DFT、KLT来看,DCT的压缩能力与KLT最佳变换相近,计算量 适中,性能优于DFT、WHT等其他变换。同时,相对于KLT而 言,DCT具有固定的基和物理含义,更易于实现,因此DCT变 换成为变换编码的首选。 输入端把原始图像分成8*8像素块(Block)之后进行DCT变换 ,目的是去除图像数据的空间冗余,并实现能量集中。DCT 变