基于离散余弦变换的自适应图像压缩算法∗
2021-07-16李鹏,史峰
李 鹏,史 峰
(1.南京信息工程大学,江苏省气象探测与信息处理重点实验室,江苏 南京 210044;2.南京信息工程大学滨江学院,江苏 无锡 214105;3.南京信息工程大学,江苏省气象传感网技术工程中心,江苏 南京 210044)
图像压缩技术分为有损压缩和无损压缩[1],伴随5G 时代的到来,图像数据量将达到一个全新的高度,国内外研究学者对于图像压缩技术的研究也从未停止。Kadhim[2]利用二维离散小波变换中多分辨率特性和时频局部化特性通过安排和识别比特流中的不同分辨率来产生高度可伸缩的比特流从而起到压缩的效果。Alshorman[3]通过Frei-Chen 基技术和改进的游程编码(RLE)对图像进行压缩,利用Frei-Chen 技术将平均子空间应用于3×3 的块,利用单个值代替最高能量的块。Mohammed[4]提出了一种基于离散傅里叶变换(Discrete Fourier Transform,DFT)和矩阵最小化(Matrix Minimization,MM)算法的高分辨率图像压缩算法。郑运平[5]提出基于迭代控制搜索策略的快速分形图像压缩算法,通过设置搜索终止条件,去除低效搜索和无效搜索达到降低计算复杂度的目的。张茗茗[6]提出了基于自适应搜索的绝对矩块截断编码压缩算法,其实现方法是根据中值来确定搜索范围和图像中心阈值,根据图像的中心阈值来寻找与上下中心距离偏差值之和最小的所有像素,在降低复杂度的同时较好地提升图像质量。
本文通过对离散余弦变换(Discrete cosine transform,DCT)[7]与离散小波变换(Discrete wavelet transform,DWT)[8]方法进行计算效率和压缩质量的对比,发现影响图像编码的主要原因是量化器和熵编码器的区别而非DCT 和DWT 的区别[9]。由于离散余弦变换计算量小且对硬件的兼容性好,DCT 在一些当代图像和视频压缩标准(如JPEG)中得到广泛应用[10]。因此提出了一种基于DCT 变换的自适应有损压缩方法。
1 离散余弦变换
离散余弦变换是一种正交变换,该变换来源于离散傅里叶变换,由于DCT 算法比DFT 操作简单且计算量小,因此常被用于图像处理和语音信号处理方面。信号经过DCT 变换从时域转换为频域具有“能量集中”的特性,这也是量化的基础。
在使用DCT 对彩色图像进行处理时,由于彩色图像的颜色值分布为0~255,而DCT 处理的范围为-127~128,因此在DCT 变换前需编码进行减128的操作,在解码时执行加128 的操作。快速DCT 及其反变换的定义如式(1)、式(2)。
式中:
Fxy为原始图像数据,Xuv为DCT 变换后数据,图像分块规则可以为8×8、16×16、32×32,遇到图像像素不足时补零。以8×8 为例,每个块看成二维坐标中64 个点,快速DCT 是将这64 个点数据作为输入信号分解为64 个规范正交基信号,输出的64 个基信号幅度组合被称为DCT 系数。在这个二维坐标中(0,0)称为直流系数DC,剩余63 个点称为交流系数AC。
2 基于DCT 的自适应扫描算法
本文所提出的有损压缩算法主要是无损编码器的设计,预处理后的图像数据经过阈值量化后,利用四种曲线对每个块DCT 系数扫描并转化为NZ 和IDX 两个矢量。根据本文编码规则选择编码占位最少的曲线作为该块的扫描编码曲线,利用自适应方式达到进一步压缩图像的目的。该算法整体实现流程图如图1 所示。
图1 算法运行流程图
2.1 图像预处理
图像RGB 空间存在过多的冗余性,需进行RGB到YCbCr 颜色空间转换,转换后的YCbCr 图像能量主要集中于Y 平面内。因此可以在不损失整个压缩图像质量的前提下实现在Cb 和Cr 平面上达到高压缩比。表1 给出了测试图像在RGB 和YCbCr 空间中的能量分布。
表1 RGB 和YCbCr 测试图像能量分布单位:%
不同平面能量计算公式如式(4)、式(5)。式中ER、EG、EB分别为红绿蓝平面的空间能量,ERGB、EYCbCr分别为两种颜色空间总能量,EY、ECb、ECr分别代表亮度、蓝色色度、红色色度平面的空间能量,M、N表示图像尺寸。
为了降低计算量,在对图像进行DCT 前需要先对图像Y、Cb、Cr 平面进行分块,每个分块都必须经过DCT、阈值量化处理,量化使用均匀标量量化器[11]。压缩方法的评价指标主要有压缩比和重建图像的质量,本文分别使用单位像素深度(bits per pixel,bpp)和峰值信噪比(PSNR)作为压缩比和图像重建质量的衡量指标。bpp 和PSNR 计算公式如式(6)(7)。为了评估重建图像的质量,还考虑到图像结构相似性(Structural Similarity Index,SSIM)和特征相似度(Feature Similarity,FSIM),SSIM 和FSIM可以很好地用来评估压缩后的图像质量。
式中:MSE 为图像R、G、B 平面的均方误差。
式中:I和K分别为原始和重构图像的R、G、B 平面,N和M为图像尺寸。
2.2 无损自适应编码器
无损自适应编码器结合自适应扫描和RLE 技术,经过阈值处理和量化步骤,得到DCT 系数。首先,对DCT 系数块进行排序,并在扫描后将其转换为矢量。在本文算法实现过程中分别采用Zig-Zag、Hilbert、水平、垂直四种扫描方式对预处理后的数据矩阵进行扫描处理并生成矢量数据。为了能够有效且快速地对DCT 系数矢量进行编码,每次扫描结束编码器都会生成两个矢量。分别为NZ 向量,用来存储保留的DCT 数值中非零的数值;IDX 向量,用来记录并存储两个非零数值之间零的个数。因为非零数值的个数是确定的,所以使用IDX 向量中最大值作为一个特征量,选取IDX 向量最大值中的最小值对应曲线作为最佳扫描曲线对数据进行编码。
算法中自适应的实现是由于每个DCT 块独立编码,每个块都进行四次扫描,只选择最佳的扫描曲线,形成了一个DCT 块自动选择的模式,也称自适应选择。正因为每个DCT 块独立编码,因此,在本算法中需要引入全局标头的概念,用来控制编码和解码过程,全局标头由三部分组成:
(1)每个块的NZ 系数大小Li,参数Li用P位编码;
(2)每个块的最佳扫描曲线ASi,由于采用四种扫描方式,所以需要使用2 位编码;
(3)编码每个块IDXi向量时所需的位数qi,qi用P位编码。
参数P和qi的计算公式如式(9)、式(10),其中n为分块大小。max(IDXi)为最佳扫描曲线对应非零数值之间零的个数的最大值。
自适应编解码实现过程如图2 所示。在编码端使用2 位对四种扫描曲线进行编码(编码格式为00、01、10、11),对预处理后的图像使用四种扫描曲线进行扫描,将扫描后生成的矢量数据分为NZi和IDXi两组向量。对四组IDX 最大值比较选择最小数值对应曲线作为最佳扫描曲线,并将最佳扫描曲线的编码存入ASi中,编码后的图像数据流由定义控制位的全局标头和NZi、IDXi组成。图像数据流格式如图3 所示。
图2 自适应编解码实现流程图
图3 图像数据流格式
对编码后的数据进行解码时需要先读取全局标头,根据全局标头中定义的控制位信息进行解码并将解码后的DCT 块初始化为零,同时生成解码后的NZi向量DecNZi,将DecNZi向量填充进DecNZi块中实现整个解码过程。
2.3 直流系数编码
直流系数是块内所有图像采样值的平均值,因此,交流系数与直流系数分开处理。通常,图像中相邻块的直流分量之间具有高度的相关性。因此对直流系数采用差分直流编码比编码量化后的直流系数本身更有效,并且可以获得较高的压缩包比。熵编码是任何压缩算法的重要步骤,它通过向量统计特性对差分直流编码后的数据编码从而实现额外的压缩。图3 可以看出,图像数据流之间存在很大差异。因此,算术编码器作为熵编码器分别应用于全局标头、NZ 向量和IDX 向量的每个部分对它们进行编码,从而实现无损压缩。
2.4 算法示例描述
随机抽取Lena 灰度图中的随机8∗8 块为例阐述本文算法具体过程。
经过本文DCT、量化、阈值处理后,该图像块数据变为:
采用之字形扫描方式举例阐述NZ 与IDX 向量的阐述原理,如图4 所示。
图4 NZ 和IDX 生成规则
2.5 算法流程
2.5.1 编码算法
(1)对图像进行预处理(包含分块、DCT、量化、阈值处理);
(2)按照四种扫描方式(Zig-Zag、垂直、水平、Hilbert)扫描预处理后的数据并生成四组向量;
(3)生成包含非零DCT 系数及其指标的向量NZi和idxNZi以及非零DCT 系数前0 的个数的向量IDXi;
(4)寻找最佳扫描曲线。
2.5.2 解码算法:
(1)读取解码块的NZ、IDX 向量;
(2)读取ASi选择相应的扫描顺序;
(3)将解码后的DCT 块初始化为0;
(4)生成解码后的NZ 向量DecNZ;
(5)用DecNZ 向量填充DecDCT 块。
3 仿真结果及分析
将上述举例数据在Q=7,n=8 的条件下分别采用文中四种扫描曲线进行扫描,生成四组IDXi向量数值如图5 所示。
从图5 可以看出,在对该块进行扫描后,Zig-Zag扫描曲线所生成向量中的最大值在四组曲线中最小,所以选择该曲线作为最佳扫描曲线对该块进行编码。通过数值计算进一步验证本文算法的优越性。Q=7,n=8,P=log2(8×8)=6 bit,q1=[log2(9)]=4,所以用P位编码为“000100”,L1=16,用P位编码为“010000”。
图5 四种扫描曲线值
因此编码该块需要位数为:m=P+2+P+(Q×L1)+(q1×L1) =190 bit。全局标头以“010000 00 000100”开始。与类似的方法进行对比,文献[12]需要207 bit,文献[13]需要190 bit,RLE[14]需要294 bit。
为了验证本文提出的压缩算法,本研究进行了两组实验,第一组实验使用了文献中广泛使用的7幅测试彩色图像。这些彩色图像分别是512∗512的“Airplane”、“Peppers”、“Lina”,以及大小为256∗256 的“Girl”、“Couple”、“House”和“Zelda”。第二组实验使用了Kodak 无损真彩色图像数据库。对7 幅测试图像采用不同块大小(8∗8、16∗16、32∗32)和不同量化器宽度Q(7,8,9)。
图6(a)为在不同Q情况下bpp 和PSNR 的平均性能,可以看出Q=8 时性能最好,图6(b)为Q=8 时不同分块大小时bpp 和PSNR 的平均性能,可以看出,在Q=8,16∗16 情况下图像性能最好。
图6 PSNR 与bpp 在图像上的平均表现
将实验结果(Q=8,块大小16 ∗16) 与dLUT[12]、CDABS[13]、JPEG[15]、CBTF-PF[15]比较,见表2、表3。基于这些数据,不难看出本文方法在性能方面的优越性。
表2 与CDABS 和dLUT 性能比较
表3 与JPEG 和CBTF-PF 性能比较
图7 给出了本算法对512×512 的Lena 图像的可视化结果,其中PSNR=30.78,bpp =0.67,SSIM=0.9852,FSIM=0.9834。表4 给出了Lena 图像对比结果。
图7 效果对比图
表4 Lena 图像性能分析对比
为了进一步证明,将所提出的方法在Kodak 真彩色图像数据库上与Hops 编码器、LHE、JPEG2000和JPEG 进行了比较,如图8 所示。从图8(a)和图8(b) 的曲线可以看出,与JPEG[15]、Hops 编码器[17]、LHE[18]和JPEG2000[18]相比,该方法对于小于0.5 bpp 情况下,本文方法给出的PSNR 虽然比Hops 编码器少,但是FSIM 方面整体显著提高,在大于0.5 bpp 情况下,本文方法给出的PSNR 和FSIM均高于引用方法。从这些曲线中可以看出本文方法要优于引用方法。
图8 Kodak 图像数据库测试图像的平均性能
上述实验运行环境为Intel I5-8400@2.8GHz,12G RAM,MATLAB(R2018a)。产生上述差异的主要原因在于本文的编码器的自适应特性,能够在传统算法的基础上更加灵活地选择合适的扫描曲线,使得DCT 系数能够最大化节约编码资源,起到进一步压缩图像的目的。这就使得在相同压缩比情况下本文算法拥有更高的清晰度,保留更多的图像细节。因此,图像的bpp、PSNR、SSIM 参数表现较好。表5 给出了本文方法在Kodak 数据库使用不同图像质量的性能。
表5 本文方法性能分析
4 结束语
本文提出了一种彩色图像压缩算法,通过离散余弦变换结合自适应的方法实现了对图像的压缩,算法可应用于智能识别中敏感图像压缩传输与存储,从而进一步节约传输带宽和存储容量。通过上述实验结果表明,本文算法通过自适应方式选择最佳扫描曲线使得在相同压缩比情况下比JPEG 算法在PSNR、SSIM、FSIM 性能上均得到明显提升。自适应所带来的计算量可通过较小的编码占位来弥补,保障了在时间相同的情况下,压缩效果更好。在下一步的工作中将对算法复杂度进行优化改进,从而进一步提高压缩效率。