• 1. 基于JPG标准的图像压缩
  • 2. 一、文献综述与选题背景信息时代,人们对使用计算机获取信息、处理信息的依赖性越来越高。计算机系统面临的是数值、文字、语言、音乐、图形、动画、静图像、电视视频图像等多种媒体。数字化的视频和音频信号的数量之大是惊人的,对于电视画面的分辨率640×480的彩色图像,30帧/s,则一秒钟的数据量为:640×480×24×30=221.12M,所以播放时,需要221Mbps的通信回路。存储时,1张CD可存640M,则仅可以存放 2.89s的数据。  大数据量的图像信息会给存储器的存储容量,通信干线信道的带宽,以及计算机的处理速度增加极大的压力。单纯靠增加存储器容量,提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的,这时就要考虑压缩。
  • 3. 随着多媒体技术的快速发展,静止图像的应用越来越广泛。它的应用主要集中在图像的存储和图像的传输两方面,从具体应用中我们可以发现静止图像占用了越来越多的资源。在这样的背景条件下,静止图像的压缩成为了一个研究的热点。 目前静止图像的压缩算法以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。
  • 4. JPEG是一种采用预测编码(DPCM)、离散余弦变换(DCT)以及熵编码,以去除冗余的图像和彩色数据的有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。 但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,也即可以用最少的磁盘空间得到较好的图像品质。而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。
  • 5. 比如可以把1.37Mb的BMP位图文件压缩至20.3KB。当然也可以在图像质量和文件尺寸之间找到平衡点。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。
  • 6. JPEG的核心算法是DCT变换编码,其压缩性能基本反映了20世纪80年代末图像压缩的技术水平。但自从JPEG制定后的近10年,许多更有效的图像压缩技术已经得到发展,如小波变换方法、分形方法、区域划分方法等。其中,发展最成熟和性能及通用性最好的静止图像压缩方法是小波变换方法。 正因如此,制定了第二代静止图像压缩标准,即JPEG2000,它的核心技术正是小波变换编码。其核心编解码器采用小波变换、算术编码及嵌入式分层组织,较以往的静止图像压缩标准复杂,它在同一个码流中实现了无损和有损压缩、分辨率和信噪比的累进性以及随机访问等优良特性。
  • 7. JPEG2000作为JPEG的升级版,其压缩率比JPEG高约30%左右,同时支持有损和无损压缩。JPEG2000格式有一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图像由朦胧到清晰显示。此外,JPEG2000还支持所谓的"感兴趣区域" 特性,可以任意指定影像上感兴趣区域的压缩质量,还可以选择指定的部分先解压缩。
  • 8. JPEG2000和JPEG相比优势明显,且向下兼容,因此可取代传统的JPEG格式因而可以被更广泛的应用于互联网、彩色拷贝、打印、扫描、数字摄影、遥感、医学图像、数字图书馆、数字存档以及移动图像通信等领域。 虽然jpeg有很多优点,但是其他的数据格式也有他们各自的优点。比如说如果要打印图像,特别是打印高质量的图像,TIFF格式是更为合适的选择。
  • 9. JPEG压缩技术可以说是所有图像压缩技术的基础。如MJPEG(Motion JPEG)就是在JPEG基础发展起来的动态图像压缩技术,它只单独的对某一帧进行压缩,而基本不考虑视频流中不同帧之间的变化。使得可获取清晰度很高的视频图像,而且可灵活设置每路的视频清晰度和压缩帧数。其压缩后的画面还可任意剪接。但它的缺陷也非常明显,其一,丢帧现象严重、实时性差,在保证每路都必 须是高清晰的前提下,很难完成实时压缩;其二,压缩效率低,存储占用空间较大。后来又出现了多层式JPEG(ML-JPEG)压缩技术,它采取渐层式技术,先传输低解析的图档,然后再补送更细节的压缩资料,使画面品质改善。这种方式所需的时间虽然与原先的方式一样。但由于可以先看到画面,所以使用者会觉得这种方式较好。
  • 10. 而在静止图像压缩中,还有其他不少的标准正在发展。如微软今年3月份透露,该公司不久将向国际标准组织提交一个新的图片格式,并表示其新格式可以提供更高的图像质量和更好的压缩能力,即HD Photo格式。微软希望能用它的格式来取代现在通用的JPEG格式。微软称,HD Photo简洁的运算法则可以减少图像在压缩过程中受到的损失,即便图片大小仅有JPEG的一半,也将具有更高的质量。这种格式此外还能够同时支持“无损”和“有损”两种图片数据压缩方法,这两种方法可以对图像质量的产生不同的效果。微软称,HD Photo可以对色平衡和曝光设置进行调节,且不会像发生其它位图格式经常遇到的数据丢失或减少现象。无论HD是否可以取代JPEG,而JPEG在数字图像压缩发展中所做出的贡献是举足重轻的。
  • 11. 二、研究内容I、主要设计研究内容及关键技术 JPEG压缩格式是目前图像处理领域里面用得最广泛的一种图像压缩方式,本毕业设计将进行就JPEG标准对图像进行编、解码的研究。主要内容包括: 1.从BMP格式图像的文件中(未压缩)读出图像,并能显示。 2.将BMP图像数据以JPEG标准压缩,保存为*.JPG文件。 3.要求能读出jpg文件,并显示在界面上 其中,JPEG的压缩实现主要分成四个步骤: 1.颜色模式转换及采样; 2.DCT变换(离散余弦变换); 3.量化; 4.编码(有算术编码和哈夫曼编码两种,这里采用哈夫曼编码)。
  • 12. (一)、颜色转换及采样 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了,图像大大缩小,如果想减小图像的失真度,则可行方向不抽样或列方向不抽样。
  • 13. (二)、二维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系数)。
  • 14. (三)、量化量化过程实质上是把亮度数据Y和色度数据Cb/Cr由时域转变成频域(DCT变换)并滤除高频分量的过程,由于人眼对高频分量不敏感,所以可以滤除高频分量,经过量化以后的每一个8*8数据块中,左上角第一个元素数据值为直流分量,称为DC,其余63个资料为交流分量,称为AC。
  • 15. (四)、游程编码,ZIGZAG扫描经过量化后的DCT系数矩阵,除DC值一般不为零外,AC系数大多是在零点附近的浮点数。经过取整以后,每一个8*8块中,有大量的AC系数的值为0。为了把尽可能多的其值为0的AC系数串在一起,以利于AC编码及提高压缩比,还必须把YCbCr矩阵中的每一个8*8块中的64个元素进行“之”字形排序(这样就可以做到把尽可能多的0串在一起)。
  • 16. 其过程示意图如下: 图例:量化后的系数按Z字型扫描 箭头方向表示“之”字形排序以后原8*8中元素的新的位置顺序。
  • 17. (五)、哈夫曼编码哈夫曼编码是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。它使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。编码表是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。
  • 18. II设计研究方法、技术路线本设计拟采用VC++来实现。程序实现的各个步骤如下: 1、读取BMP图像信息,获取图像行像素和列像素数值,在BMP图像中,图像数据是以倒序存放的。亦即实际图像第一行资料存放在BMP图像数据矩阵的最后一行,依次类推,所以取资料的时候要从BMP图像数据矩阵的最后一行开始读起,把数据存放在新建数组(或称矩阵)的第一行,一直取完。BMP图像行像素和列像素的数值分别存于文件头信息的第18和22字节。从Cimage类中可得到Width(图像宽度)和hight(图像高度)的数值。
  • 19. 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的简写。
  • 20. 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系数矩阵。
  • 21. 5、量化 读取Y矩阵中第一个8*8块,与量化系数矩阵中对应的相乘,得到的值覆盖回原矩阵,然后做第二个8*8块,一直到做完全部8*8块,然后做CbCr矩阵的量化,用另外一个系数矩阵。 6、“之”字形扫描 7、哈夫曼编码 哈夫曼编码时必须判断一个个DC(AC)的值,以及转换成二进制代码后的码长,再去对照霍夫曼编码表进行编码,比如对一个DC值编码,首先得先判断该DC的值在哪段范围内,在某一段范围内的数值,其二进制代码长相等。并要让程序知道该DC的值到底为多少,然后才能进行编码。
  • 22. 8、压缩过程完成以后,接下去要做的工作便是码串存贮,存贮时需要注意的—点是在抽样过程中得到1个Y块对应1个Cb块合一个Cr块的对应关系,在存贮时也要按这种对应关系存贮,即1个Y块的码串后面紧接着存放与其对应的一个Cb块的码串及一个Cr块的码串,循环往复,存完所有串。这样的1个Y8*8块+1个Cb块+1个Cr简称为MCU,是JPEG格式的最小存贮处理单元。 在对一幅大小为100,672bytes 8位BMP图像文件进行Huffman编码过程中,作者按照以下步骤实现了的压缩和解压缩算法。 1)扫描位图文件的全部数据(对应用于调色板的编码),完成数据频度的统计。 2)依据数据出现的频度建立哈夫曼树。 3)将哈夫曼树的信息写入输出文件(压缩后文件),以备解压缩时使用。 4)进行第二遍扫描,将原文件所有编码数据转化为哈夫曼编码,保存到输出文件。解压缩则为逆过程,以下是编码和解码的实现算法。
  • 23. a)定义数据结构Node如下:   Struct Node   {long freq;//该节点符号的频率值,初值为0   int parent;//该节点父节点的序号,初值为-1   int right;//该节点右子节点的序号,初值为-1   int left;//该节点左子节点的序号,初值为-1   |Bmp tree[511] 说明:   之所以有511个节点,是因为每个字节可表示的符号个数为256个(对应于256种颜色)二叉树有256个叶节点,根据二叉树的性质总节点数为 2·256-1=511个节点。这里用0~255个元素来依次对应256种颜色。由第256以后的元素来依次对应形成的各个父节点的信息,即父节点的编号从256开始。
  • 24. b)按照前述的压缩步骤,先对欲压缩文件的各个符号的使用次数进行统计,填充于bmp tree[0~255] ·freq项内;在已有的节点中找出频率最低的两个节点,给出它们的父节点,将两个节点号填充于父节点的right,left,将父节点号填充于两个节点的Parent内。重复步骤直到根节点,建树工作完成。   建树完成后进行编码,对每个符号从符号的父节点开始。若节点的父节点值不为-1,则一直进行下去,直到树根。回溯过程中遇左出0,遇右出1输出编码。
  • 25. Huffman编码递归过程如下:   Void Bmp Huff Code(int node,int child)   if{Bmp tree[node]Parent!=-1};//父节点为-1的节点是树根   Bmp Huff Code(Bmp tree[node]parent,node);//若不为-1则递归   if(child≠-1);//若不为叶节点   {if(child=bmp tree[node]right);//右子节点,输出“1”   outputbit(1);   else if(child=bmp tree[node]left);//左子节点,输出“0”   Outputbit(0);   }
  • 26. c)解码时从树根开始,遇1取右节点,遇0取左节点,直到找到节点号小于256的节点(叶节点)。   HuHnun解码过程如下: Int Expand Huffman(Void)   {int node=Root-node-leaf;//解码从根节点开始。   do   {Head Flag=Getonebit();//从编码串中读取一位。   if(Head Flag=0);//若为“0”,   {node=Huffman-Tree[(node-256)*2];}//取当前节点的左节点号;   else if(Head Flag=1)若为“1”   {node=Huffman-tree[)node-256)*2+1];}//取当前节点的右节点号;   }While(node>=256);//节点号大于256继续循环   }expanddata-buffer[counter++]=node;//输出解码得到一个字节 压缩后的文件大小为48,431bytes,压缩比为48.1%,解压缩后的数据读出的图像正常。
  • 27. 系统简介主界面(这是一个用vc++创建的一个图形界面。)
  • 28. 文件下拉菜单
  • 29. 查看菜单栏
  • 30. 帮助菜单
  • 31. (本页无文本内容)
  • 32. 打印
  • 33. 打开一个BMP文档
  • 34. (本页无文本内容)
  • 35. 另存为
  • 36. 图像压缩
  • 37. 可调节的图像压缩比率
  • 38. 将BMP图像保存为JPG图像
  • 39. 打开一个大小为2.25M的BMP图片
  • 40. 将压缩率调到100%
  • 41. 最终得到大小为115K的JPG文档。 (2.25M->115K)
  • 42. 将一张BMP图片采用不同压缩率, 得到的两张图片做对比,发现没有什么差别。
  • 43. 到这里本设计已经达到设计要求。
  • 44. 致谢 此次毕业设计是在王丽老师精心指导和其他同学的帮助下完成的。从硬件的设计到软件的编写和调试无不浸透着王老师的心血和其他同学的努力。在这几个月的时间里,老师不仅以他们严谨的科学态度、广博的学识,而且以她宽厚待人、真诚正直的品德对学生言传身教,这些都将使我受益终身。借此机会,我向老师表示最崇高的敬意和衷心的感谢。论文的完成过程中得到了资管系信息管理教研室其他老师广大同学无私地帮助,在此对他们表示感谢。 最后,衷心感谢各位专家在百忙之中对论文给予评审。由于作者水平和时间的限制,文中难免有不足,疏漏甚至错误之处,恳请给予批评指正,以便在今后的学习中进一步修正和完善,谢谢!!
  • 45. (五)、参考文献张旭东 卢国栋 冯健,《图像编码基础和小波压缩技术——原理、算法和标准》,清华大学出版社,北京 2004 陆宗骐,C/C++图像处理编程,清华大学出版社,北京 2006 何斌,Visual C++数字图像处理 ,人民邮电出版社,2001:685 同志工作室,《Visual C++ 6.0开发技巧与实例教程》,人民邮电出版社,2000年5月第1版 王耀南 李树涛 毛建旭 ,计算机图像处理与识别技术,高等教育出版社,2005:281 张远鹏,计算机图像处理技术基础,北京大学出版社,1996:310 黄贤武等,数字图像处理与压缩编码技术,电子科技大学出版社,2000:538 Kenneth R. Castleman ,Digital Image Processing ,Pearson Education,2003 :568 Mahesh Chand ,Graphics Programming with GDI+,Addison-Wesley Professional,2003 http://www.jpeg.org/ ftp://ftp.uu.net/graphics/jpeg/