完整版DCT变换与KLT变换在图像压缩中的应用.docx

上传人:b****7 文档编号:25653109 上传时间:2023-06-11 格式:DOCX 页数:25 大小:240.83KB
下载 相关 举报
完整版DCT变换与KLT变换在图像压缩中的应用.docx_第1页
第1页 / 共25页
完整版DCT变换与KLT变换在图像压缩中的应用.docx_第2页
第2页 / 共25页
完整版DCT变换与KLT变换在图像压缩中的应用.docx_第3页
第3页 / 共25页
完整版DCT变换与KLT变换在图像压缩中的应用.docx_第4页
第4页 / 共25页
完整版DCT变换与KLT变换在图像压缩中的应用.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

完整版DCT变换与KLT变换在图像压缩中的应用.docx

《完整版DCT变换与KLT变换在图像压缩中的应用.docx》由会员分享,可在线阅读,更多相关《完整版DCT变换与KLT变换在图像压缩中的应用.docx(25页珍藏版)》请在冰豆网上搜索。

完整版DCT变换与KLT变换在图像压缩中的应用.docx

完整版DCT变换与KLT变换在图像压缩中的应用

 

DCT变换与KLT变换在图像压缩中的应用

 

专业:

电子与通信工程

学号:

1621302616213024

姓名:

 

DCT变换与KLT变换在图像压缩中的应用

1报告简介

随着数据化时代的开启,图像压缩技术越来越成熟并且应用越来越广泛,本文在研究近年来图像压缩一般方法的基础上,介绍了基于DCT变换的图像压缩的基本原理及其实现步骤,以及扩展研究了KL变换的图像压缩方法,并使用MATLAB,针对同一幅原始图像进行不同方法的压缩比较,给出了实验仿真结果。

本论文首先提出了用MATLAB来实现DCT变换的数字图像压缩技术,方法简单,快速,且误差小。

然后介绍了KLT图像压缩编码的具体过程和方法。

最后分析了图像经过2种压缩方法时,图像质量的变化情况。

2算法原理

2.1DCT算法原理

DCT变换利用傅立叶变换的性质。

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

DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。

变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。

在空间上具有强相关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。

我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。

图像经DCT变换以后,DCT系数之间的相关性就会变小。

而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。

从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。

为此,发送者首先将输入图像分解为

块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;接收者通过对量化的DCT系数进行解码,并对每个图像块进行的二维DCT反变换。

最后将操作完成后所有的块拼接起来构成一幅单一的图像。

对于一般的图像而言,大多数DCT系数值都接近于0,所以去掉这些系数不会对重建图像的质量产生较大影响。

因此,利用DCT进行图像压缩确实可以节约大量的存储空间。

基于DCT的JPEG图像压缩编码算法原理可用图1表示:

(a)编码器

 

(b)解码器

图1DCT算法原理框图

在编码过程中,首先将输入图像颜色空间转换后分解为8×8大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即8×8空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进行量化,量化过程实际上就是对DCT系数的一个优化过程,它是利用了人眼对高频部分不敏感的特性来实现数据的大幅简化。

量化过程实际上是简单地把频率领域上每个成份,除以一个对于该成份的常数,且接着四舍五入取最接近的整数。

这是整个过程中的主要有损运算。

量化是图像质量下降的最主要原因。

量化后的数据,有一个很大的特点,就是直流分量相对于交流分量来说要大,而且交流分量中含有大量的0。

这样,对这个量化后的数据如何来进行简化,从而再更大程度地进行压缩呢。

将量化后的系数进行“Z”字形编排,这样做的特点就是会连续出现多个0,即充分利用相邻两图像块的特性,来再次简化数据,从而再更大程度地进行压缩。

最后将变换得到的量化的DCT系数进行编码和传送,这样就完成了图像的压缩过程。

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

这样就完成了图像的解压过程。

一个

的二维DCT

的定义如下:

(1)

对应的

块的二维IDCT则为:

(2)

式中,空域的

,频域的

取值集合均为

,其中:

(3)

将离散余弦变换变换写为矩阵形式为:

(4)

(5)

其中,

正交变换矩阵,

原图像块,

变换域图像块。

2.2KLT算法原理

KLT变换又称Hotelling变换,特征向量变换或主分量方法。

KL变换是遥感图像增强和信息提取中用得最多的线性变换,是对原波段图像进行波谱信息的线性投影变换,在尽可能不减少信息量的前提下,将原图像的高维多光谱空间的像元亮度值投影到新的低维空间,减少特征空间维数,达到数据压缩、提高信噪比、提取相关信息、降维处理和提取原图像特征信息的目的,并能有效地提取影像信息。

它可使原来多波段图像经变换后提供出一组不相关的图像变量,最前面的主分量具有较大的方差,包含了原始影像的主要信息,所以要集中表达信息,突出图像的某些细部特征,可采用主分量变换来完成。

KL变换是图像压缩中的一种最优正交变换。

KLT的突出优点是去相关性好,它根据具体的图像统计特性来决定它的变换矩阵,对图像有最好的匹配效果,能将信号在变换域的相关性全部解除,是最小均方误差下的最佳变换。

KLT原理框图可表示为:

图2KLT算法原理框图

KLT变换就是对8x8的图像矩阵求自协方差矩阵,对自协方差矩阵做特征值分解,得到由特征值从小到大排列的对角矩阵,和由特征向量组成的矩阵,特征矩阵与图像矩阵做乘法,称为正交变换,即KL变换,的到的新的矩阵每一行称为一个新的变量,其中第一行几乎包含了总方差

以上的信息,其余行包含的信息依次减少,新矩阵的个元素之间是不相关的,因而KL变换去掉了变量之间的相关性。

KLT是对向量

做的一个正交变换

,目的是变换到

后去除数据相关性。

其中,

特征向量组成的矩阵,满足

,当

都是实数时,

是正交矩阵。

表示向量

的平均值,

的协方差矩阵记为

,通过变换

,得到:

(6)

写成矩阵形式:

(6)

由此可见,做了KLT变换之后呢,

成为了对角阵,也就是对于任意

,有

,当

,因此利用KLT去除了数据相关性。

而且,

的方差与

协方差矩阵的第

个特征值相等即

3仿真分析

利用MATLAB对算法进行仿真分析,测试环境为:

操作系统为Win7,CPU为i5-3210M,内存为4GB,使用的MATLAB版本为R2012b。

利用MATLAB产生仿真图形界面如图3所示。

图3DCT和KLT仿真图形界面设计

3.1DCT仿真分析

输入一幅图像,通过改变DCT量化值进行图像压缩,同时,利用相关参数对图像质量进行对比分析,图4为经过DCT压缩的效果对比图。

(a)原始图像(b)量化程度为16

(c)量化程度为32(b)量化程度为64

图3运用DCT变化进行图像压缩效果对比图

通过肉眼观察,可以发现量化程度越大图像越清晰,反之,越模糊,细节信息越差。

采用不同的量化程度可以改变图像的清晰度及文件的大小,本文将利用图像的相关性能参数对压缩图像进行比较。

图像的方差、平均梯度、信息熵及对比度与图像质量正相关。

图像方差越大,表明图像灰度层次越丰富;平均梯度越大,图像层次越多;信息熵越大,表明图像的信息量越大。

通过表1,可以清晰地看出量化程度越大,得到的压缩图像性能越好,相对的图像大小也增大,但原图相比,图像性能变化不明显,但压缩效果明显。

表1DCT变换得到压缩图像性能参数比较

方差

平均梯度

信息熵(bit)

文件大小(KB)

图3(a)

1.9545e+03

5.4304

7.1771

26.4

图3(b)

1.8785e+03

3.4470

7.1412

9.82

图3(c)

1.9011e+03

4.1021

7.1538

12

图3(d)

1.9167e+03

4.3852

7.1558

12.7

3.2KLT仿真分析

利用KLT算法对图4(a)图进行图像压缩得到图5。

(a)量化程度为16(b)量化程度为32

