【vc++精品源码栏目提醒】:网学会员--在 vc++精品源码编辑为广大网友搜集整理了:基于DCT的JPEG图像压缩及实现 - 电子电信绩等信息,祝愿广大网友取得需要的信息,参考学习。
2010血 青海师范大学学报(自然科学版) 2010 第3期 Journal of Qinghai Normal University(Natural Science) NO.3 基于DCT的JPEG图像压缩及实现 吴术路 (青海广播电视大学,青海西宁810008) 擒要:对于图像来说,如果需要进行快速或实时传输,就要对图像进行压缩,而随着网络的发展,图像压缩技术越来越被人 们所关注.DCT变换是图像压缩的一项重要技术.本文主要对基于EXIT变换的JPEG图像压缩进行研究,并用Matlab进行 了算法仿真.其方法简单、速度快且误差小,大大提高了图像压缩的效率. 关键词:DCT变换;图像压缩;Matlab 中图分类号:TP301.6 文献标识码:A 文章编号:1001—7542{2010)03—0039—03 对于图像来说,如果需要进行快速或实时传输,就需要对图像进行压缩,图像压缩研究的就是寻找 高压缩比的方法且压缩后的图像要有合适的信噪比,在压缩传输后还要恢复原信号.图像压缩可分为有 损压缩和无损压缩,尽管人们总希望能对图像进行无损压缩,但通常有损压缩的压缩比比无损压缩的 高,更易于传输.基于离散余弦变换(DCT,Discrete Cosine Transform)的图像压缩是有损压缩算法,它 应用于绝大多数图像压缩场合,并且它能在图像的压缩操作中获得较高的压缩比,压缩后还原得到的图 像与原始图像相比较,重构图像与原图像的视觉效果基本相同,因而得到了广泛的应用.因此,本文以基 于DCT的二维JPEG图像压缩为主要研究内容,通过软件仿真实现分析实验结果得出结论. 1二维离散余弦变换 离散余弦变换(Discrete Cosine Transform),简称DCT变换.是一种与傅立叶变换紧密相关的数学 运算.在傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将 其离散化可导出余弦变换,因此称之为离散余弦变换.余弦变换实际上是傅立叶变换的实数部分,其主 要用于图像的压缩,目前国际压缩标准的JPEG格式中就用到了DCT变换. 1.1 DCT编码算法表述 在编码过程中,首先将输入图像颜色空间转换后分解为8×8大小的数据块,然后用正向二维DCT 把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即8×8空域图像子块的平均值, 其余的63个是交流(AC)系数,接下来对DCT系数进行量化,最后将变换得到的量化的DCT系数进行 编码和传送,形成压缩后的图像格式.在解码过程中,先对已编码的量化的DCT系数进行解码,然后使 用二维DCT反变换求逆量化并把DCT系数转化为8×8样本像块,最后将操作完成后的块组合成一个 单一的图像.这样就完成了图像的压缩和解压过程.研究表明,DCT将8×8图像块变换为频域时数值 集中在左上角,即低频分量都集中在左上角,高频分量分布在右下脚.而低频部分包含了图像大部分信 息,相比之下,高频部分包含的信息量较少.为了压缩数据,往往采用忽略高频系数的办法.而较低频系 数的修改对原始数据的影响较小. 基于DCT的压缩编码属于有损压缩,通过去除图像本身的冗余量和人的视觉冗余量来达到压缩 数据的目的,主要经过以下几个步骤: (1)正向离散余弦变换(DCT). (2)量化(quantization). 收稿日期:2010一05—1Z 作者简介:吴术路(1964一),男(汉族),浙江安吉人,青海师范大学在职硕士研究生,主要从事计算机教学.万方数据 40 青海师范大学学报(自然科学版) 2010皇 (3)Z字形编码(Zigzag scan). (4)使用差分脉冲编码调制(differential pulse code modulation,DPCM)对直流系数进行编码. (5)使用行程长度编码(run—length encoding,RLE)对交流系数进行编码.、 (6)熵编码(entropy coding). (7)组成位数据流. 1.2二维DCT变换 f(x神…(掣)cOX(掣) 二维离散余弦变换的正变换公式为: )=南c(班(可)∑∑ F(u,v):南c五c五薹N--1薹N-I 1’ f=0 v=O ,y)cox(型篆唑)c(丛萧业) _‘’ _1’ 在图像的压缩编码中,N一般取8. C(u)C(v)F(u,虮。
x(掣)cox(掣) 二维DCT的反变换公式为: f(x,y)一丙1厶N- I己N- 1f(x )一丙厶己 1’z=0 y=0 ,铆)cox(鲤篝产)cox(逊锅业) 一‘’ 一‘’ 以上各式中的系数: C(“),C(”)=圭 √N 当U,口=0 C(“),C(u)一 扁其它 2 MATLAB程序实现及其仿真结果 2.1 Matlab程序 下面程序仿真中把图像划分成8×8的图像,计算它们的DCT系数,并且只保留64个DCT系数中 的10个,占15%.然后对每个图像块利用10个系数进行DCT逆变换来重构图像.仿真程序如下: I—imread(’cameraman.tif’); %输入图像 l—im2double(I); %数据类型转换 T—dctmtx(8); % 计算二维离散DCT矩阵 dct=@(x)T* x*T’; % 设置函数句柄 B=blkproc(I,〔8 83,dct); % 图像块处理 1 1 1 1 O O O O 1 1 1 O 0 O O O 1 1 O O O 0 0 O 1 O O O O O O O mask== %掩膜 0 0 O O O O O O O O O O O O 0 O O O 0 O O O O O O O O O O O 0 O B2=blkproc(B,〔8 8〕,@(x)mask.*x); %图像块处理 invdct=@(x)T’-K- x*T; %设置函数句柄 12=blkproc(B2,〔8 8〕,invdct); %图像块处理 imshow(I),figure,imshow(12) %显示原始图像和压缩重构图像 2.2仿真结果图 比较原图和重构图像,可以发现,在抛弃85%的DCT系数后,重构图像时并不会因此而带来其画万方数据 第3期 吴术路:基于DCT的JPEG图像压缩及实现 4l 面质量的显著下降. 原始图像压缩里内网像 3实验结果分析 对比压缩前后的图像可知,压缩后的图像稍显模糊,这是因为该压缩算法为有损压缩,压缩后的图 像丢失了原始图像部分数据信息.但由于DCT变换有使图像能量集中在左上方的特性,因此压缩图像 保留了原始图像大部分的图像特征,其视觉效果与原始图像相差不大. 应用MATLAB图像处理工具箱中的相关函数和命令来实现基于DCT的JPEG图像压缩编码理 论算法的压缩方法简单,仿真程序思路清晰,既保证有较高的压缩比,又保证有较好的图像质量. 4结束语 DCT具有算法简单,易于硬件实现等优点,从而广泛应用于图像压缩领域,尤其在高比特率传输条 件下能取得令人满意的压缩效果.然而它在低比特率条件下的“方块效应”成了不容忽视的“瓶颈”缺陷. 原因就在于DCT处理的图像是分块进行的,块与块边界两边的像素相关性不
上一篇:
c_、c++心得笔记1
下一篇:
bc80e7a0-d1f2-4595-b21d-01a76798e87a