45
基基 基基 JPG JPG 基基基基基基基 基基基基基基基

基于 JPG 标准的图像压缩

  • Upload
    clover

  • View
    168

  • Download
    10

Embed Size (px)

DESCRIPTION

基于 JPG 标准的图像压缩. 一、文献综述与选题背景. 信息时代,人们对使用计算机获取信息、处理信息的依赖性越来越高。计算机系统面临的是数值、文字、语言、音乐、图形、动画、静图像、电视视频图像等多种媒体。数字化的视频和音频信号的数量之大是惊人的,对于电视画面的分辨率 640×480 的彩色图像, 30 帧 /s ,则一秒钟的数据量为: 640×480×24×30 = 221 . 12M ,所以播放时,需要 221Mbps 的通信回路。存储时, 1 张 CD 可存 640M ,则仅可以存放 2 . 89s 的数据。 - PowerPoint PPT Presentation

Citation preview

Page 1: 基于 JPG 标准的图像压缩

基于基于 JPGJPG 标准的图像压缩标准的图像压缩

Page 2: 基于 JPG 标准的图像压缩

一、文献综述与选题背景一、文献综述与选题背景 信息时代,人们对使用计算机获取信息、处理信息的依赖性越来越高。信息时代,人们对使用计算机获取信息、处理信息的依赖性越来越高。计算机系统面临的是数值、文字、语言、音乐、图形、动画、静图像、计算机系统面临的是数值、文字、语言、音乐、图形、动画、静图像、电视视频图像等多种媒体。数字化的视频和音频信号的数量之大是惊电视视频图像等多种媒体。数字化的视频和音频信号的数量之大是惊人的,对于电视画面的分辨率人的,对于电视画面的分辨率 640×480640×480 的彩色图像,的彩色图像, 3030帧帧 /s/s ,则一,则一秒钟的数据量为:秒钟的数据量为: 640×480×24×30640×480×24×30== 221.12M221.12M ,所以播放时,需要,所以播放时,需要

221Mbps221Mbps 的通信回路。存储时,的通信回路。存储时, 11张张 CDCD 可存可存 640M640M ,则仅可以存放 ,则仅可以存放 2.89s2.89s 的数据。的数据。

 大数据量的图像信息会给存储器的存储容量,通信干线信道的带宽, 大数据量的图像信息会给存储器的存储容量,通信干线信道的带宽,以及计算机的处理速度增加极大的压力。单纯靠增加存储器容量,提以及计算机的处理速度增加极大的压力。单纯靠增加存储器容量,提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的,高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的,这时就要考虑压缩。这时就要考虑压缩。

Page 3: 基于 JPG 标准的图像压缩

随着多媒体技术的快速发展,静止图像的应用越来越广泛。随着多媒体技术的快速发展,静止图像的应用越来越广泛。它的应用主要集中在图像的存储和图像的传输两方面,从它的应用主要集中在图像的存储和图像的传输两方面,从具体应用中我们可以发现静止图像占用了越来越多的资源。具体应用中我们可以发现静止图像占用了越来越多的资源。在这样的背景条件下,静止图像的压缩成为了一个研究的在这样的背景条件下,静止图像的压缩成为了一个研究的热点。热点。 目前静止图像的压缩算法以目前静止图像的压缩算法以

JPEGJPEG(( Joint Photographic Experts GroupJoint Photographic Experts Group )和)和 JPEG2000JPEG2000为主。为主。 JPEGJPEG是第一个被广泛接受的单色和彩色静止图像压缩标是第一个被广泛接受的单色和彩色静止图像压缩标准,它的名字源于“准,它的名字源于“ Joint Photographic Experts Group(Joint Photographic Experts Group( 联联合图像专家组合图像专家组 )”)”,它是由,它是由 ISO/ISO/和和 CCITTCCITT协同工作的机构,协同工作的机构,这个机构的工作成果是这个机构的工作成果是 ISOISO的国际标准的国际标准 ISO/IEC10918-1ISO/IEC10918-1(连续色调静止图像的数字压缩和编码,(连续色调静止图像的数字压缩和编码, digital digital

compression and coding of continuous tone still imagescompression and coding of continuous tone still images )和)和ITU-TITU-T的建议的建议 T.81T.81。。 JPEGJPEG 标准草案于标准草案于 19911991年公年公布,布, 19921992年正式批准为国际标准,以后这个工作组的进年正式批准为国际标准,以后这个工作组的进一步增强和扩展形成了一步增强和扩展形成了 ISO 10918-3ISO 10918-3和和 ITU-TITU-T建议建议 T.81T.81 。。

Page 4: 基于 JPG 标准的图像压缩

JPEGJPEG 是一种采用预测编码是一种采用预测编码 (DPCM)(DPCM) 、离散余弦变换、离散余弦变换 (DCT)(DCT) 以及以及熵编码,以去除冗余的图像和彩色数据的有损压缩格式,能够将熵编码,以去除冗余的图像和彩色数据的有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。像,不宜采用过高压缩比例。 但是但是 JPEGJPEG 压缩技术十分先进,它用有损压缩方式去除冗余的图压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,也即可以用最少的磁盘空间得到较好的图像品质。而且 也即可以用最少的磁盘空间得到较好的图像品质。而且 JPEGJPEG 是是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在 1010::

