当前位置:文档之家› 基于DCT变换的图像压缩编码

基于DCT变换的图像压缩编码

基于DCT变换的图像压缩编码
基于DCT变换的图像压缩编码

《电子线路设计与制作》报告

目录

1.绪论 (1)

2.设计任务 (2)

2.1 任务描述 (2)

2.2 技术指标 (2)

3.设计原理 (3)

3.1 原理框图 (3)

3.2 程序流程图 (4)

3.3 离散余弦变换 (5)

3.4 量化 (6)

3.4 Z形游程编码 (7)

4.运行结果及分析 (8)

4.1 不同量化系数图像编解码效果比较 (8)

4.2 不同文件类型图像编解码比较 (10)

5.总结 (12)

6.参考文献 (13)

附录 (14)

1.绪论

MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平[1]。

随着信息技术的发展,图像信息被广泛应用于多媒体通信和计算机系统中,但是图像数据的一个显著特点就是信息量大。具有庞大的数据量,如果不经过压缩,不仅超出了计算机的存储和处理能力,而且在现有的通信信道的传输速率下,是无法完成大量多媒体信息实时传输的,因此,为了更有效的存储、处理和传输这些图像数据,必须对其进行压缩,因此有必要对图像压缩编码进行研究。由于组成图像的各像素之间,无论是在水平方向还是在垂直方向上都存在着一定的相关性,因此只要应用某种图像压缩编码方法提取或者减少这种相关性, 就可以达到压缩数据的目的。

数字图像包含的冗余信息一般有以下几种:空问冗余、时间冗余、信息熵冗余、统计冗余、结构冗余、视觉冗余以及知识冗余等。图像压缩算法就是要在保证图像一定的熏建质量的同时,尽可能多的去除这些冗余信息.以达到对图像压缩的目的。随着科学技术的发展,图像压缩编码技术越来越引起人们的关注。所谓的图像压缩编码技术就是对要处理的图像数据按一定的规则进行变换和组合, 从而达到以尽可能少的数据流来表示尽可能多的数据信息。本设计基于DCT的JPEG、PNG、BMP等格式图像编解码设计算法进行研究,介绍了编码中DCT 变换、量化、游程编码等模块的原理和数学推导以及各模块的功能分析。最后应用MATLAB进行了实验仿真并分析结果得出结论。

DCT变换后具有绝对的去相关性,并且变换后的矩阵从左上角到右下角频率规律的渐高。有损压缩方法利用了人类视觉对图像中的某些频率成分不敏感的特性,允许压缩过程中损失一定的信息;虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响较小,却换来了大得多的压缩比。因此舍弃高频分量保留低频分量的做法对于图像压缩具有绝对的优势。只要损失的数据不太影响人眼主观接收的效果,就可采用。DCT变换后的压缩此本设计采用经典的游程编码实现。

2.1 任务描述

基于DCT的图像编解码设计

(1)获取图像;

(2)采用DCT实现对图像编解码设计;

(3)分析编解码性能

2.2 技术指标

(1)可对JPEG、PNG、BMP等格式图像进行基于DCT的图像编解码;

(2)为了便于分析比较,定义一个量化系数quotiety,越大压缩率越高。

(3)压缩编码、量化系数统一写入存储文件compressed_data.mat,实现可移植解压。

(4)观察压缩后图片大小,简便起见,分析只关心compressed_data.mat文件的大小。

(5)实现DCT变换和反变换以及JPEG标准量化矩阵的量化、反量化。

(6)根据DCT量化后矩阵特点,本设计编码采用Z字型扫描游程编码、解码。

(7)DCT压缩前后比较,以及不同量化系数比较

3.1原理框图

基于DCT的图像编码包括三个阶段:DCT变换、量化、编码。根据DCT 量化后矩阵特点,本设计编码采用Z字型扫描游程编码、解码。

首先将输入图像颜色空间转换后分解为8×8大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即8×8空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进行量化,最后将变换得到的量化的DCT系数进行编码和传送,这样就完成了图像的压缩过程。

图3-1 编码过程

