1 内容介绍
随着互联网技术及通讯技术的快速发展,数字图像被广泛使用.对数字图像的压缩技术是数字图像处理技术中的关键技术之一.本文介绍了一种基于离散余弦变换(DCT)频域变换方法,使用该方法对数字图像进行图像数据的压缩.该方法用MATLAB仿真软件对实验测试的数字图像进行压缩,对比不同压缩比下的压缩图像进行分析,通过实验仿真结果得出离散余弦变换应用在数字图像压缩中有良好的效果.该方法具有操作简单,处理速度快,易于操作,压缩图像质量高等优点.
基于离散余弦变换DCT图像压缩方法的流程如图1所示,其算法步骤主要分为以下几步:第一步要将被压缩的图像进行分块处理,通常将图像分为8×8的图像子块。接下来第二步将对分好的每个子块进行离散余弦变换,变换后的图像低频部分都大部分集中在图像频谱图中的左上角处,而高频部分基本集中在频谱图的右下角区域中。由于数字图像中的主要数据信息都是低频的信息,主要存在低频部分,所以对应的离散余弦变换后的低频系数较大。高频部分包含的信息量小,对应的DCT系数比较小可以忽略。在数字图像压缩中,对图像的频谱图像的低频部分进行保留处理,及保存CDT变换后系数较大的部分,将高频系数较小的那部分舍弃,通常情况下人的眼睛对高频的信息不敏感,从而当高频部分被舍弃,人眼也很难察觉到有失真。在数字图像传输过程中,就是利用这个压缩特点,将图像变换后的高频信号系数舍去进行压缩数据的传输,当接收到图像压缩数据后需要还原图像,将压缩的图像数据进行离散余弦反变换恢复到原有的图像数据值。在这过程中图像会有一定的数据丢失,但是人眼还是无法直接看出。这就实现了数字图像压缩传输的目的。其次是进行DCT系数的量化,对图像进行量化将会导致图像的质量下降,图像经过DCT变换后,DCT系数的幅度可能较大,因此需要量化系数不为零的系数项减小其系数的幅度,有些高频系数可以量化为零,增加系数为零项的数目。在量化过程中,通常将低频部分的量化阈值系数设为较小的数值,最大限度地保留数字图像原有的主要数据信息。在高频部分设置系数阈值时,一般都将高频系数值设为零。一般情况下量化的阈值选定直接导致压缩的效果,即在图像的压缩比与图像质量之间的取舍,量化的阈值越大,图像的压缩比越高。通常情况下想要获得更好的图像压缩质量,则需要综合考虑设置合理的量化阈值对图像进行压缩处理。在量化编码过程中,其中DC为图像的直流分量,DC分量包含了图像频谱的主要部分,也包含了图像的主要信息,对其系数进行编码的系数一般取值较大。
2 仿真代码
% Calculate the compression ratio
% between the original images and the compressed images;
function comp_ratio = Compratio(orig_image, comp_image)
% Calculate how many bits should be used to represented the original images
% and store it in the variable B0
clear tempmatr1;
tempmatr1 = ceil(log2(orig_image+1));
clear sizevector1;
sizevector1 = size(orig_image);
[rownum, colnum] = size(sizevector1);
while colnum >1
clear tempmatr2;
tempmatr2 = sum(tempmatr1);
clear tempmatr1;
tempmatr1 = tempmatr2;
colnum = colnum -1;
end
B0 = sum(tempmatr1);
% Calculate how many bits should be used to represented the compressed images
% and store it in the variable B1
clear tempvec1;
tempvec1 = find(comp_image<0);
clear tempmatr1;
if sum(tempvec1) == 0
tempmatr1 = ceil(log2(comp_image+1));
else
tempmatr1 = ceil(log2(abs(comp_image)+1))+1;
end
clear sizevector1;
sizevector1 = size(comp_image);
[rownum, colnum] = size(sizevector1);
while colnum >1
clear tempmatr2;
tempmatr2 = sum(tempmatr1);
clear tempmatr1;
tempmatr1 = tempmatr2;
colnum = colnum -1;
end
B1 = sum(tempmatr1);
comp_ratio = B0/B1;
3 运行结果
4 参考文献
[1]赵文俊, 董慧敏, 朱智民. 基于Matlab的JPEG图像压缩编码仿真实现[J]. 机电工程, 2007, 24(10):3.
[2]刘羽飞. "基于离散余弦变换的数字图像压缩算法实现." 无锡职业技术学院学报 16.1(2017):4.