11到到 4040:: 11 之间,压缩比越大,品质就越低;相反地,压缩比越之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。小,品质就越好。

Page 5: 基于 JPG 标准的图像压缩

比如可以把比如可以把 11.. 37Mb37Mb的的 BMPBMP 位图文件压缩至位图文件压缩至 2020.. 3KB3KB 。当然。当然也可以在图像质量和文件尺寸之间找到平衡点。也可以在图像质量和文件尺寸之间找到平衡点。 JPEGJPEG 格式压缩格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持可减少图像的传输时间,可以支持 24bit24bit 真彩色,也普遍应用于真彩色,也普遍应用于需要连续色调的图像。 需要连续色调的图像。

Page 6: 基于 JPG 标准的图像压缩

JPEGJPEG 的核心算法是的核心算法是 DCTDCT 变换编码,其压缩性能基本反映了变换编码,其压缩性能基本反映了 2020 世世纪纪 8080 年代末图像压缩的技术水平。但自从年代末图像压缩的技术水平。但自从 JPEGJPEG 制定后的近制定后的近 1010年,许多更有效的图像压缩技术已经得到发展,如小波变换方法、年,许多更有效的图像压缩技术已经得到发展,如小波变换方法、分形方法、区域划分方法等。其中,发展最成熟和性能及通用性分形方法、区域划分方法等。其中,发展最成熟和性能及通用性最好的静止图像压缩方法是小波变换方法。最好的静止图像压缩方法是小波变换方法。

正因如此,制定了第二代静止图像压缩标准,即正因如此,制定了第二代静止图像压缩标准,即 JPEG2000JPEG2000 ,它,它的核心技术正是小波变换编码。其核心编解码器采用小波变换、的核心技术正是小波变换编码。其核心编解码器采用小波变换、算术编码及嵌入式分层组织,较以往的静止图像压缩标准复杂,算术编码及嵌入式分层组织,较以往的静止图像压缩标准复杂,它在同一个码流中实现了无损和有损压缩、分辨率和信噪比的累它在同一个码流中实现了无损和有损压缩、分辨率和信噪比的累进性以及随机访问等优良特性。进性以及随机访问等优良特性。

Page 7: 基于 JPG 标准的图像压缩

JPEG2000JPEG2000 作为作为 JPEGJPEG 的升级版,其压缩率比的升级版,其压缩率比 JPEGJPEG 高约高约 3030 %左%左右,同时支持有损和无损压缩。右,同时支持有损和无损压缩。 JPEG2000JPEG2000 格式有一个极其重要格式有一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图像由朦胧到清晰显示。此外,传输数据,不断提高图像质量,让图像由朦胧到清晰显示。此外,JPEG2000JPEG2000 还支持所谓的还支持所谓的 ""感兴趣区域感兴趣区域 " " 特性,可以任意指定影特性,可以任意指定影像上感兴趣区域的压缩质量,还可以选择指定的部分先解压缩。 像上感兴趣区域的压缩质量,还可以选择指定的部分先解压缩。

Page 8: 基于 JPG 标准的图像压缩

JPEG2000JPEG2000和和 JPEGJPEG 相比优势明显,且向下兼容,因此可取代传统相比优势明显,且向下兼容,因此可取代传统的的 JPEGJPEG 格式因而可以被更广泛的应用于互联网、彩色拷贝、打格式因而可以被更广泛的应用于互联网、彩色拷贝、打印、扫描、数字摄影、遥感、医学图像、数字图书馆、数字存档印、扫描、数字摄影、遥感、医学图像、数字图书馆、数字存档以及移动图像通信等领域。以及移动图像通信等领域。

虽然虽然 jpegjpeg 有很多优点,但是其他的数据格式也有他们各自的优点。有很多优点,但是其他的数据格式也有他们各自的优点。比如说如果要打印图像,特别是打印高质量的图像,比如说如果要打印图像,特别是打印高质量的图像, TIFFTIFF 格式格式是更为合适的选择。是更为合适的选择。

Page 9: 基于 JPG 标准的图像压缩

JPEGJPEG 压缩技术可以说是所有图像压缩技术的基础。如压缩技术可以说是所有图像压缩技术的基础。如MJPEG(Motion JPEG)MJPEG(Motion JPEG) 就是在就是在 JPEGJPEG 基础发展起来的动态图像压缩基础发展起来的动态图像压缩技术,它只单独的对某一帧进行压缩,而基本不考虑视频流中不技术,它只单独的对某一帧进行压缩,而基本不考虑视频流中不同帧之间的变化。使得可获取清晰度很高的视频图像,而且可灵同帧之间的变化。使得可获取清晰度很高的视频图像,而且可灵活设置每路的视频清晰度和压缩帧数。其压缩后的画面还可任意活设置每路的视频清晰度和压缩帧数。其压缩后的画面还可任意剪接。但它的缺陷也非常明显,其一,丢帧现象严重、实时性差,剪接。但它的缺陷也非常明显,其一,丢帧现象严重、实时性差,在保证每路都必 须是高清晰的前提下,很难完成实时压缩;其二,在保证每路都必 须是高清晰的前提下,很难完成实时压缩;其二,压缩效率低,存储占用空间较大。后来又出现了多层式压缩效率低,存储占用空间较大。后来又出现了多层式JPEGJPEG(( ML-JPEGML-JPEG )压缩技术,它采取渐层式技术,先传输低解)压缩技术,它采取渐层式技术,先传输低解析的图档,然后再补送更细节的压缩资料,使画面品质改善。这析的图档,然后再补送更细节的压缩资料,使画面品质改善。这种方式所需的时间虽然与原先的方式一样。但由于可以先看到画种方式所需的时间虽然与原先的方式一样。但由于可以先看到画面,所以使用者会觉得这种方式较好。面,所以使用者会觉得这种方式较好。