基于DCT的图像编码包括三个阶段:译码、反量化、IDCT变换。

在解码过程中,形成压缩后的图像格式,先对已编码的量子化的DCT系数进行解码,然后求逆量化并把DCT系数转化为8×8样本像块(使用二维DCT反变换),最后将操作完成后的块组合成一个单一的图像。这样就完成了图像的解压过程。

图3-2 解码过程

3.2 程序流程图

基于DCT的图像编解码设计的MATLAB实现的流程图如图3-3所示。

图3-3程序流程图

3.3 离散余弦变换

DCT变换利用傅立叶变换的性质。采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。

DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。在空间上具有强相关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。图像经DCT变换以后,DCT系数之间的相关性就会变小。而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。

从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为8*8或16*16块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;接收者通过对量化的DCT系数进行解码,并对每个图像块进行的二维DCT反变换。最后将操作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大多数DCT系数值都接近于0,所以去掉这些系数不会对重建图像的质量产生较大影响。因此,利用DCT进行图像压缩确实可以节约大量的存储空间。在实验中,先将输入的原始图像分为8*8的小块,然后再对每个块进行二维DCT变换。

二维离散余弦变换可以写成矩阵式

(F(u,v))=(A)(f(x,y))(A)’

(f(x,y))=(A)’(F(u,v))(A)

式中,(f(x,y))是空间域数据阵列,(F(u,v))是变换系数阵列,(A)是系数阵列,变换矩阵(A)’是(A)的转置[5]。

设计中2维DCT变换函数代码如下:

function Xpq=DCT2_function(xmn,M)

T=dctmtx(M); %产生二维DCT变换矩阵

Xpq=T*xmn*T';

设计中2维IDCT变换函数代码如下:

function xmn_resume=IDCT2_function(Xpq_resume,M)

T=dctmtx(M); %生成变换矩阵

xmn_resume=T'*Xpq_resume*T; % 用变化矩阵的乘法代替效率极低的for求和循环

3.4 量化

在DCT处理中得到的64个数据中,低频分量包含了图像亮度等主要信息。在从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起人眼的注意,所以在重建图像时,低频分量的重要性高于高频分量。因而在编码时可以忽略高频分量,即减小非“0”系数的幅度以及增加“0”值系数的数目,从而达到压缩的目的,这也是量化的根据和目的,也是图像质量下降的最主要原因。

在JPEG标准中,用具有64个独立元素的量化表来规定DCT域中相应的64个系数的量化精度,使得对某个系数的具体量化阶取决于人眼对该频率分量的视觉敏感程度。理论上,对不同的空间分辨率、数据精度等情况,应该有不同的量化表。不过,一般采用下图所示的量化表,可取得较好的视觉效果。量化化就是用DCT变换后的系数除以量化表中相对应的量化阶后四舍五入取整。由于量化表中左上角的值较小,而右下角的值较大,因而起到了保持低频分量、抑制高频分量的作用。

为了便于分析比较,定义一个量化系数quotiety,越大压缩率越高。量化系数quotiety:程序中是将JPEG标准量化矩阵* quotiety作为真正的量化矩阵。quotiety 取值为大于1的任意实数。本设计中利用函数integral_function.m和

deintegral_function实现量化和反量化。

图3-4 灰度值量化表

量化会产生误差,上表是综合大量的图像测试的实验结果,对于大部分图像都有很好的结果[3]。表中可以看出,高频部分对应的量化值大,目的就是将高频部分编程接近于0,以便以后处理。JPEG可以在压缩比和图像质量间作取舍。方法就是改变量化系数。如果量化值放大,则有更多的系数值为0,提高了压缩比。

3.4 Z形扫描游程编码

DCT系数量化后,构成一个稀疏矩阵,用Z(Zigzag)形扫描将其变成一维数列,将有利于游程编码。Z形扫描的顺序如图3-4。

图3-5 Z形扫描顺序图

