毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

VC++基于JPG标准的图像压缩算法+代码+论文 第7页

更新时间:2009-3-28:  来源:毕业论文
基于JPG标准的图像压缩算法代码论文|图形图像|免费论文
游程编码
游程编码又称“运行长度编码”或“行程编码”,是一种统计编码,该编码属于无损压缩编码。对于二值图有效。
    行程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号(连续符号构成了一段连续的“行程”。行程编码因此而得名),使符号长度少于原始数据的长度。 例如:5555557777733322221111111 行程编码为:(5,6)(7,5)(3,3)(2,4)(l,7)。可见,行程编码的位数远远少于原始字符串的位数。
    在对图像数据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字符串代替这些连续符号,可大幅度减少数据量。
    行程编码分为定长行程编码和不定长行程编码两种类型。
    行程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。
2.6 哈夫曼编码
哈夫曼(Huffman)编码是一种常用的压缩编码方法,是Huffman于1952年为压缩文本文件建立的。它的基本原理是频繁使用的数据用较短的代码代替,较少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。举个例子:假设一个文件中出现了8种符号S0,S1,S2,S3,S4,S5,S6,S7,那么每种符号要编码,至少需要3比特。假设编码成000,001,010,011,100,101,110,111(称做码字)。那么符号序列S0S1S7S0S1S6S2S2S3S4S5S0S0S1编码后变成000001111000001110010010011100101000000001,共享了42比特。我们发现S0,S1,S2这三个符号出现的频率比较大,其它符号出现的频率比较小,如果我们采用一种编码方案使得S0,S1,S2的码字短,其它符号的码字长,这样就能够减少占用的比特数。例如,我们采用这样的编码方案:S0到S7的码字分别01,11,101,0000,0001,0010,0011,100,那么上述符号序列变成011110001110011101101000000010010010111,共享了39比特,尽管有些码字如S3,S4,S5,S6变长了(由3位变成4位),但使用频繁的几个码字如S0,S1变短了,所以实现了压缩。
上述的编码是如何得到的呢?随意乱写是不行的。编码必须保证不能出现一个码字和另一个的前几位相同的情况,比如说,如果S0的码字为01,S2的码字为011,那么当序列中出现011时,你不知道是S0的码字后面跟了个1,还是完整的一个S2的码字。我们给出的编码能够保证这一点。
下面给出具体的Huffman编码算法。
(1) 首先统计出每个符号出现的频率,上例S0到S7的出现频率分别为4/14,3/14,2/14,1/14,1/14,1/14,1/14,1/14。
(2) 从左到右把上述频率按从小到大的顺序排列。
(3) 每一次选出最小的两个值,作为二叉树的两个叶子节点,将和作为它们的根节点,这两个叶子节点不再参与比较,新的根节点参与比较。
(4) 重复(3),直到最后得到和为1的根节点。
将形成的二叉树的左节点标0,右节点标1。把从最上面的根节点到最下面的叶子节点途中遇到的0,1序列串起来,就得到了各个符号的编码。
上面的例子用Huffman编码的过程如图9。1所示,其中圆圈中的数字是新节点产生的顺序。可见,我们上面给出的编码就是这么得到的。
 
图2-1   Huffman编码的示意图
产生Huffman编码需要对原始数据扫描两遍。第一遍扫描要精确地统计出原始数据中,每个值出现的频率,第二遍是建立Huffman树并进行编码。由于需要建立二叉树并遍历二叉树生成编码,因此数据压缩和还原速度都较慢,但简单有效,因而得到广泛的应用。
2.7 系统开发理论流程
2.7.1 颜色转换及采样
(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了,图像大大缩小,如果想减小图像的失真度,则可行方向不抽样或列方向不抽样。
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 哈夫曼编码
哈夫曼编码是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。它使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。编码表是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

VC++基于JPG标准的图像压缩算法+代码+论文 第7页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。