Page 10: 基于 JPG 标准的图像压缩

而在静止图像压缩中,还有其他不少的标准正在发展。如微软今而在静止图像压缩中,还有其他不少的标准正在发展。如微软今年年 33 月份透露,该公司不久将向国际标准组织提交一个新的图片月份透露,该公司不久将向国际标准组织提交一个新的图片格式,并表示其新格式可以提供更高的图像质量和更好的压缩能格式,并表示其新格式可以提供更高的图像质量和更好的压缩能力,即力,即 HD PhotoHD Photo 格式。微软希望能用它的格式来取代现在通用格式。微软希望能用它的格式来取代现在通用的的 JPEGJPEG格式。微软称,格式。微软称, HD PhotoHD Photo 简洁的运算法则可以减少图像简洁的运算法则可以减少图像在压缩过程中受到的损失,即便图片大小仅有在压缩过程中受到的损失,即便图片大小仅有 JPEGJPEG的一半,也的一半,也将具有更高的质量。这种格式此外还能够同时支持“无损”和将具有更高的质量。这种格式此外还能够同时支持“无损”和“有损”两种图片数据压缩方法,这两种方法可以对图像质量的“有损”两种图片数据压缩方法,这两种方法可以对图像质量的产生不同的效果。微软称,产生不同的效果。微软称, HD PhotoHD Photo 可以对色平衡和曝光设置可以对色平衡和曝光设置进行调节,且不会像发生其它位图格式经常遇到的数据丢失或减进行调节,且不会像发生其它位图格式经常遇到的数据丢失或减少现象。无论少现象。无论 HDHD是否可以取代是否可以取代 JPEGJPEG,而,而 JPEGJPEG在数字图像压缩在数字图像压缩发展中所做出的贡献是举足重轻的。发展中所做出的贡献是举足重轻的。

Page 11: 基于 JPG 标准的图像压缩

二、研究内容二、研究内容II、主要设计研究内容及关键技术、主要设计研究内容及关键技术 JPEGJPEG 压缩格式是目前图像处理领域里面用得最广泛的一种图像压缩压缩格式是目前图像处理领域里面用得最广泛的一种图像压缩方式,本毕业设计将进行就方式,本毕业设计将进行就 JPEGJPEG 标准对图像进行编、解码的研究。标准对图像进行编、解码的研究。主要内容包括:主要内容包括:11 .从.从 BMPBMP 格式图像的文件中格式图像的文件中 (( 未压缩未压缩 )) 读出图像,并能显示。读出图像,并能显示。22 .将.将 BMPBMP 图像数据以图像数据以 JPEGJPEG 标准压缩,保存为标准压缩,保存为 **.JPG.JPG 文件。文件。33 .要求能读出.要求能读出 jpgjpg 文件,并显示在界面上文件,并显示在界面上其中,其中, JPEGJPEG的压缩实现主要分成四个步骤:的压缩实现主要分成四个步骤:11 .颜色模式转换及采样;.颜色模式转换及采样;22.. DCTDCT变换(离散余弦变换);变换(离散余弦变换);33 .量化;.量化;44 .编码(有算术编码和.编码(有算术编码和哈哈夫曼编码两种,这里采用夫曼编码两种,这里采用哈哈夫曼编码)。夫曼编码)。

Page 12: 基于 JPG 标准的图像压缩