游程编码是一种统计编码,该编码属于无损压缩编码,是栅格数据压缩的重要编码方法。游程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。只在各行或者各列数据的代码发生变化时,一次记录该代码及相同代码重复的个数,从而实现数据的压缩。游程编码运算简单,适用于机器存储容量小,数据需大量压缩,而又要避免复杂的编码和解码运算,增加处理和操作时间的情况[2]。本设计中利用两个函数

Run_length_coding_function.m和Run_length_decoding_function.m分别实现Z字形游程的编码解码。

由于DCT变换后右下角频率高,左上角频率分量低。而人眼对高频成分识别小,对低频成分识别大。量化后0主要集中在右下方,于是Z字形扫描对于游程编码才有利[4]。主要思路是将原矩阵的每个元素变化为用两个元素[a,b]表示,a表示在这个元素之前0的个数,b表示这个元素是什么。当发现之后的多有元素都是0的时候用[0,0]作为结束标志。这样,只要矩阵中0的个数超过一半,编码后数据量就比原来小。

由于在8*8中连续出现不为0的相同元素的几率极小,因此运用游程编码的思想时只考虑出现的0的个数。

4.运行结果及分析

4.1 不同量化系数图像编解码效果比较

量化系数quotiety:程序中是将Jpeg标准量化矩阵* quotiety作为真正的量化矩阵。quotiety取值为大于1的任意实数。

下面以JPEG格式图像为标准,取不同的量化系数quotiety进行比较,原始图像大小为18.2KB:

图4-1原始图像

图4-2 quotiety=1时恢复图像

此时压缩编码文件为compressed_data大小为14.0KB。

图4-3 quotiety=2时恢复图像

此时压缩编码文件为compressed_data大小为10.0KB。

图4-4 quotiety=5时恢复图像

此时压缩编码文件为compressed_data大小为6.26KB。

图4-5 quotiety=10时恢复图像

此时压缩编码文件为compressed_data大小为4.02KB。

结论:量化系数quotiety越大,压缩率越高,图像恢复的效果也越差。

量化会产生误差,如果量化值放大,则有更多的灰度值变为0,能够提高压缩比。

4.2 不同文件类型图像编解码比较

量化系数quotiety都取5时,对不同文件类型的lena图进行编解码

图4-6 原始图像

下面为JPEG的lena图编码的解码恢复图像:

图4-7 JPEG格式的恢复图像

下面为BMP的lena图编码的解码恢复图像:

图4-8 BMP格式的恢复图像

下面为PNG的lena图编码的解码恢复图像:

图4-9 PNG格式的恢复图像

观察三个恢复图像,在原始图像相同的情况下,三种文件格式下编解码解码效果无太大差异。当量化系数quotiety取其他值时,三种文件格式编码解码效果也相同。由此可知,该系统可以用于JPEG、BMP、PNG等文件的压缩编码和解码,且编码解码效果相同。

5.总结

本次信息处理系统综合训练让我更熟悉地掌握MATLAB的功能,灵活运用MATLAB,加强对MATLAB软件图像处理的能力,掌握图像的离散余弦变换对图像进行压缩,以及游程编码等概念。在熟悉掌握MATLAB程序和操作的同时培养了我的独立思考能力,钻研精神,解决问题能力和动手能力。

虽然在此之前通过基础强化训练运用国MATLAB 软件并完成简单图像操作,但知道的只是最基本的的应用,对于MATLAB 在图像处理上的应用,我完全没有理解。本次课程设计中通过查阅资料,阅读程序并读写程序对MATLAB 图像应用有了更深的了解。我同时也认识到了MATLAB 功能并不只是图形的绘制及波形的处理,有着很多方面的运用,如绘制函数,处理音频、图像数据,创建用户界面等功能,实为一个功能强大的软件。在课设过程中每每编写程序及操作时出现问题,我都会通过查阅资料,仔细检查解决问题,经过一次次的修改完善,才出现最终的最优结果。在这个过程中,面对问题不放弃不急躁,一次次改进,静下心来慢慢解决,并细致完善细节,从而能培养一种良好的学习心态和习惯。