(c)量化程度为32(b)量化程度为64

图4运用KLT变化进行图像压缩效果对比图

从图像的方差、信息熵及平均梯度对图像性能进行分析,得到表2。

表2KLT变换得到压缩图像性能参数比较

方差

平均梯度

信息熵(bit)

文件大小(KB)

图3(a)

1.9545e+03

5.4304

7.1771

26.4

图4(a)

1.8484e+03

2.8865

7.1226

9.21

图4(b)

1.8759e+03

3.6847

7.1404

11.4

图4(c)

1.9031e+03

4.3225

7.1561

12.8

图4(d)

1.9212e+03

4.4588

7.1563

12.8

由表2可以得到KLT变换可以对图像进行压缩,并且采用相同的量化程度,DCT比KLT变化效果较好。

5总结

本文叙述的图像压缩编码算法,DCT是正交变换,它可以将8*8图像的空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,因此它在软件中容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。

由实验仿真结果可知,当图像压缩比增大时,也即压缩效率减小时,图像的质量也将降低,人们可以根据需要的图像的质量来规定压缩比的大小。

图像经过不同的压缩比后,图像的质量变化的同时,图像的信噪比也跟着变化。

压缩比增大时,则在信道传输的时候丢失的信息就越多,这样使得信号与噪声的比值变小。

利用DCT变换进行图像压缩可以节约大量的存储空间。

压缩应该在最合理地近似原图像的情况下使用最少的系数。

由于之前存在对KLT变换的误解,在进理论补充后,发现该方法并不能全部消除变换后系数间的相关性,各数据块之间相关性没有消除,数据块也可能存在极弱的相关性。

由于水平有限,并不能解决,即使如此,该方法应用于图像的压缩编码中效果也极其明显。

KLT没有快速算法,因此对信息量大的图像编码速度比较慢,但在此次试验中用的是较小的图像,所以处理速度效果不明显。

参考文献

[1]NAhmed,TNatarajan,K.T.Rao.Discretecosinetransform[J].IEEETran.OnComputers,1974,

C-23:

90-93.

[2]全子一.图像信源压缩编码及信道传输理论与新技术[M].北京:

北京工业大学出版社,

2006.

[3]何小海,主编.数字图像通信及其应用[M].成都:

四川大学出版社,2006.

[4]罗开仲,黄士坦,杨华民.DCT算法及其与小波编码在图像处理中的比较[J].计算机技术

与发展,2006,16(9).

[5]XiongZ,OrchardM,GuleryuzO.ADCT-basedembeddedimagecoder[J].IEEESignal

ProcessingLetters,1996,11(3):

289-290.

[6]ShaorongChang,LawrenceCarin,AmodifiedSPIHTalgorithmforimagecodingwith

ajointMSEandclassificationdistortionmeasure[J].IEEETransactionsonImage

Processing,2006,15(3):

713-725.

 

附录:

MATLAB代码

%%主程序

clc;

clear

I=imread('football.jpg');

clfreset

set(gcf,'unit','normalized','position',[0.1,0.2,0.45,0.45]);%设置图形窗大小

set(gcf,'defaultuicontrolunits','normalized');

set(gcf,'defaultuicontrolfontsize',11);

set(gcf,'defaultuicontrolfontname','楷书');

set(gcf,'defaultuicontrolhorizontal','left');

%set(gcf,'menubar','none');%删除图形窗工具条

str='KLTDCT性能比较';

set(gcf,'name',str,'numbertitle','off');%书写图形窗名

z=32;

str1='量化程度';