(一)、颜色转换及采样(一)、颜色转换及采样 11.颜色转换:对.颜色转换:对 BMPBMP图像中的颜色数据进行由图像中的颜色数据进行由 RGBRGB一一 YCbCrYCbCr 的转的转换,换, YY表示亮度,表示亮度, Cb CrCb Cr分别表示蓝色度和红色度。转换公式:分别表示蓝色度和红色度。转换公式: Y=0.2990R+0.5870G+0.1140BY=0.2990R+0.5870G+0.1140B Cb=-0.1687R-0.3313G+0.5000BCb=-0.1687R-0.3313G+0.5000B Cr=0.5000R-0.4187G-0.0813BCr=0.5000R-0.4187G-0.0813B 这样转换以后就得到三个新的基色值,对这三个基色值来讲,都可以这样转换以后就得到三个新的基色值,对这三个基色值来讲,都可以当作一个独立的图像平面来进行压缩编码。当作一个独立的图像平面来进行压缩编码。 22 .采样:颜色转换后,保留每一点的亮度值.采样:颜色转换后,保留每一点的亮度值 YY ,而色度值,而色度值 Cb CrCb Cr 则则是每两点保留一点,在图像的行和列方向上都可执行颜色采样。如果是每两点保留一点,在图像的行和列方向上都可执行颜色采样。如果采用的是采用的是 1:1:11:1:1 的采样比例,不用抽样。若采用的采样比是行列方向的采样比例,不用抽样。若采用的采样比是行列方向都是都是 2:1:12:1:1 ,在行方向,每两点保留一点,列方向也是每两点保留一,在行方向,每两点保留一点,列方向也是每两点保留一点,这样如果假设原来的点,这样如果假设原来的 CbCrCbCr 矩阵大小为矩阵大小为 M*SM*S ,则经过,则经过 2:1:12:1:1 抽样抽样之后成了之后成了 M/2*s/2M/2*s/2== 1/4M*S1/4M*S ,只有原来的,只有原来的 1/41/4 了,图像大大缩小,如了,图像大大缩小,如果想减小图像的失真度,则可行方向不抽样或列方向不抽样。果想减小图像的失真度,则可行方向不抽样或列方向不抽样。

Page 13: 基于 JPG 标准的图像压缩

(二)、二维(二)、二维 DCTDCT变换变换 二维二维 DCTDCT变换公式为:变换公式为: FF(( uu,, vv)) = =

其中其中 x,yx,y 代表图像数据矩阵中的某个数据值的坐标位置代表图像数据矩阵中的某个数据值的坐标位置 f(x,y)f(x,y) 指图像数据矩阵中该点的资料值指图像数据矩阵中该点的资料值 u,vu,v 指经过指经过 DCTDCT变换后矩阵中的某数值点的坐标位置,在这里变换后矩阵中的某数值点的坐标位置,在这里