数据压缩技术的优劣主要是由压缩所能达到的压缩倍数、从压缩后的数据所能恢复的图像的质量和算法的复杂度、解码的速度等方面来衡量的。基于DCT 的混合编码技术对于图像的压缩倍数可以达到几十倍甚至上百倍,而且重建的图像又具有较高的质量,因此得到广泛的应用。用MATLAB来实现离散余弦变换的图像压缩,具有方法简单、速度快、误差小的优点,免去了大量的矩阵计算,大大提高了图像压缩的效率和精度。

6.参考文献

[1] 张秋臣.浅谈MATLAB分析及UG的运动仿真[期刊论文]- 锦绣,2013.04.

[2] 祝本明,刘桂华. 一种改进的游程编码算法[期刊论文]- 西南科技大学学报,

2007.03.

[3] https://www.doczj.com/doc/1312736400.html,/p-392409581.html.

[4] https://www.doczj.com/doc/1312736400.html,/p-013657840724.html.

[5] 杨杰,黄朝兵.数字图像处理及MATLAB实现.北京:电子工业出版社,

2011.01;

附录:

Main_Menu.m

k=menu('请选择需要的功能',' 图像压缩',' 图像解压');

switch k

case 1

DCT_compress;

Main_Menu;

case 2

IDCT_decompress;

Main_Menu;

end

DCT_compress.m

%主要思想:

%--->读取图像文件

%--->分块DCT变换

%--->Jpeg标准量化表量化

%--->Z字形游程编码

%--->存储压缩后的文件

clear all;clc;

global quotiety;

[FileName,PathName,FilterIndex]=uigetfile('*.bmp;*.jpg;*.png','请选择要压缩的源图像');

string=sprintf('%s%s',PathName,FileName);

quotiety=inputdlg('系数越大压缩率越高','输入您需要的压缩系数:',1,{'1'});

h=waitbar(0,'正在压缩,请稍候……');

quotiety=str2num(cell2mat(quotiety));

I=imread(string);

I=rgb2gray(I);

xmn=double(I);

figure;imshow(I);

title('原始图像');

[M,N]=size(xmn);

waitbar(1/4,h);

Xpq=blkproc(xmn,[8 8],'DCT2_function',8); % 每一小块DCT变换

waitbar(2/4,h);

Xpq_estimate=blkproc(Xpq,[8 8],'integral_function'); %量化表量化

waitbar(3/4,h);

for index1=1:1:M/8

for index2=1:1:N/8 %对每一小块游程编码,结果存在cell数组Xpq_coded 里

Xpq_coded{index1,index2}=int8(Run_length_coding_function(Xpq_estimate(8*(ind ex1-1)+1:8*index1,8*(index2-1)+1:8*index2)));

end

end

waitbar(4/4,h);

close(h);

uisave({'Xpq_coded', 'quotiety'},'compressed_data'); %存储编码后的信息、量化系数

figure;imshow(Xpq_estimate);

title('压缩图像');

DCT2_function.m

function Xpq=DCT2_function(xmn,M)

T=dctmtx(M); %产生二维DCT变换矩阵

Xpq=T*xmn*T';

intergral_function.m

function Xpq_estimate=integral_function(Xpq)

integral_table=[16,11,10,16,24,40,51,61;

12,12,14,19,26,58,60,55;

14,13,16,24,40,57,69,56;

14,17,22,29,51,87,80,62;

18,22,37,56,68,109,103,77;

24,35,55,64,81,104,113,92;

49,64,78,87,103,121,120,101;

72,92,95,98,112,100,103,99]; %量化矩阵

global quotiety

Xpq_estimate=int8(Xpq./(integral_table*quotiety)); %此处的量化系数表示除以的Jpeg标准量化矩阵的倍数

Run_length_coding_function.m

%由于DCT变换后右下角频率高,左上角频率分量低。而人眼对高频成分识别小,对低频成分识别大

%量化后0主要集中在右下方,于是Z字形扫描对于游程编码才有利

%主要思想:原矩阵的每个元素变化为用两个元素【a,b】表示,a表示在这个元素之前0的个数,

% b表示这个元素是什么。当发现之后的多有元素都是0的时候用【0,0】作为结束标志。

