基于PNM图像的DCT变换

很早以前的一篇博文,导到cu来。
------------------------------------------------

       本周释出一篇较水的半科普性质半技术性质的文章,很菜,以期对图像处理入门阶段的朋友有点用。


多媒体系统的发展给图像视频编码带来了很大的影响,随着网络数量、设备类型、媒体内容格式的不断增加,不同系统和网络之间的相互作用变得更加重要[1]。为了屏蔽通信网络、终端设备的异构性,为用户提供优质的多媒体服务,通常需要使用到转码技术。转码就是把一种格式的信号转换为另一种格式的信号[2],它给异构网络之间、不同类型用户设备之间以及不同媒体内容格式之间提供了无缝链接。为了实现不同编码格式的图像转换,可以采用解码与编码级联或者耦合的方式。对于非快速(无实时性要求的)图像/视频转码可以采用级联方式进行,使用某一种标准格式作为转换的中间格式类型。PNM标准是一种比较早出现的至今仍比较流行的用于图像转码的中间位图标准。

变换编码技术是图像/视频编码中比较活跃的一项关键技术,其目的是在数字图像的存储与传输中取得高效压缩比,它一直是人们研究的热点。在目前的图像/视频压缩标准中,常用的变换编码方法多为函数变换编码方法。其基本原理是通过正交函数变换把图像从空间域转换到能量保持、比较集中且不相关的变换域(如频率域),然后只对集中了大部分能量的少许的那部分变换系数加以编码,以消除图像空间冗余[3]。DCT变换编码技术已经得到了广泛和成熟的应用。

本文主要针对PNM格式的图像进行DCT变换编码的研究。



1  图像转码的中间位图标准PNM

PBM(Portable BitMap),PGM(Portable GreyMap),PPM(Portable PixMap)三种位图标准起源于pbmplus工具包的开发,这三种标准统称为PNM。pbmplus现在改由netpbm开源项目组维护,该项目的目的是提供一组实现各种格式的图像之间的相互转换接口,以及提供实现对图像本身进行处理,比如缩放、拼接、镜像等,的工具包[8]。

各种格式图像之间的转换,如果进行直接的两两转换,则需要N2个接口;如果使用某种中间标准类型的格式作为中间语言,则只需要2×N个接口[9]。如今,图像格式繁杂多样,格式间的两两转换开发和维护的难度都相对较大,若使用中间格式标准则会相对容易实现。出于这种想法,pbmplus使用PNM作为图像转换的中间语言,开发了一系列的接口工具。

PNM是比较朴素的、容易读取写入的格式标准。它并没有考虑数据压缩的问题,所以有些时候,它仅作为一种图像转换时的中间数据格式来操作,这一点对PBM格式来说尤为显著,PBM被建议只在文件中转中使用。

下面对PNM进行简要的介绍,因为PBM、PGM和PPM的标准非常类似,只对其中的PGM进行着重说明。

PNM文件由两部分构成:文件头和数据区。在文件头中给出图像格式(被称作magic number的格式标识)、图像行像素数、图像列像素数,以及图像的颜色灰度取值最大值(使用十进制表示,PBM中没有该项);这几个部分的数据可以使用空白符隔开,在文件头中可以出现用“#”引导的注释。数据区和文件头使用回车(carriage returns)或者换行(line feeds)隔开,数据区中按照从上到下,自左向右的数据依次存储图像中的像素对应的数据;数据的存储方式可以采用整数,也可以采用ASCII二进制类型,由文件头中的格式信息指示;数据8bit算作一个byte,对于颜色灰度最大值小于256的用一个byte存储一个数据值,大于256小于65536(颜色灰度等级取值的上界)的使用两个byte存储。

PBM只支持单色的位图,数据区中的像素数据用0(白)或者1(黑)表示;PGM支持灰度图像,数据区中的像素数据取值在0到颜色灰度最大值之间;PPM增加了对RGB信息的支持,可以表示彩色图片,数据区中每个像素数据的存储要依次对应R、G、B三个分量数据。   

现给出一个使用整数编码的PGM图像例子,如图1。格式标识是P2说明该图像是采用整数编码数据的PGM图像,如果是P5则是二进制编码数据的PGM图像。

图1 整数编码的PGM实例



1  离散余弦变换(DCT)

变 换编码主要由映射变换、量化及编码几部分的操作组成。映射变换是把图像中的各个像素从一种空间变换到另一种空间,以产生一系列更加有效的变换系数,为数据 压缩提供条件和可能,然后再对这些变换系数进行量化与编码处理,使得编码所需的总比特数比对原始图像直接进行编码所需的总比特数要少得多,达到对海量图像 数据进行压缩的目的。

离散余弦变换是由离散傅立叶变换(DFT)发展过来的,由于离散傅立叶变换在数字信号处理频谱分析等领域中已成为有力的数学工具,但其缺点是复数域运算,运算量太大以至难以实时处理,为克服这些缺点,1974年,Ahmed等人构造了一种实数域变换——DCT[4]。由于该变换性能很适用于人类语言及图象信号的特点,从这个意义上,DCT常常被认为是接近K-L变换性能的准最佳变换。

DCT本身并不能压缩数据,但是它为压缩提供了可能。通过DCT,再利用人眼对于低频数据敏感而对高频数据不敏感的特性,可以消除图像空间冗余。DCT是目前在图像压缩领域得到广泛应用的一种正交变换,是JPEG和MPEG的变换编码标准的一部分。