u=x,v=yu=x,v=y F(u,v)F(u,v) 指经过指经过 DCTDCT变换后该坐标点的资料值。变换后该坐标点的资料值。 当当 u=0,v=0u=0,v=0 时,时, C(u)C(v)=1.414/2C(u)C(v)=1.414/2 当当 u>0,v>0u>0,v>0 时,时, C(u)C(v)=1,C(u)C(v)=1, 经过变换后的资料值经过变换后的资料值 F(u,v)F(u,v)称为频率系称为频率系数数 ((或或

称称 DFTDFT 系数系数 ))。。

]16

)12(cos[]16

)12(cos[),()()(41 7

0

7

0

yxyxfvcucx y

Page 14: 基于 JPG 标准的图像压缩

(三)、量化(三)、量化 量化过程实质上是把亮度数据量化过程实质上是把亮度数据 YY和色度数据和色度数据 Cb/CrCb/Cr 由时域转变成频域由时域转变成频域(( DCTDCT变换)并滤除高频分量的过程,由于人眼对高频分量不敏感,变换)并滤除高频分量的过程,由于人眼对高频分量不敏感,所以可以滤除高频分量,经过量化以后的每一个所以可以滤除高频分量,经过量化以后的每一个 8*88*8 数据块中,左上数据块中,左上角第一个元素数据值为直流分量,称为角第一个元素数据值为直流分量,称为 DCDC,其余,其余 6363个资料为交流个资料为交流分量,称为分量,称为 ACAC。。

Page 15: 基于 JPG 标准的图像压缩

(四)、游程编码,(四)、游程编码, ZIGZAGZIGZAG 扫描扫描 经过量化后的经过量化后的 DCTDCT 系数矩阵,除系数矩阵,除 DCDC 值一般不为零外,值一般不为零外, ACAC 系数大多系数大多是在零点附近的浮点数。经过取整以后,每一个是在零点附近的浮点数。经过取整以后,每一个 8*88*8 块中,有大量的块中,有大量的

ACAC 系数的值为系数的值为 00 。为了把尽可能多的其值为。为了把尽可能多的其值为 00的的 ACAC 系数串在一起,系数串在一起,以利于以利于 ACAC编码及提高压缩比,还必须把编码及提高压缩比,还必须把 YCbCrYCbCr 矩阵中的每一个矩阵中的每一个 8*88*8块中的块中的 6464个元素进行“之”字形排序(这样就可以做到把尽可能多个元素进行“之”字形排序(这样就可以做到把尽可能多的的 00 串在一起)。串在一起)。

Page 16: 基于 JPG 标准的图像压缩

其过程示意图如下:其过程示意图如下:

图例:量化后的系数按 Z字型扫描 箭头方向表示“之”字形排序以后原 8*8中元素的新的位置顺序。

Page 17: 基于 JPG 标准的图像压缩

(五)、哈夫曼编码(五)、哈夫曼编码 哈夫曼编码是一种一致性编码法(又称哈夫曼编码是一种一致性编码法(又称 "" 熵编码法熵编码法 ""),用于数据的),用于数据的无损耗压缩。它使用一张特殊的编码表将源字符(例如某文件中的一无损耗压缩。它使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。编码表是根据每一个源字符出现的估算概率而建个符号)进行编码。编码表是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。而达到无损压缩数据的目的)。

Page 18: 基于 JPG 标准的图像压缩

IIII 设计研究方法、技术路线设计研究方法、技术路线 本设计拟采用本设计拟采用 VC++VC++来实现。程序实现的各个步骤如下:来实现。程序实现的各个步骤如下: 11、读取、读取 BMPBMP图像信息,获取图像行像素和列像素数值,在图像信息,获取图像行像素和列像素数值,在 BMPBMP图图像中,图像数据是以倒序存放的。亦即实际图像第一行资料存放在像中,图像数据是以倒序存放的。亦即实际图像第一行资料存放在

BMPBMP图像数据矩阵的最后一行,依次类推,所以取资料的时候要从图像数据矩阵的最后一行,依次类推,所以取资料的时候要从BMPBMP图像数据矩阵的最后一行开始读起,把数据存放在新建数组图像数据矩阵的最后一行开始读起,把数据存放在新建数组 ((或或称矩阵称矩阵 ))的第一行,一直取完。的第一行,一直取完。 BMPBMP图像行像素和列像素的数值分图像行像素和列像素的数值分别存于文件头信息的第别存于文件头信息的第 1818和和 2222字节。从字节。从 CimageCimage 类中可得到类中可得到 WidthWidth((图像宽度图像宽度 ))和和 hight(hight(图像高度图像高度 ))的数值。的数值。

Page 19: 基于 JPG 标准的图像压缩

22 、得到、得到 Pwidth*PhightPwidth*Phight 后便得知后便得知 BMPBMP 图像的像素点大小,而数图像的像素点大小,而数据矩阵(三基色,据矩阵(三基色, RGBRGB 矩阵)的大小是矩阵)的大小是 Pwidth*Phight*3Pwidth*Phight*3 ,因为,因为每一个像素点都含有每一个像素点都含有 RGBRGB 三个数据,我们要处理的是数据矩阵三个数据,我们要处理的是数据矩阵而不是像素点矩阵。所以,新建数组的大小是而不是像素点矩阵。所以,新建数组的大小是 (Pwidth*3)*Phight(Pwidth*3)*Phight 。。 33 、接下来,把这一个矩阵、接下来,把这一个矩阵 (( 包含包含 BGR)BGR) 拆分成三个独立的拆分成三个独立的

BB、、 GG、、 RR矩阵,得到三个新的矩阵矩阵,得到三个新的矩阵 (( 只包含只包含 BB 的矩阵,只包含的矩阵,只包含GG 的矩阵,只包含的矩阵,只包含 RR 的矩阵的矩阵 )) ,简称为,简称为 BB矩阵、矩阵、 GG 矩阵、矩阵、 RR矩阵矩阵(( 大小为大小为 Pwidth*Phight)Pwidth*Phight) ,用程序实现拆分,只要依次取原矩阵的,用程序实现拆分,只要依次取原矩阵的第第 11、、 44、、 77、、 1010、、 13......13...... 个资料即得到个资料即得到 BB矩阵,依次读取第矩阵,依次读取第 22、、55、、 88、、 11......11...... 个数据即得到个数据即得到 GG 矩阵,依次读第矩阵,依次读第33、、 66、、 99、、 12......12...... 个资料即得到个资料即得到 RR矩阵。得到矩阵。得到 BB、、 GG、、 RR 矩阵矩阵后再利用颜色转换公式很容易就可得到后再利用颜色转换公式很容易就可得到 YCbCrYCbCr 矩阵。矩阵。

Y(n)=0.114B(n)+0.587G(n)+0.299R(n)Y(n)=0.114B(n)+0.587G(n)+0.299R(n) Cb(n)=0.5B(n)-0.3313G(n)-0.1687R(n)Cb(n)=0.5B(n)-0.3313G(n)-0.1687R(n) Cr(n)=0.0813B(n)-0.14187G(n)+0.5R(n)Cr(n)=0.0813B(n)-0.14187G(n)+0.5R(n) (For n=1 To PW*PH)(For n=1 To PW*PH) ,其中,其中 PWPW为为 PwidthPwidth 的简写,的简写, PHPH为为 PhightPhight的简写。的简写。

Page 20: 基于 JPG 标准的图像压缩

44、二维、二维 DCTDCT变换变换 由于由于 VCVC中无法实现二维中无法实现二维 DCTDCT 计算公式,所以只有把二维的变换变计算公式,所以只有把二维的变换变成先做一维,再做另一维的变换,俗称快速成先做一维,再做另一维的变换,俗称快速 DCTDCT变换。快速变换。快速 DCTDCT变变换方法如下:设一个大小为换方法如下:设一个大小为 88的数组的数组 SL(8)SL(8) ,先读取一个,先读取一个 8*88*8 块的第块的第一行资料值,赋给一行资料值,赋给 SL(8),SL(8),对对 SL(8)SL(8)进行一维进行一维 DCTDCT变换后得到一个新变换后得到一个新的的 SL(8)SL(8)数组,再把数组,再把 SL(8)SL(8)数组覆盖到原来的数组覆盖到原来的 8*88*8 块中相应的地方去。块中相应的地方去。做完第一行后再做第二行,一直做完做完第一行后再做第二行,一直做完 88 行,一个行,一个 8*88*8 块的一维块的一维 DCDC即即告完成,然后再做列方向的第二维告完成,然后再做列方向的第二维 DCTDCT变换,变换公式一样,只是变换,变换公式一样,只是由由 SL(8)SL(8)取取 8*88*8 块的行资料变成取列数值。做完后覆盖回原值,即得块的行资料变成取列数值。做完后覆盖回原值,即得到一个到一个 8*88*8 块的块的 DFTDFT 系数块,再重复这两个过程做第二个系数块,再重复这两个过程做第二个 8*88*8块块 ............一直到做完全部一直到做完全部 8*88*8 块(块( YY,, CbCb,, CrCr)。这样就得到)。这样就得到YY、、 CbCb、、 CrCr的的 DFTDFT 系数矩阵。系数矩阵。

Page 21: 基于 JPG 标准的图像压缩

55 、量化、量化 读取读取 YY 矩阵中第一个矩阵中第一个 8*88*8 块,与量化系数矩阵中对应的相乘,得块,与量化系数矩阵中对应的相乘,得到的值覆盖回原矩阵,然后做第二个到的值覆盖回原矩阵,然后做第二个 8*88*8 块,一直到做完全部块,一直到做完全部

8*88*8 块,然后做块,然后做 CbCrCbCr 矩阵的量化,用另外一个系数矩阵。矩阵的量化,用另外一个系数矩阵。 66 、“之”字形扫描、“之”字形扫描 77 、、哈哈夫曼编码夫曼编码 哈哈夫曼编码时必须判断一个个夫曼编码时必须判断一个个 DCDC(( ACAC)的值,以及转换成二)的值,以及转换成二进制代码后的码长,再去对照霍夫曼编码表进行编码,比如对一进制代码后的码长,再去对照霍夫曼编码表进行编码,比如对一个个 DCDC 值编码,首先得先判断该值编码,首先得先判断该 DCDC 的值在哪段范围内,在某一的值在哪段范围内,在某一段范围内的数值,其二进制代码长相等。并要让程序知道该段范围内的数值,其二进制代码长相等。并要让程序知道该 DCDC的值到底为多少,然后才能进行编码。 的值到底为多少,然后才能进行编码。

Page 22: 基于 JPG 标准的图像压缩

88 、压缩过程完成以后,接下去要做的工作便是码串存贮,存贮时需、压缩过程完成以后,接下去要做的工作便是码串存贮,存贮时需要注意的要注意的——点是在抽样过程中得到点是在抽样过程中得到 11个个 YY块对应块对应 11个个 CbCb块合一个块合一个 CrCr块的对应关系,在存贮时也要按这种对应关系存贮,即块的对应关系,在存贮时也要按这种对应关系存贮,即 11个个 YY块的块的码串后面紧接着存放与其对应的一个码串后面紧接着存放与其对应的一个 CbCb块的码串及一个块的码串及一个 CrCr块的码块的码串,循环往复,存完所有串。这样的串,循环往复,存完所有串。这样的 11个个 Y8*8Y8*8块块 +1+1个个 CbCb块块 +1+1个个CrCr简称为简称为 MCUMCU ,是,是 JPEGJPEG 格式的最小存贮处理单元。格式的最小存贮处理单元。

在对一幅大小为在对一幅大小为 100100,, 672bytes 8672bytes 8位位 BMPBMP 图像文件进行图像文件进行 HuffmanHuffman 编编码过程中,作者按照以下步骤实现了的压缩和解压缩算法。码过程中,作者按照以下步骤实现了的压缩和解压缩算法。1)1)扫描位图文件的全部数据扫描位图文件的全部数据 (( 对应用于调色板的编码对应用于调色板的编码 )) ,完成数据频,完成数据频度的统计。度的统计。2)2) 依据数据出现的频度建立哈夫曼树。依据数据出现的频度建立哈夫曼树。3)3) 将哈夫曼树的信息写入输出文件将哈夫曼树的信息写入输出文件 (( 压缩后文件压缩后文件 )) ,以备解压缩时使,以备解压缩时使用。用。4)4) 进行第二遍扫描,将原文件所有编码数据转化为哈夫曼编码,保进行第二遍扫描,将原文件所有编码数据转化为哈夫曼编码,保存到输出文件。解压缩则为逆过程,以下是编码和解码的实现算法。存到输出文件。解压缩则为逆过程,以下是编码和解码的实现算法。