function Xpq_coded=Run_length_coding_function(Xpq_estimate)

table=[1,1;1,2;2,1;3,1;2,2;1,3;1,4;2,3;

3,2;4,1;5,1;4,2;3,3;2,4;1,5;1,6;

2,5;3,4;4,3;5,2;6,1;7,1;6,2;5,3;

4,4;3,5;2,6;1,7;1,8;2,7;3,6;4,5;

5,4;6,3;7,2;8,1;8,2;7,3;6,4;5,5;

4,6;3,7;2,8;3,8;4,7;5,6;6,5;7,4;

8,3;8,4;7,5;6,6;5,7;4,8;5,8;6,7;

7,6;8,5;8,6;7,7;6,8;7,8;8,7;8,8];%64*2的矩阵,表明Z字形压缩的行走路径Xpq_coded=[;]; %存储编码后的结果

count=0;

compress_index=1;

for index=1:1:64 %扫描

if Xpq_estimate(table(index,1),table(index,2))==0 %如果遇到了0,那么下一个数字到来之前的0的个数就加1

count=count+1;

else %如果遇到的不是0,那么Xpq_coded=(,)的第一个元素存储之前0

的个数,第二个元素存储此时遇到的这个元素

Xpq_coded(compress_index,1)=count;

Xpq_coded(compress_index,2)=Xpq_estimate(table(index,1),table(index,2));

count=0; %过去这个元素之后0的个数就要重新计

compress_index=compress_index+1;

end

if ~count==0

Xpq_coded(compress_index,1)=0;

Xpq_coded(compress_index,2)=0;

end

end

IDCT_decompress.m

%主要思想:

%跟压缩过称恰好相反

%--->读取压缩文件

%--->Z字形游程解码

%--->Jpeg标准量化表反量化

%--->分块DCT变换

%--->存储解压后的文件

clear all;clc;

global quotiety;

uiload;

h=waitbar(0,'正在解压,请稍候……');

Xpq_decoded=Xpq_coded;

clear Xpq_coded;

[M,N]=size(Xpq_decoded);

waitbar(1/4,h);

%游程解码得到Xpq_deestimate

for index1=1:1:M

for index2=1:1:N

Xpq_deestimate(8*(index1-1)+1:8*index1,8*(index2-1)+1:8*index2)=Run_length_d

ecoding_function(Xpq_decoded{index1,index2});

end

end

waitbar(2/4,h);

%反量化得到幅频值

Xpq_resume=blkproc(Xpq_deestimate,[8 8],'deintegral_function');

waitbar(3/4,h);

%DCT逆变换得到xmn

xmn_resume=blkproc(Xpq_resume,[8 8],'IDCT2_function',8);

xmn_resume=uint8(xmn_resume);

waitbar(4/4,h);

close(h);

figure;imshow(xmn_resume);

title('恢复的图像');

IDCT2_function.m

function xmn_resume=IDCT2_function(Xpq_resume,M)

T=dctmtx(M); %生成变换矩阵

xmn_resume=T'*Xpq_resume*T; % 用变化矩阵的乘法代替效率极低的for求和循环

deintegral_function.m

function Xpq_resume=deintegral_function(Xpq_deestimate)

integral_table=[16,11,10,16,24,40,51,61;

12,12,14,19,26,58,60,55;

14,13,16,24,40,57,69,56;

14,17,22,29,51,87,80,62;

18,22,37,56,68,109,103,77;

24,35,55,64,81,104,113,92;

49,64,78,87,103,121,120,101;

72,92,95,98,112,100,103,99];

global quotiety;

Xpq_resume=Xpq_deestimate.*integral_table*quotiety;%反量化恢复的过程要考虑到量化系数quotiety的影响

Run_length_decoding_function.m

%与Run_length_coding_function完全相逆的过程解码,此处不再赘述function Xpq_deestimate=Run_length_decoding_function(Xpq_decoded)

