一点的亮度值Y,而色度值Cb Cr则是每两点保留一点,在图像的行和列方向上都可执行颜色采样。如果采用的是1:1:1的采样比例,不用抽样。若采用的采样比是行列方向都是2:1:1,在行方向,每两点保留一点,列方向也是每两点保留一点,这样如果假设原来的CbCr矩阵大小为M*S,则经过2:1:1抽样之后成了M/2*s/2=1/4M*S,只有原来的1/4了,图像大大缩小,如果想减小图像的失真度,则可行方向不抽样或列方向不抽样。
2.7.2 二维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系数)。
2.7.3 量化
量化过程实质上是把亮度数据Y和色度数据Cb/Cr由时域转变成频域(DCT变换)并滤除高频分量的过程,由于人眼对高频分量不敏感,所以可以滤除高频分量,经过量化以后的每一个8*8数据块中,左上角第一个元素数据值为直流分量,称为DC,其余63个资料为交流分量,称为AC。
2.7.4 游程编码,ZIGZAG扫描
经过量化后的DCT系数矩阵,除DC值一般不为零外,AC系数大多是在零点附近的浮点数。经过取整以后,每一个8*8块中,有大量的AC系数的值为0。为了把尽可能多的其值为0的AC系数串在一起,以利于AC编码及提高压缩比,还必须把YCbCr矩阵中的每一个8*8块中的64个元素进行“之”字形排序(这样就可以做到把尽可能多的0串在一起)。其过程示意图如下。
图2-2 量化后的系数按Z字型扫描
箭头方向表示“之”字形排序以后原8*8中元素的新的位置顺序。
2.7.5 哈夫曼编码
哈夫曼编码是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。它使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。编码表是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。
>>
基于JPG标准的图像压缩算法+代码+论文
需求分析
3.1 需求分析的任务
通过需求分析要确立软件设计的任务,即系统要实现的功能,进而划分出实现特定功能的模块。然后将其有机的结合起来,即构成了可以实现特定功能的目标系统。
3.2 系统功能分析
1)从BMP格式图像的文件中(未压缩)读出图像,并能显示。
2)将BMP图像数据以JPEG标准压缩,保存为*.JPG文件。
3)要求能读出jpg文件,并显示在界面上。
3.3 系统需求分析的步骤
1)需求获取:由于社会的发展对时间和空间的追求,需要对在信息交流中扮演重要角色的图像进行压缩。
2)需求提炼, 分析建模:即建立常用的控制流图、状态转换图、类对象关系及行为图。
3)需求描述:编写SRS-软件需求规格说明书。
4)需求验证。
3.4 系统功能模块设计
根据系统功能的要求,可将系统分解成几个功能模块来分别设计,功能流程图如下。JPEG的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也正是JPEG有高压缩比的原因。其编码器的流程如下。
图3-1 JPEG编码器流程
第四章 总体设计
经过需求分析的工作系统必须“做什么”已经清楚了,现在是解决“怎样做”的问题的时候了。总体设计的基本目标是回答“概括的说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级,这
相关热词:VC 基于 JPG 标准 图像 压缩 算法 代码 论文