Page 23: 基于 JPG 标准的图像压缩

a)a)定义数据结构定义数据结构 NodeNode 如下:如下:     Struct NodeStruct Node

     {long freq{long freq;; //// 该节点符号的频率值,初值为该节点符号的频率值,初值为 00

     int parentint parent;; //// 该节点父节点的序号,初值为-该节点父节点的序号,初值为- 11

     int rightint right;; //// 该节点右子节点的序号,初值为-该节点右子节点的序号,初值为- 11

     int leftint left;; //// 该节点左子节点的序号,初值为-该节点左子节点的序号,初值为- 11

  |  | Bmp treeBmp tree[[ 511511 ]]说明:说明:

  之所以有  之所以有 511511 个节点,是因为每个字节可表示的符号个数为个节点,是因为每个字节可表示的符号个数为 256256个个 (( 对应于对应于 256256 种颜色种颜色 )) 二叉树有二叉树有 256256 个叶节点,根据二叉树的性质个叶节点,根据二叉树的性质总节点数为 总节点数为 2·2562·256-- 11== 511511 个节点。这里用个节点。这里用 00~~ 255255 个元素来依次个元素来依次对应对应 256256 种颜色。由第种颜色。由第 256256 以后的元素来依次对应形成的各个父节点以后的元素来依次对应形成的各个父节点的信息,即父节点的编号从的信息,即父节点的编号从 256256 开始。开始。

Page 24: 基于 JPG 标准的图像压缩

b)b) 按照前述的压缩步骤,先对欲压缩文件的各个符号的使用次数进行按照前述的压缩步骤,先对欲压缩文件的各个符号的使用次数进行统计,填充于统计,填充于 bmp treebmp tree[[ 00~~ 255255 ] ] ·freq·freq 项内;在已有的节点中找项内;在已有的节点中找出频率最低的两个节点,给出它们的父节点,将两个节点号填充于父出频率最低的两个节点,给出它们的父节点,将两个节点号填充于父节点的节点的 rightright,, leftleft ,将父节点号填充于两个节点的,将父节点号填充于两个节点的 ParentParent 内。重复步内。重复步骤直到根节点,建树工作完成。骤直到根节点,建树工作完成。  建树完成后进行编码,对每个符号从符号的父节点开始。若节点  建树完成后进行编码,对每个符号从符号的父节点开始。若节点的父节点值不为-的父节点值不为- 11 ,则一直进行下去,直到树根。回溯过程中遇左,则一直进行下去,直到树根。回溯过程中遇左出出 00 ,遇右出,遇右出 11 输出编码。输出编码。