table=[1,1;1,2;2,1;3,1;2,2;1,3;1,4;2,3;

3,2;4,1;5,1;4,2;3,3;2,4;1,5;1,6;

2,5;3,4;4,3;5,2;6,1;7,1;6,2;5,3;

4,4;3,5;2,6;1,7;1,8;2,7;3,6;4,5;

5,4;6,3;7,2;8,1;8,2;7,3;6,4;5,5;

4,6;3,7;2,8;3,8;4,7;5,6;6,5;7,4;

8,3;8,4;7,5;6,6;5,7;4,8;5,8;6,7;

7,6;8,5;8,6;7,7;6,8;7,8;8,7;8,8];

[cols,tmp]=size(Xpq_decoded);

Xpq_deestimate(1:8,1:8)=0;

decompress_index=1;

for index=1:1:cols

if Xpq_decoded(index,2)==0

elseif Xpq_decoded(index,1)==0

Xpq_deestimate(table(decompress_index,1),table(decompress_index,2))=Xpq_decod ed(index,2);

decompress_index=decompress_index+1;

else

decompress_index=decompress_index+Xpq_decoded(index,1);

Xpq_deestimate(table(decompress_index,1),table(decompress_index,2))=Xpq_decod ed(index,2);

decompress_index=decompress_index+1;

end

end

基于MATLAB 的图像压缩处理其实现

基于MATLAB 的图像压缩处理及其实现 一.图像压缩的概念 从实质上来说,图像压缩就是通过一定的规则及方法对数字图像的原始数据进行组合和变换,以达到用最少的数据传输最大的信息。 二.图像压缩的基本原理 图像数据之所以能被压缩,就是因为数据中存在着大量冗余信息,另外还有相当数量的不相干信息,这为数据压缩技术提供了可能。 数据压缩技术就是利用数据固有的冗余性和不相干性,将一个大的数据文件转化成较小的文件,图像技术压缩就是要去掉数据的冗余性。 图像数据的冗余主要表现为:图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。 由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。