htext=uicontrol(gcf,'style','text',...%制作静态说明文本框

'position',[0.1,0.8,0.33,0.1],...

'string',[str1,sprintf('%1.4g\',z)]);

hslider=uicontrol(gcf,'style','slider',...%创建滑动键

'position',[0.1,0.6,0.8,0.1],...

'max',64,'min',0,...%设最大阻尼比为2,最小阻尼比为0.02

'sliderstep',[1/64,1/64],...%箭头操纵滑动步长1%,游标滑动步长5%

'Value',32);%缺省取阻尼比等于0.5

set(hslider,'callback',[...%操作滑动键,引起回调

'z=get(gcbo,''value'');',...%获得滑动键状态值

'callcheck(htext,str1,z)']);%被回调的函数文件

hpush=uicontrol(gcf,'Style','push',...%制作与列表框配用的按键

'position',[0.1,0.05,0.18,0.15],'string','原始图像');

set(hpush,'callback','jpeg_show(I)')

hpush=uicontrol(gcf,'Style','push',...%制作与列表框配用的按键

'position',[0.4,0.05,0.18,0.15],'string','KLT');

set(hpush,'callback','jpeg_klt(I,z)')

hpush=uicontrol(gcf,'Style','push',...%制作与列表框配用的按键

'position',[0.7,0.05,0.18,0.15],'string','DCT');

set(hpush,'callback','jpeg_dct(I,z)')

%灰度图像的klt正反变换

functiony=klt(x,mask)

IM=x;%读取图像

IM=im2uint8(IM);

%若图像尺寸不是8的整数倍,补0,补成8的整数倍

[cc1,cc2]=size(IM);%cc1为IM的行数,cc2为IM的列数

a=8-mod(cc1,8);

b=8-mod(cc2,8);

cc3=cc1+a;

cc4=cc2+b;

IM(cc3,cc4)=IM(cc1,cc2);

IM(1:

cc1,cc2+1:

cc4)=IM(1:

cc1,cc2-b+1:

cc2);

IM(cc1+1:

cc3,1:

cc2)=IM(cc1-a+1:

cc1,1:

cc2);

IM(cc1+1:

cc3,cc2+1:

cc4)=IM(cc1,cc2);

%若图像尺寸不是8的整数倍,补成8的整数倍

k=1;

forl1=1:

8:

(cc3-7)%将图像矩阵--8X8的矩阵存起来

forl2=1:

8:

(cc4-7)

F(:

:

k)=IM(l1:

l1+7,l2:

l2+7);

k=k+1;

end%将图像矩阵--8X8的矩阵存起来

end

F=uint8(F);

k=k-1;

qq=k;

d=0;

d=uint32(d);

IM=uint32(IM);

forn1=1:

cc3%求均值

forn2=1:

cc4

d=IM(n1,n2)+d;

end

end

d=d/(cc1*cc2);

d=uint8(d);%求均值

IM=uint8(IM);

B2=zeros(64);

jz=d;%jz为灰度均值

foree=1:

qq

A=F(:

:

ee);

TZZ;%调用函数求一个8X8的矩阵的特征矩阵

B2=B2+B;

end

B=B2/ee;%B为均方差矩阵

[V,D]=eig(B);%求特征向量与特征值

Q=V';

fork=1:

qq

A=F(:

:

k);

ee=1;

forn1=1:

8%将元素变换成一维

forn2=1:

8%将元素变换成一维

X(ee,1)=A(n1,n2);

YSZ(ee,1)=mask(n1,n2);%YSZ为mask变换成的一维数组

ee=ee+1;

end%将元素变换成一维

end%将元素变换成一维

X=double(X);

Y=Q*X;%变换后的矩阵放在Y中

Y=flipud(Y);

Y=Y.*YSZ;

Y=flipud(Y);

X1(:

:

k)=Q'*Y;%求还原后的矩阵

end

k=1;

forl1=1:

8:

(cc3-7)%将矩阵8X8矩阵放入IM2中

forl2=1:

8:

(cc4-7)%将矩阵8X8矩阵放入IM2中

H2=X1(:

:

k);

ee=1;

forn1=1:

8

forn2=1:

8

C2(n1,n2)=H2(ee,1);

ee=ee+1;

end

end

IM2(l1:

l1+7,l2:

l2+7)=C2;

k=k+1;

end%将矩阵8X8矩阵放入IM2中

end%将矩阵8X8矩阵放入IM2中

IM=IM(1:

cc1,1:

cc2);

IM2=IM2(1:

cc1,1:

cc2);

y=uint8(IM2);

functionjpeg_dct(I,z)

tic

%I=imread('football.jpg');%读入原始图像,该图片在安装matlab的目录中找,原图为jpeg图象

Y=im2double(I);%图像存储类型转换,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。

所以要先将图像转为double格式的才能运算

T=dctmtx(8);%离散余弦变换矩阵,使用由dctmtx函数返回的DCT变换矩阵,这种方法较适合于较小的输入方阵(例如8×8或16×16),计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数

%B=blkproc(A,[mn],fun,parameter1,parameter2,...)

%x就是每一个分成的8*8大小的块,P1*x*P2相当于像素块的处理函数,p1=Tp2=T’,也就是fun=p1*x*p2'=T*x*T'的功能是进行离散余弦变换

%x代表A,对一副原始图像,选取它的最左上角8x8的矩阵,并将每一个像素值转换到-128到127的范围内,得到矩阵x.

%RGB图像分三个通道,分别处理

B(:

:

1)=blkproc(Y(:

:

1),[88],'P1*x*P2',T,T');%将原始图像8x8的像素块转换成代表不同频率分量的系数集,DCT后的64个DCT系数与DCT前的64个像素块相对应

B(:

:

2)=blkproc(Y(:

:

2),[88],'P1*x*P2',T,T');

B(:

:

3)=blkproc(Y(:

:

3),[88],'P1*x*P2',T,T');

%对原图像进行DCT变换

z=fix(z);%量化,向0靠拢取整

t(1:

z)=1;

t(z+1:

64)=0;

mask=jpeg_Dzz8(t);%Z字形扫描

B2(:

:

1)=blkproc(B(:

:

1),[88],'P1.*x',mask);%只保留DCT变换的左上角10个系数,数据压缩,丢弃右下角高频数据,达到图像压缩的目的

B2(:

:

2)=blkproc(B(:

:

2),[88],'P1.*x',mask);%变换后的系数值较大的会集中在区域的左上部,即低频分量都集中在左上部。

保留的也是这一部分。

B2(:

:

3)=blkproc(B(:

:

3),[88],'P1.*x',mask);%其他部分的系数被舍去,在恢复信号时对它们补0。

这样以来,由于保留了大部分图像信号能量,在恢复信号后,其质量不会产生显著变化。

%数据压缩,丢弃右下角高频数据

I2(:

:

1)=blkproc(B2(:

:

1),[88],'P1*x*P2',T',T);%重构图像

I2(:

:

2)=blkproc(B2(:

:

2),[88],'P1*x*P2',T',T);

I2(:

:

3)=blkproc(B2(:

:

3),[88],'P1*x*P2',T',T);

%进行DCT反变换,得到压缩后的图像

figure;

set(gcf,'unit','normalized','position',[0.4,0.5,0.3,0.3]);%设置图形窗大小

set(gcf,'menubar','none');%删除图形窗工具条

str='量化程度';

set(gcf,'name',[strsprintf('%1.4g\',z)],'numbertitle','off');%书写图形窗名

imshow(I2)

title('DCT变换压缩后的图像')

imwrite(I2,'dct.jpg');%输出压缩后的图像,文件名为football_dct.jpg

a=toc;

uicontrol('style','text','unit','normalized',...

'position',[000.20.1],'string',num2str(a),...

'FontSize',18)

%搜索方式:

对角的Z字形扫描;二维的图像矩阵利用一维的搜索方式。

functiony=jpeg_Dzz8(x)

t=1;

fork=2:

9

form=1:

k-1

ifrem(k,2)==0

y(k-m,m)=x(t);

t=t+1;

else

y(m,k-m)=x(t);

t=t+1;

end

end

end

fork=10:

16

form=k-8:

8

ifrem(k,2)==0

y(k-m,m)=x(t);

t=t+1;

else

y(m,k-m)=x(t);

t=t+1;

end

end

end

functioncallcheck(htext,str1,z)

set(htext,'string',[str1,sprintf('%1.4g\',z)]);%更新静态文本框内容<2

functionjpeg_klt(I,z)

tic

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1