Page 25: 基于 JPG 标准的图像压缩

HuffmanHuffman 编码递归过程如下:编码递归过程如下:     Void Bmp Huff Code(int node,int child)Void Bmp Huff Code(int node,int child)

     if{Bmp treeif{Bmp tree[[ nodenode]] Parent!Parent!=-=- 1}1};; ////父节点为-父节点为- 11 的节点是的节点是树根树根     Bmp Huff Code(Bmp treeBmp Huff Code(Bmp tree[[ nodenode]] parentparent,, node)node);; ////若不为-若不为- 11则递归则递归     if(child≠if(child≠-- 1)1);; ////若不为叶节点若不为叶节点     {if(child{if(child== bmp treebmp tree[[ nodenode]] right)right);; ////右子节点,输出“右子节点,输出“ 1”1”

     outputbit(1)outputbit(1) ;;     else if(childelse if(child== bmp treebmp tree[[ nodenode]] left)left);; ////左子节点,输出“左子节点,输出“ 0”0”

     Outputbit(0)Outputbit(0) ;;     }}

Page 26: 基于 JPG 标准的图像压缩

c)c) 解码时从树根开始,遇解码时从树根开始,遇 11 取右节点,遇取右节点,遇 00 取左节点,直到找到节点号小取左节点,直到找到节点号小于于 256256 的节点的节点 (( 叶节点叶节点 )) 。。     HuHnunHuHnun 解码过程如下:解码过程如下:

Int Expand Huffman(Void)Int Expand Huffman(Void)     {int node{int node== Root-node-leafRoot-node-leaf;; //// 解码从根节点开始。解码从根节点开始。     dodo     {Head Flag{Head Flag== Getonebit()Getonebit();; ////从编码串中读取一位。从编码串中读取一位。     if(Head Flagif(Head Flag== 0)0);; ////若为“若为“ 0”0” ,,     {node{node== Huffman-TreeHuffman-Tree[[ (node-256)*2(node-256)*2 ];]; }//}// 取当前节点的左节点取当前节点的左节点号;号;     else if(Head Flagelse if(Head Flag== 1)1) 若为“若为“ 1”1”     {node{node== Huffman-treeHuffman-tree[[ )node-256)*2)node-256)*2++ 11 ];]; }//}// 取当前节点的右取当前节点的右节点号;节点号;     }While(node>}While(node>== 256)256);; //// 节点号大于节点号大于 256256 继续循环继续循环     }expanddata-buffer}expanddata-buffer[[ countercounter ++]=++]= nodenode;; //// 输出解码得到一个输出解码得到一个字节字节压缩后的文件大小为压缩后的文件大小为 4848,, 431bytes431bytes ,压缩比为,压缩比为 4848..1%1% ,解压缩后的数据,解压缩后的数据读出的图像正常。读出的图像正常。

Page 27: 基于 JPG 标准的图像压缩

系统简介系统简介 主界面(这是一个用主界面(这是一个用 vc++vc++创建的一个图形界面。)创建的一个图形界面。)

Page 28: 基于 JPG 标准的图像压缩

文件下拉菜单文件下拉菜单

Page 29: 基于 JPG 标准的图像压缩

查看菜单栏查看菜单栏

Page 30: 基于 JPG 标准的图像压缩

帮助菜单帮助菜单

Page 31: 基于 JPG 标准的图像压缩
Page 32: 基于 JPG 标准的图像压缩

打印打印

Page 33: 基于 JPG 标准的图像压缩

打开一个打开一个 BMPBMP文档文档

Page 34: 基于 JPG 标准的图像压缩
Page 35: 基于 JPG 标准的图像压缩

另存为另存为

Page 36: 基于 JPG 标准的图像压缩

图像压缩图像压缩

Page 37: 基于 JPG 标准的图像压缩

可调节的图像压缩比率可调节的图像压缩比率

Page 38: 基于 JPG 标准的图像压缩

将将 BMPBMP图像保存为图像保存为 JPGJPG图像图像

Page 39: 基于 JPG 标准的图像压缩

打开一个大小为打开一个大小为 2.25M2.25M的的 BMPBMP图片图片

Page 40: 基于 JPG 标准的图像压缩

将压缩率调到将压缩率调到 100%100%

Page 41: 基于 JPG 标准的图像压缩

最终得到大小为最终得到大小为 115K115K的的 JPGJPG 文档。文档。(( 2.25M->115K2.25M->115K))

Page 42: 基于 JPG 标准的图像压缩

将一张将一张 BMPBMP 图片采用不同压缩率,图片采用不同压缩率,得到的两张图片做对比,发现没有什么差别。得到的两张图片做对比,发现没有什么差别。

Page 43: 基于 JPG 标准的图像压缩

到这里本设计已经达到设计要求。到这里本设计已经达到设计要求。

Page 44: 基于 JPG 标准的图像压缩

致谢致谢 此次毕业设计是在王丽老师精心指导和其他同学的帮助下完成的。从硬件的设计到软件此次毕业设计是在王丽老师精心指导和其他同学的帮助下完成的。从硬件的设计到软件的编写和调试无不浸透着王老师的心血和其他同学的努力。在这几个月的时间里,老师的编写和调试无不浸透着王老师的心血和其他同学的努力。在这几个月的时间里,老师不仅以他们严谨的科学态度、广博的学识,而且以她宽厚待人、真诚正直的品德对学生不仅以他们严谨的科学态度、广博的学识,而且以她宽厚待人、真诚正直的品德对学生言传身教,这些都将使我受益终身。借此机会,我向老师表示最崇高的敬意和衷心的感言传身教,这些都将使我受益终身。借此机会,我向老师表示最崇高的敬意和衷心的感谢。论文的完成过程中得到了资管系信息管理教研室其他老师广大同学无私地帮助,在谢。论文的完成过程中得到了资管系信息管理教研室其他老师广大同学无私地帮助,在此对他们表示感谢。此对他们表示感谢。

最后,衷心感谢各位专家在百忙之中对论文给予评审。由于作者水平和时间的限制,文最后,衷心感谢各位专家在百忙之中对论文给予评审。由于作者水平和时间的限制,文中难免有不足,疏漏甚至错误之处,恳请给予批评指正,以便在今后的学习中进一步修中难免有不足,疏漏甚至错误之处,恳请给予批评指正,以便在今后的学习中进一步修正和完善,谢谢正和完善,谢谢 !!!!

Page 45: 基于 JPG 标准的图像压缩

((五五 ))、参考文献、参考文献 张旭东 卢国栋 冯健,张旭东 卢国栋 冯健,《《图像编码基础和小波压缩技术图像编码基础和小波压缩技术————原理、原理、算法和标准算法和标准》》,清华大学出版社,北京 ,清华大学出版社,北京 20042004 陆宗骐,陆宗骐, C/C++C/C++图像处理编程,清华大学出版社,北京 图像处理编程,清华大学出版社,北京 20062006 何斌,何斌, Visual C++Visual C++数字图像处理 ,人民邮电出版社,数字图像处理 ,人民邮电出版社, 20012001:: 685685 同志工作室,同志工作室,《《 Visual C++ 6.0Visual C++ 6.0 开发技巧与实例教程开发技巧与实例教程》》,人民邮电,人民邮电出版社,出版社, 20002000年年 55月第月第 11 版版 王耀南 李树涛 毛建旭 王耀南 李树涛 毛建旭 ,, 计算机图像处理与识别技术,高等教育出计算机图像处理与识别技术,高等教育出版社,版社, 20052005:: 281281 张远鹏,计算机图像处理技术基础,北京大学出版社,张远鹏,计算机图像处理技术基础,北京大学出版社, 19961996:: 310310 黄贤武等,数字图像处理与压缩编码技术,电子科技大学出版黄贤武等,数字图像处理与压缩编码技术,电子科技大学出版社,社, 20002000:: 538538 Kenneth R. Castleman Kenneth R. Castleman ,, Digital Image Processing ,Pearson EducationDigital Image Processing ,Pearson Education,,

2003 2003 :: 568568 Mahesh Chand ,Graphics Programming with GDI+Mahesh Chand ,Graphics Programming with GDI+,, Addison-Wesley Addison-Wesley

ProfessionalProfessional,, 20032003 http://www.jpeg.org/http://www.jpeg.org/ ftp://ftp.uu.net/graphics/jpeg/ftp://ftp.uu.net/graphics/jpeg/