三.图像的编码质量评价 在图像编码中,编码质量是一个非常重要的概念,怎么样以尽可能少的比特数来存储或传输一幅图像,同时又让接收者感到满意,这是图像编码的目标。对于有失真的压缩算法,应该有一个评价准则,用来对压缩后解码图像质量进行评价。常用的评价准则有两种:一种是客观评价准则;另一种是主观评价准则。主观质量评价是指由一批观察者对编码图像进行观察并打分,然后综合所有人的评价结果,给出图像的质量评价。而对于客观质量评价,传统的编码方法是基于最小均方误差(MSE)和峰值信燥比(PSNR)准则的编码方法,其定义如下 MSE= (1) PSNR=101g( (2) 式中:Nx,Nr图像在x方向和Y方向的像素数,f(i,j)——原图像像素的灰度值,f(i,j)--处理后图像像素的灰度值。对于主观质量,客观质量评价能够快速有效地评价编码图像的质量,但符合客观质量评价标准的图像不一定具有较好的主观质量,原因是均方误差只是从总体上反映原始图像和压缩图像的差别,但对图像中的所有像点同等对待,因此并不能反映局部和人眼的视觉特性。对于图像信号,人眼是最终的信号接受者,因此在压缩时不仅要以MSE作为评价标准,还应当考虑到人的主观视觉特性。

图像压缩方法综述

图像压缩方法综述 陈清早 (电信科学技术研究院PT1400158) 摘要:图像压缩编码技术就是对要处理的图像数据按一定的规则进行变换和组合,从而达到以尽可能少的数据流(代码)来表示尽可能多的数据信息。由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。图像压缩分为无损图像压缩和有损图像压缩或者分为变换编码、统计编码。在这里,我们简单的介绍几种几种图像压缩编码的方法,如:DCT编码、DWT编码、哈夫曼(Huffman)编码和算术编码。 关键字:图像压缩;DCT压缩编码;DWT压缩编码;哈夫曼编码;算术编码 1引言 在随着计算机与数字通信技术的迅速发展,特别是网络和多媒体技术的兴起,大数据量的图像信息会给存储器的存储容量、通信信道的带宽以及计算机的处理速度增加极大的压力。为了解决这个问题,必须进行压缩处理。图像数据之所以能被压缩,就是因为数据中存在着冗余。图像数据的冗余主要表现为:图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。信息时代带来了“信息爆炸”,使数据量大增,无论传输或存储都需要对数据进行有效的压缩。因此图像数据的压缩就显得非常重要。 在此,我们主要介绍变换编码的DCT编码和DWT编码和统计编码的哈夫曼(Huffman)编码和算术编码。 2变换编码 变换编码是将空域中描述的图像数据经过某种正交变换转换到另一个变换域(频率域)中进行描述,变换后的结果是一批变换系数,然后对这些变换系数进行编码处理,从而达到压缩图像数据的目的。主要的变换编码有DCT编码和DWT编码 1.1DCT编码 DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。在空间上具有强相关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。也就是说,图像变换本身并不能压缩数据,但变换后图像大部分能量集中到了少数几个变换系数上,再采用适当的量化和熵编码便可以有效地压缩图像。量化是对经过DCT变换后的频率系数进行量化,其目的是减小非“0”系数的幅度以及增加“0”值系数的数目,它是图像质量下降的最主要原因。 图像经DCT变换以后,DCT系数之间的相关性就会变小。而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为8*8或16*16块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;接收者通过对量化的DCT系数进行解码,并对每个图像块进行的二维DCT反变换。最后将操作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大多数DCT系数值都接近于0,所以去掉这些系数不会对重建图像的质量产生较大影响。因此,利用DCT进行图像压缩确实可以节约大量的存储空间。 由于图像可看成二维数据矩阵,所以在图像编码中多采用二维正交变换方式,然而其正交变换的计算量太大,所以在实用中变换编码并不是对整幅图像进行变换和编码,而是将图像分成若

基于MATLAB-的图像压缩处理及其实现

基于MATLAB-的图像压缩处理及其实现

基于MATLAB 的图像压缩处理及其实现 一.图像压缩的概念 从实质上来说,图像压缩就是通过一定的规则及方法对数字图像的原始数据进行组合和变换,以达到用最少的数据传输最大的信息。 二.图像压缩的基本原理 图像数据之所以能被压缩,就是因为数据中存在着大量冗余信息,另外还有相当数量的不相干信息,这为数据压缩技术提供了可能。 数据压缩技术就是利用数据固有的冗余性和不相干性,将一个大的数据文件转化成较小的文件,图像技术压缩就是要去掉数据的冗余性。 图像数据的冗余主要表现为:图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。 由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。

三.图像的编码质量评价 在图像编码中,编码质量是一个非常重要的概念,怎么样以尽可能少的比特数来存储或传输一幅图像,同时又让接收者感到满意,这是图像编码的目标。对于有失真的压缩算法,应该有一个评价准则,用来对压缩后解码图像质量进行评价。常用的评价准则有两种:一种是客观评价准则;另一种是主观评价准则。主观质量评价是指由一批观察者对编码图像进行观察并打分,然后综合所有人的评价结果,给出图像的质量评价。而对于客观质量评价,传统的编码方法是基于最小均方误差(MSE)和峰值信燥比(PSNR)准则的编码方法,其定义如下 MSE=1 NxNy ∑∑[f(i,j)?f(i,j)]2 Nj j=0 Ni i=0 (1) PSNR=101g(255×255 MSE ) (2) 式中:Nx,Nr图像在x方向和Y方向的像素数,f(i,j)——原图像像素的灰度值,f(i,j)--处理后图像像素的灰度值。对于主观质量,客观质量评价能够快速有效地评价编码图像的质量,但符合客观质量评价标准的图像不一定具有较好的主观质量,原因是均方误差只是从总体上反映原始图像和压缩图像的差别,但对图像中的所有像点同等对待,因此并不能反映局部和人眼的视觉特性。对于图像信号,人眼是最终的信号接受者,因此在压缩时不仅要以MSE作为评价标准,还应当考虑到人的主观视觉特性。

基于奇异值分解的图像压缩处理

矩阵奇异值分解在图像压缩中的应用 电子科技大学 微固学院 贾旺旺 [摘要]本文首先介绍了矩阵的奇异值分解(SVD)定理,然后讨论了基于矩阵奇异值分解的图像压缩编码原理,最后文中给出了实例,并用matlab 编程实现了图像的压缩和重构,发现随着图像压缩比的减小,图像传输时间增大,但重构后得到的图像失真度减小了。 [关键词]奇异值分解 图像压缩 压缩比 一.引言 随着网络的快速发展,数据量的增长也十分迅速,这使人们必须想办法如何能以最少的存储空间,最大的传输效率来进行数据的存储和传输。如在宇航中,拍摄得到的图像文件一般都比较大且数量也很多,它的存储,传输和处理会受到一定的限制,因此图像压缩就显得格外重要。图像压缩技术就是要减少图像数据中的冗余信息从而以更加高效的格式存储和传输数据。 图像压缩的基本方法包括无损压缩的行程长度编码,熵编码法;有损压缩的色度抽样法,变换编码,分形压缩等。近几年,基于矩阵奇异值分解的图像压缩方法也得到了很多学者的关注[1] 。因为图像的像素点具有矩阵的结构,我们可以利用奇异值分解来对任意阶数的矩阵操作。本文就是利用了矩阵的奇异值分解,达到了图像压缩的目的。 二. 矩阵奇异值分解原理[2] 引理 1 的非零特征值相同 的特征值均为非负实数,则有 设H H H H H H n m r AA A A AA A A AA rank A A rank A rank C A ,)3(,)2()()()()1(==∈? ) ()()()(00)(0 0)()1(:1111111A A rank A rank A A rank A rank Ax Ax Ax Ax A x Ax A x X k n Ax A k A A rank H H H H H H H H H =?≤?=?==?=?-=?=维,记为的解空间为设证明0 ),(),(),(),(0)2(≥?===≤?=λααλλααααααλααA A A A A A H H

基于MATLAB-的图像压缩处理和其实现

基于MATLAB 的图像压缩处理及其实现一.图像压缩的概念 从实质上来说,图像压缩就是通过一定的规则及方法对数字图像的原始数据进行组合和变换,以达到用最少的数据传输最大的信息。 二.图像压缩的基本原理 图像数据之所以能被压缩,就是因为数据中存在着大量冗余信息,另外还有相当数量的不相干信息,这为数据压缩技术提供了可能。 数据压缩技术就是利用数据固有的冗余性和不相干性,将一个大的数据文件转化成较小的文件,图像技术压缩就是要去掉数据的冗余性。 图像数据的冗余主要表现为:图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。 由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。 三.图像的编码质量评价 在图像编码中,编码质量是一个非常重要的概念,怎么样以尽可能少的比特数来存储或传输一幅图像,同时又让接收者感到满意,这是图像编码的目标。对于有失真的压缩

算法,应该有一个评价准则,用来对压缩后解码图像质量进行评价。常用的评价准则有两种:一种是客观评价准则;另一种是主观评价准则。主观质量评价是指由一批观察者对编码图像进行观察并打分,然后综合所有人的评价结果,给出图像的质量评价。而对于客观质量评价,传统的编码方法是基于最小均方误差(MSE)和峰值信燥比(PSNR)准则的编码方法,其定义如下 MSE= (1) PSNR=101g( (2) 式中:Nx,Nr图像在x方向和Y方向的像素数,f(i,j)——原图像像素的灰度值,f(i,j)--处理后图像像素的灰度值。对于主观质量,客观质量评价能够快速有效地评价编码图像的质量,但符合客观质量评价标准的图像不一定具有较好的主观质量,原因是均方误差只是从总体上反映原始图像和压缩图像的差别,但对图像中的所有像点同等对待,因此并不能反映局部和人眼的视觉特性。对于图像信号,人眼是最终的信号接受者,因此在压缩时不仅要以MSE作为评价标准,还应当考虑到人的主观视觉特性。 四.图像压缩的基本方法 1.基于dct变换的图像压缩 1.1 基于DCT的图像压缩编码思想 在编码过程中,首先将输入图像分解成8×8 大小的数

相关主题
文本预览
相关文档 最新文档