基于JPG标准的图像压缩算法+代码+论文
毕业设计开题报告及论文工作计划表
国内外研究现状、发展动态课题来源、选题依据和背影情况、课题研究目的工程应用价值
随着多媒体技术的快速发展,静止图像的应用越来越广泛。它的应用主要集中在图像的存储和图像的传输两方面,从具体应用中我们可以发现静止图像占用了越来越多的资源。在这样的背景条件下,静止图像的压缩成为了一个研究的热点。
目前静止图像的压缩算法以JPEG(Joint Photographic Experts Group)和JPEG2000为主。
JPEG是第一个被广泛接受的单色和彩色静止图像压缩标准,它的名字源于“Joint Photographic Experts Group(联合图像专家组)”,它是由ISO/和CCITT协同工作的机构,这个机构的工作成果是ISO的国际标准ISO/IEC10918-1(连续色调静止图像的数字压缩和编码,digital compression and coding of continuous tone still images)和ITU-T的建议T.81。JPEG标准草案于1991年公布,1992年正式批准为国际标准,以后这个工作组的进一步增强和扩展形成了ISO 10918-3和ITU-T建议T.81。
JPEG是一种采用预测编码(DPCM)、离散余弦变换(DCT)以及熵编码,以去除冗余的图像和彩色数据的有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,也即可以用最少的磁盘空间得到较好的图像品质。而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。比如可以把1.37Mb的BMP位图文件压缩至20.3KB。当然也可以在图像质量和文件尺寸之间找到平衡点。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。
JPEG的核心算法是DCT变换编码,其压缩性能基本反映了20世纪80年代末图像压缩的技术水平。但自从JPEG制定后的近10年,许多更有效的图像压缩技术已经得到发展,如小波变换方法、分形方法、区域划分方法等。其中,发展最成熟和性能及通用性最好的静止图像压缩方法是小波变换方法。正因如此,制定了第二代静止图像压缩标准,即JPEG2000,它的核心技术正是小波变换编码。其核心编解码器采用小波变换、算术编码及嵌入式分层组织,较以往的静止图像压缩标准复杂,它在同一个码流中实现了无损和有损压缩、分辨率和信噪比的累进性以及随机访问等优良特性。JPEG2000作为JPEG的升级版,其压缩率比JPEG高约30%左右,同时支持有损和无损压缩。JPEG2000格式有一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图像由朦胧到清晰显示。此外,JPEG2000还支持所谓的"感兴趣区域" 特性,可以任意指定影像上感兴趣区域的压缩质量,还可以选择指定的部分先解压缩。
JPEG2000和JPEG相比优势明显,且向下兼容,因此可取代传统的JPEG格式因而可以被更广泛的应用于互联网、彩色拷贝、打印、扫描、数字摄影、遥感、医学图像、数字图书馆、数字存档以及移动图像通信等领域。
虽然jpeg有很多优点,但是其他的数据格式也有他们各自的优点。比如说如果要打印图像,特别是打印高质量的图像,TIFF格式是更为合适的选择。
JPEG压缩技术可以说是所有图像压缩技术的基础。如MJPEG(Motion JPEG)就是在JPEG基础发展起来的动态图像压缩技术,它只单独的对某一帧进行压缩,而基本不考虑视频流中不同帧之间的变化。使得可获取清晰度很高的视频图像,而且可灵活设置每路的视频清晰度和压缩帧数。其压缩后的画面还可任意剪接。但它的缺陷也非常明显,其一,丢帧现象严重、实时性差,在保证每路都必 须是高清晰的前提下,很难完成实时压缩;其二,压缩效率低,存储占用空间较大。后来又出现了多层式JPEG(ML-JPEG)压缩技术,它采取渐层式技术,先传输低解析的图档,然后再补送更细节的压缩资料,使画面品质改善。这种方式所需的时间虽然与原先的方式一样。但由于可以先看到画面,所以使用者会觉得这种方式较好。
而在静止图像压缩中,还有其他不少的标准正在发展。如微软今年3月份透露,该公司不久将向国际标准组织提交一个新的图片格式,并表示其新格式可以提供更高的图像质量和更好的压缩能力,即HD Photo格式。微软希望能用它的格式来取代现在通用的JPEG格式。微软称,HD Photo简洁的运算法则可以减少图像在压缩过程中受到的损失,即便图片大小仅有JPEG的一半,也将具有更高的质量。这种格式此外还能够同时支持“无损”和“有损”两种图片数据压缩方法,这两种方法可以对图像质量的产生不同的效果。微软称,HD Photo可以对色平衡和曝光设置进行调节,且不会像发生其它位图格式经常遇到的数据丢失或减少现象。无论HD是否可以取代JPEG,而JPEG在数字图像压缩发展中所做出的贡献是举足重轻的。—1—
三、研究内容
1、主要设计研究内容及关键技术
JPEG压缩格式是目前图像处理领域里面用得最广泛的一种图像压缩方式,本毕业设计将进行就JPEG标准对图像进行编、解码的研究。主要内容包括:
1.从BMP格式图像的文件中(未压缩)读出图像,并能显示。
2.将BMP图像数据以JPEG标准压缩,保存为*.JPG文件。
3.要求能读出jpg文件,并显示在界面上
其中,JPEG的压缩实现主要分成四个步骤:
1.颜色模式转换及采样;
2.DCT变换(离散余弦变换);
3.量化;
4.编码(有算术编码和霍夫曼编码两种,这里采用霍夫曼编码)。
一、颜色转换及采样
1.颜色转换:对BMP图像中的颜色数据进行由RGB一YCbCr的转换,Y表示亮度,Cb Cr分别表示蓝色度和红色度。转换公式:
Y=0.2990R+0.5870G+0.1140B
Cb=-0.1687R-0.3313G+0.5000B
Cr=0.5000R-0.4187G-0.0813B
这样转换以后就得到三个新的基色值,对这三个基色值来讲,都可以当作一个独立的图像平面来进行压缩编码。
2.采样:颜色转换后,保留每一点的亮度值Y,而色度值Cb Cr则是每两点保留一点,在图像的行和列方向上都可执行颜色采样。如果采用的是1:1:1的采样比例,不用抽样。若采用的采样比是行列方向都是2:1:1,在行方向,每两点保留一点,列方向也是每两点保留一点,这样如果假设原来的CbCr矩阵大小为M*S,则经过2:1:1抽样之后成了M/2*s/2=1/4M*S,只有原来的1/4了,图像大大缩小,如果想减小图像的失真度,则可行方向不抽样或列方向不抽样。
二、二文DCT变换
二文DCT变换公式为:
F(u,v)=
其中x,y代表图像数据矩阵中的某个数据值的坐标位置
f(x,y)指图像数据矩阵中该点的资料值
u,v指经过DCT变换后矩阵中的某数值点的坐标位置,在这里u=x,v=y
F(u,v)指经过DCT变换后该坐标点的资料值。
当u=0,v=0时,C(u)C(v)=1.414/2
当u>0,v>0时,C(u)C(v)=1,经过变换后的资料值F(u,v)称为频率系数(或
称DFT系数)。
三、量化
量化过程实质上是把亮度数据Y和色度数据Cb/Cr由时域转变成频域(DCT变换)并滤除高频分量的过程,由于人眼对高频分量不敏感,所以可以滤除高频分量,经过量化以后的每一个8*8数据块中,左上角第一个元素数据值为直流分量,称为DC,其余63个资料为交流分量,称为AC。
四、游程编码,ZIGZAG扫描
经过量化后的DCT系数矩阵,除DC值一般不为零外,AC系数大多是在零点附近的浮点数。经过取整以后,每一个8*8块中,有大量的AC系数的值为0。为了把尽可能多的其值为0的AC系数串在一起,以利于AC编码及提高压缩比,还必须把YCbCr矩阵中的每一个8*8块中的64个元素进行“之”字形排序(这样就可以做到把尽可能多的0串在一起)。其过程示意图如下:
图例:量化后的系数按Z字型扫描
箭头方向表示“之”字形排序以后原8*8中元素的新的位置顺序。
五、哈夫曼编码
哈夫曼编码是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。它使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。编码表是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。—2—
2、拟采取的设计研究方法、技术路线、预期目标
本设计拟采用VC++来实现。程序实现的各个步骤如下:
1、读取BMP图像信息,获取图像行像素和列像素数值,在BMP图像中,图像数据是以倒序存放的。亦即实际图像第一行资料存放在BMP图像数据矩阵的最后一行,依次类推,所以取资料的时候要从BMP图像数据矩阵的最后一行开始读起,把数据存放在新建数组(或称矩阵)的第一行,一直取完。BMP图像行像素和列像素的数值分别存于文件头信息的第18和22字节。从Cimage类中可得到Width(图像宽度)和hight(图像高度)的数值。
2、得到Pwidth*Phight后便得知BMP图像的像素点大小,而数据矩阵(三基色,RGB矩阵)的大小是Pwidth*Phight*3,因为每一个像素点都含有RGB三个数据,我们要处理的是数据矩阵而不是像素点矩阵。所以,新建数组的大小是(Pwidth*3)*Phight。
3、接下来,把这一个矩阵(包含BGR)拆分成三个独立的B、G、R矩阵,得到三个新的矩阵(只包含B的矩阵,只包含G的矩阵,只包含R的矩阵),简称为B矩阵、G矩阵、R矩阵(大小为Pwidth*Phight),用程序实现拆分,只要依次取原矩阵的第1、4、7、10、13......个资料即得到B矩阵,依次读取第2、5、8、11......个数据即得到G矩阵,依次读第3、6、9、12......个资料即得到R矩阵。得到B、G、R矩阵后再利用颜色转换公式很容易就可得到YCbCr矩阵。
Y(n)=0.114B(n)+0.587G(n)+0.299R(n)
Cb(n)=0.5B(n)-0.3313G(n)-0.1687R(n)
Cr(n)=0.0813B(n)-0.14187G(n)+0.5R(n)
(For n=1 To PW*PH),其中PW为Pwidth的简写,PH为Phight的简写。
4、二文DCT变换
由于VC中无法实现二文DCT计算公式,所以只有把二文的变换变成先做一文,再做另一文的变换,俗称快速DCT变换。快速DCT变换方法如下:设一个大小为8的数组SL(8),先读取一个8*8块的第一行资料值,赋给SL(8),对SL(8)进行一文DCT变换后得到一个新的SL(8)数组,再把SL(8)数组覆盖到原来的8*8块中相应的地方去。做完第一行后再做第二行,一直做完8行,一个8*8块的一文DC即告完成,然后再做列方向的第二文DCT变换,变换公式一样,只是由SL(8)取8*8块的行资料变成取列数值。做完后覆盖回原值,即得到一个8*8块的DFT系数块,再重复这两个过程做第二个8*8块......一直到做完全部8*8块(Y,Cb,Cr)。这样就得到Y、Cb、Cr的DFT系数矩阵。
5、量化
读取Y矩阵中第一个8*8块,与量化系数矩阵中对应的相乘,得到的值覆盖回原矩阵,然后做第二个8*8块,一直到做完全部8*8块,然后做CbCr矩阵的量化,用另外一个系数矩阵。
6、“之”字形扫描
7、霍夫曼编码
霍夫曼编码时必须判断一个个DC(AC)的值,以及转换成二进制代码后的码长,再去对照霍夫曼编码表进行编码,比如对一个DC值编码,首先得先判断该DC的值在哪段范围内,在某一段范围内的数值,其二进制代码长相等。并要让程序知道该DC的值到底为多少,然后才能进行编码。
8、压缩过程完成以后,接下去要做的工作便是码串存贮,存贮时需要注意的—点是在抽样过程中得到1个Y块对应1个Cb块合一个Cr块的对应关系,在存贮时也要按这种对应关系存贮,即1个Y块的码串后面紧接着存放与其对应的一个Cb块的码串及一个Cr块的码串,循环往复,存完所有串。这样的1个Y8*8块+1个Cb块+1个Cr简称为MCU,是JPEG格式的最小存贮处理单元。
四、工作计划
序号 阶段及内容 工作量估计
(时数) 起讫日期 阶段成果形式
确定方向,撰写开题报告
查阅资料,规划设计
程序设计及分段测试
最终程序测试,撰写设计报告
校验程序,完成报告
毕业答辩
7天
15天
27天
11天
4天
1天
4.7-4.13
4.14-4.28
4.29-5.25
5.26-6.5
6.6-6.9
6.10
开题报告
设计流程图
各模块程序
完整程序及报告
打印版报告
毕业答辩
五、参考文献
10. http://www.751com.cn
11. thhp://www.751com.cn
1. 张旭东 卢国栋 冯健,《图像编码基础和小波压缩技术——原理、算法和标准》,清华大学出版社,北京 2004
2. 陆宗骐,C/C++图像处理编程,清华大学出版社,北京 2006
3. 何斌,Visual C++数字图像处理 ,人民邮电出版社,2001:685
4. 同志工作室,《Visual C++ 6.0开发技巧与实例教程》,人民邮电出版社,2000年5月第1版
5. 王耀南 李树涛 毛建旭 ,计算机图像处理与识别技术,高等教育出版社,2005:281
6. 张远鹏,计算机图像处理技术基础,北京大学出版社,1996:310
7. 黄贤武等,数字图像处理与压缩编码技术,电子科技大学出版社,2000:538
8. Kenneth R. Castleman ,Digital Image Processing ,Pearson Education,2003 :568
9. Mahesh Chand ,Graphics Programming with GDI+,Addison-Wesley Professional,293
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>