在图像编码技术中,时域中的图像被视为二维信号。DCT变换因而是将二维时域像素值变换成二维频域系数,即2D-DCT。在第一代图像编码技术中,DCT变换基于8×8的像素块进行。在 MPEG-4中,DCT变换编码也基于8×8像素块进行。因此本文主要针对8×8像素块上的2D-DCT进行说明。

点击查看:DCT变换说明。

虽然DCT算法得到了广泛的应用,但是DCT算法仍有许多需要改进的地发。DCT算法是一种有损耗的压缩方式,虽然这对于很多应用是可以允许的,但还有一些应用却不允许有任何的图象失真,比如医学图象和遥感图象。若一定要用浮点型DCT来实现无损压缩,就存在一个残差图象的编码问题,这必然导致无损编码的效率下降,因此,就需要实现可逆的整数变换。另外,现在DCT算法大都针对长度为2m提出的,而在实际应用中,为了获得最佳的整体系统性能往往需要使用各种非2m长度的DCT,如在MPEG-4的任意对象编码中对象边缘宏块变换。为了利用2m长度的DCT快速算法处理这类非2m长度的DCT,需要对数据进行延拓,这不仅引起变换误差,同时也降低了计算效率。因此需要改进许多非2m长度的DCT变换[5]。


1  DCT编解码流程和图像质量评估方法

1.1      DCT编解码流程

使用DCT和量化变换进行图像压缩的流程[6]可以表示为图2:

图2 使用DCT进行图像压缩的步骤

前文中提到过,DCT本身并不实现任何的压缩功能,真正实现数据空间去冗的是量化变化操作(Quantizer)。在进行量化时,使用统计表中的量化系数,对DCT的系数阵进行整除。统计表中的数据是一组经验数据,多是根据频域数据的统计学概率分析获得的。由于高频数据出现较少,对应在DCT系数阵中的数值较小,在该操作中很可能被消去为0。对得到的量化数据进行无损熵编码以便于数据存储和传输,从而获得了压缩后的图像数据。

使用反离散余弦变换(IDCT)和反量化变换将压缩图像数据重构为原始图像的流程可以表示为图3:

图3 使用IDCT进行图像重构的步骤

在进行图像重构解码时,首先对熵编码的数据进行解码。随后进行反量化操作,反量化使用统计表中的量化系数去乘解码数据,此时数据经过了整除、整乘的操作,有一部分数据可能会丢失,这就是损失产生的原因,表现在图像上会出现马赛克的效果。最后反量化后的数据经过IDCT得到重构的图像。

1.2      图像质量评估

对于有损压缩进行重构图像的质量评估有多种方法,本文采用PSNR方法。PSNR是最常用的图像质量评估方法,它是“Peak Signal to Noise Ratio”的缩写。作为一种客观评估方法,PSNR被应用在MPEG Video Group为MPEG-1,MPEG-2和MPEG-4等标准开发的压缩工具中;ISO在制定JPEG标准,ITU-T在指定H.261,H.263标准时也都采用了PSNR方法[7]。

点击查看:公式说明。



2  针对PNM图像的DCT实验

本文针对PNM图像进行了DCT的编码解码实验(程序使用C语言实现),现对一幅PGM图像给出实验数据,并进行简要分析说明。

输入数据使用图4(a)所示的PGM格式的lena图像。以5作为量化步长,在1~255之间对lena.pgm进行DCT编解码的实验。图4(b)、(c)和(d)分别是在量化系数为60、120和180时的重构图效果,对应的PSNR值分别是26.191、22.874和21.071。从中可以看出,量化系数越大,重构后的图像马赛克效应越明显,即损失的信息量越多,使用PSNR方法对重构后的图像质量评价数值也就越低。从中可以看出,量化系数越大,重构后的图像马赛克效应越明显,即损失的信息量越多,使用PSNR方法对重构后的图像质量评价数值也就越低。实验结果也反过来验证了程序的正确性。


图4 lena.pgm的实验结果

3  结束语

本文在阐述图像转码中间位图标准PNM的基础上,重点介绍了2D- DCT变换的原理及其在图像/视频压缩中的重要作用。分析了DCT编解码的基本流程,并基于PNM图像使用C语言实现了DCT编解码程序。给出了实验的数据以及相应的分析说明。本文所作的工作为进一步研究编解码技术的打下了一定基础。

 

参考文献

[1] Vetro A, Christopulos C, Sun H. Video transcoding architectures and techniques : An overview [ J ]. IEEE Signal Process, 2003, 20(2 ): 18 - 29.

[2] XIN Jun, LIN Chia - wen, SUN Ming - ting. Digital Video Transcoding [ J ]. Proceeding of IEEE, 2005, 93(1) : 84 - 97.

[3] 张荣芬, 李良荣, 杨鲁平. 基于MPEG-4的DCT变换编码技术研究. 贵州大学学报 自然科学版, 2007年1月; 第 24卷(1) : 78-82

[4] Ahmed N T, Natarajan, Rao K R. Discrete cosine transform. IEEE Trans. Comput.1974,23(Jan):90-93

[5] 程睿. DCT算法研究及其IP核实现. 西安电子科技大学, 10701/TP751,2006年

[6] Noel E.O’ Connor. Image and Video Compression. 1. Dublin City University: Dublin City University. 2000:74-84

[7] Noel E.O’ Connor. PSNR: a measure of image quality. 1. Dublin City University : Dublin City University . 2004:1-2

[8] Netpbm. http://netpbm.sourceforge.net/

[9] PPM / PGM / PBM image files. http://local.wasp.uwa.edu.au/%7Epbourke/dataformats/ppm/



作者: legumen   发布时间: 2010-12-19