APP下载

基于JPEG标准的图像压缩技术的研究

2012-03-12戴微微杨铭

中国新技术新产品 2012年11期
关键词:数组像素点像素

戴微微 杨铭

(吉林电子信息职业技术学院,吉林 吉林 132021)

1 研究的背景与目的

随着多媒体技术的快速发展,静止图像的应用越来越广泛。它的应用主要集中在图像的存储和图像的传输两方面,从具体应用中我们可以发现静止图像占用了越来越多的资源。在这样的背景条件下,静止图像的压缩成为了一个研究的热点。目前静止图像的压缩算法以JPEG(Joint Photographic Experts Group)和JPE G2000为主。JPEG压缩格式是目前图像处理领域里面用得最广泛的一种图像压缩方式,本文主要就JPEG标准对图像进行编、解码的研究。主要应用是图像信息的传输和存储,可广泛地应用于广播电视、电视会议、计算机通讯、传真、多媒体系统、医学图像、卫星图像等领域。压缩编码的方法有很多,主要分成以下四大类:(1)象素编码;(2)预测编码;(3)变换编码;(4)其它方法。

2 系统功能模块设计

根据系统功能的要求,可将系统分解成几个功能模块来分别设计。JPEG的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也正是JPEG有高压缩比的原因。其编码器的流程如下。

图JPEG编码器流程

3 系统总体设计

本系统采用VC++来实现。系统实现的各个步骤如下。

3.1 读取BMP图像信息,获取图像行像素和列像素数值,在BMP图像中,图像数据是以倒序存放的。亦即实际图像第一行资料存放在BMP图像数据矩阵的最后一行,依次类推,所以取资料的时候要从BMP图像数据矩阵的最后一行开始读起,把数据存放在新建数组(或称矩阵)的第一行,一直取完。BMP图像行像素和列像素的数值分别存于文件头信息的第18和22字节。从Cimage类中可得到Width(图像宽度)和hight(图像高度)的数值。

3.2 得到Pwidth*Phight后便得知BMP图像的像素点大小,而数据矩阵(三基色,RGB矩阵)的大小是Pwidth*Phight*3,因为每一个像素点都含有RGB三个数据,我们要处理的是数据矩阵而不是像素点矩阵。所以,新建数组的大小是(Pwidth*3)*Phight。

3.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的简写。

3.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系数矩阵。

3.5 量化

读取Y矩阵中第一个8*8块,与量化系数矩阵中对应的相乘,得到的值覆盖回原矩阵,然后做第二个8*8块,一直到做完全部8*8块,然后做CbCr矩阵的量化,用另外一个系数矩阵。

3.6 “之”字形扫描

3.7 哈夫曼编码

哈夫曼编码时必须判断一个个DC(AC)的值,以及转换成二进制代码后的码长,再去对照哈夫曼编码表进行编码,比如对一个DC值编码,首先得先判断该DC的值在哪段范围内,在某一段范围内的数值,其二进制代码长相等。并要让程序知道该DC的值到底为多少,然后才能进行编码。

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

[1]张旭东,卢国栋,冯健.图像编码基础和小波压缩技术——原理、算法和标准[M].北京:清华大学出版社,2004。

[2]钟玉琢.多媒体技术[M].北京:清华大学出版社,1999.

[3]黎洪松.数字图象压缩编码技术及其C语言程序范例[M].北京:学苑出版社,1998.

[4]林福宗.图象文件格式大全[M].北京:清华大学出版社,1998.

[5]郎锐.数字图像处理的Vc++实现[M].北京:北京希望电子出版社,1996.

猜你喜欢

数组像素点像素
赵运哲作品
像素前线之“幻影”2000
JAVA稀疏矩阵算法
JAVA玩转数学之二维数组排序
基于5×5邻域像素点相关性的划痕修复算法
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割
Excel数组公式在林业多条件求和中的应用
寻找勾股数组的历程