二维小波分析对图像处理
(2004-12-17 04:09:07)
下一个
一: 引言 本文从二维小波理论出发,对其在图像处理的应用上进行了一些分析和处理,力图反映出小波分析在图像处理方面有着其独特的特点。本文就以下几点进行阐述:
①小波基本概念
②图像压缩
③图像消噪
④图象增强
⑤图象平滑处理
二:小波基本概念
小波定义:设 ,其傅立叶变换为 ,当 满足允许条件,即完全重构条件或恒等分辨条件. 时,我们称 为一个基本小波或母小波,将母函数 经伸缩和平移后,得 。 我们称其为一个小波序列。其中a为伸缩因子,b为平移因子。
小波变换是一种信号的时间——尺度分析方法,他具有多分辨率分析的特点,而且在时频两域都具有表征信号局部特征的能力,是一种窗口大小固定不变但其形状可变,时间窗和频率窗都可变的时频局部化分析方法。即再低频部分具有较高的频率分辨率和时间分辨率,在高频部分具有较高的时间分辨率和较低的频率分辨率,很适合探测正常信号中夹带的瞬态反常现象并展示其成分,所以被誉为分析信号的显微镜。
波分析是把信号分解成低频al和高频dl两部分,在分解中,低频al中失去的信息由高频dl捕获。在下一层的分解中,又将al分解成低频a2和高频d2两部分,低频a2中失去的信息由高频d2捕获,如此类推下去,可以进行更深层次的分解。
二维小波函数是通过一维小波函数经过张量积变换得到的,二维小波函数分解是把尺度j的低频部分分解成四部分:尺度j+1的低频部分和三个方向(水平、垂直、斜线)的高频部分。
三:图像压缩
对于图像来说,如果需要进行快速或实时传输以及大量存储,就需要对图像数据进行压缩。在同样的通信容量下,如果图像数据压缩后在传输,就可以传输更多的图像信息。例如,用普通的电话线传输图像信息。图像压缩研究的就是寻找高压缩比的方法且压缩后的图像要有合适的信噪比,在压缩传输后还要恢复原信号,斌且在压缩、传输、恢复的过程中,还要求图像的失真度小。这就是图像压缩的研究问题。
图像数据往往存在各种信息的冗余、如空间冗余、信息熵冗余 、视觉冗余 和结构冗余等等。所谓压缩就是去掉各种冗余,保留对我们有用的信息。图像压缩的过程常称为编码。相对的,图像的恢复当然就是解码了。
图像压缩的方法通常可分为有失真编码和无失真编码两大类:
无失真编码方法如改进的霍夫曼编码。
有失真编码方法的还原图像较之原始图像存在着一些误差,但视觉效果是可以接受的。常见的方法有预测编码、变换编码、量化编码、信息熵编码、分频带编码和结构编码等等。
而将小波分析引入图像压缩的范畴也是一个重要的手段,并且有着它自己的特点。它的特点在于压缩比高、压缩速度快,压缩后能保持信号与图像的特征基本不变,且在传递过程中可以抗干扰等等。
下面我们就举一个粒子来说明怎样用小波分析进行图像压缩。
例如现在有一个二维图像(文件名为),我们利用二维小波分析来进行图像压缩。
由原理可知,一个图像作小波分解后,可得到一系列不同分辨率的子图像,不同分辨率的子图像对应的频率是不相同的。高分辨率(高频)子图像上大部分点的数值都接近于0,越是高就越是明显。而对于一个图像来说,表现一个图像的最主要的部分是低频部分,所以最简单的压缩方法是利用小波分解去掉图像的高频部分而只保留低频部分。
程序大致如下:
clear
%装入图像
load wbarb;
%显示图像
syms X;
subplot(221);
image(coast);
colormap(map)
title('原始图像');
axis square
disp('压缩前图像X的大小');
whos('coast')
%对图像用小波进行层小波分解
[c,s]=wavedec2(X,2,'bior3.7');
%提取小波分解结构中的一层的低频系数和高频系数
cal=appcoef2(c,s,'bior3.7',1);
%水平方向
ch1=detcoef2('h',c,s,1);
%垂直方向
cv1=detcoef2('v',c,s,1);
%斜线方向
cd1=detcoef2('d',c,s,1);
%各频率成份重构
a1=wrcoef2('a',c,s,'bior3.7',1);
h1=wrcoef2('h',c,s,'bior3.7',1);
v1=wrcoef2('v',c,s,'bior3.7',1);
d1=wrcoef2('d',c,s,'bior3.7',1);
c1=[a1,h1;v1,d1];
%显示分频信息
subplot(222);
image(c1);
axis square;
title ('分解后低频和高频信息');
%进行图像压缩
%保留小波分解第一层低频信息
%首先对第一层信息进行量化编码
ca1=appcoef(c,s,'bior3.7',1);
ca1=wcodemat(ca1,440,'mat',0);
%改变图像高度并显示
ca1=0.5*ca1;
subplot(223);
image(ca1);
colormap(map);
axis square;
title('第一次压缩图像');
disp('第一次压缩图像的大小为:');
whos('ca1')
%保留小波分解第二层低频信息进行压缩
ca2=appcoef2(c,s,'bior3.7',2);
%首先对第二层信息进行量化编码
ca2=wcodemat(ca2,440,'mat',0);
%改变图像高度并显示
ca2=0.25*ca2;
subplot(224);
image(ca2);
colormap(map);
axis square;
title('第二次压缩图像');
disp('第二次压缩图像的大小为:');
whos('ca2')
输出结果如图:
Name
Size
Bytes
class
压缩前图像
X
256×256
524288
Double array
第一次压缩图像
Ca1
135×135
145800
Double array
第二次压缩图像
Ca2
75×75
45000
Double array
在这里可以看出,第一次压缩我们是提取原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小(约为1/3大小)。第二次压缩实提取第一层分解低频部分的低频部分(即第二层的低频部分),其压缩比较大(约为1/12),压缩效果在视觉上也基本过得去。
上面的保留原始图像中低频信息的压缩办法只是一种最简单的压缩办法。它不需经过其他处理即可获得较好的压缩效果。当然,对于上面的例子我们还可以只提取小波分解的第三、第四层的低频信息。从理论上说,我们可以获得任意压缩比的压缩图像。只不过在对压缩比和图像质量都有较高要求时,它就不如其他编码方法了。
下面我们在举一个例子,这一次用 中函数来对上图进行压缩。
Clear;
%装入图形信号
load wbarb;
%显示图像
subplot(221);
image(X);
colormap(map);
title('原始图像');
disp('压缩前图像的大小');
whos('X');
axis square;
%对图像进行压缩
%对图像用db3小波进行二层小波分解
[c,s]=wavedec2(X,5,'db3');
[thr,sorh,keepapp]=ddencmp('cmp','wv',X);
[Xcomp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,s,'db3',5,thr,sorh,keepapp);
%将压缩后的图像于原始图像相比较
subplot(222);
image(Xcomp);
colormap(map);
title(' 压缩后的图像');
disp('压缩后图像的大小');
whos('Xcomp')
%显示有关参数
disp('小波分解系数中值为0的系数个数百分比');
disp(perf0);
disp('压缩后剩余能量百分比');
disp(perfl2);
输出结果如下:
小波分解系数中值为0的系数个数百分比:49.8088
压缩后剩余能量百分比:99.9754
总之,是事无绝对。一种压缩图像的方法不可能尽善尽美。要想很好的进行图像的压缩,就需要综合的利用多种其他技术,特别是数据编码和解码算法。
四:图像消噪
图像消噪方法的一般说明
对二维图像信号的消噪方法同样适用于一维信号,尤其是对于几何图像更适合。二维模型可以表述为
其中, e 是标准偏差不变得高斯白噪声。二维信号的消噪步骤与一维信号的消噪步骤完全相同,也有三步,只是用二维小波分析工具代替了一维小波分析工具。如果用固定的阀值形式,测选择的阀值用 m^2 代替了一维信号中的n 。着三步是:
(1) 二维信号的小波分解 。选择一个小波和小波分解的层次N, 然后计算信号s到第N层的分解。
(2) 对高频系数进行阀值量化。对于从一到N的每一层,选择一个阀值,斌对着一层的高频系数进行软阀值化处理。
(3) 二维小波的重构。根据小波分解的第N层的低频系数和经过修改的从第1层到第N层的各层高频系数,来计算二维信号的小波重构。
在这三个步骤中,重点内容就是如何选取阀值和如何进行阀值的量化。请注意,
了一维信号自动消噪的情况,对于其他的情况,一维信号的消噪和压缩用的是wdencmp, 这对于二维信号也是一样的。
编程
给定一个有较大白噪声的图象,利用二维小波分析进行信号消噪处理。
分析:由于图象所含的噪声主要是白噪声,且集中于高部分,故用第通实现消去噪声。程
序如下。
load tire;
subplot(221);
image(X);
colormap(map);
title('原图 ');
axis square; %画出原图象
init=2055615866;
randn('seed',init)
x=X+38*randn(size(X));
subplot(222);
image(x);
colormap(map);
title('含噪声图象 ');
axis square; %画出含噪声图象
[c,s]=wavedec2(x,2,'sym4');
a1=wrcoef2('a',c,s,'sym4',1); %第一次低通滤波消噪
subplot(223);
image(a1);
title('第一次消噪后图象 ');
axis square; %画出第一次低通滤波消噪后图象
a2=wrcoef2('a',c,s,'sym4',2); %第二次低通滤波消噪
subplot(224);
image(a2);
title('第二次消噪后图象 ');
axis square; %画出第二次低通滤波消噪后图象
分析: 第一次消噪滤去了大部分高频噪声,但与原图比较,依然有不少高频噪声,第二次消噪在第一次消噪基础上,再次滤去高频噪声,消噪效果较好,但图像质量比原图稍差。
五:图象增强
说明
小波变换将一幅图象分解为大小、位置和方向都不同的分量。在做逆变换之前可以改变小波变换域中某些系数的大小,这样就能够洋选择的放大所感兴趣的分量而减小不需要的分量。
编程:
给定一个图象信号,用二维小波分析对图象进行增强处理。
[分析]由于图象经二维小波分解后,图象的轮廓主要体现在低频部分,而细节部分则体现子高频部分,因此,可以通过对低频分解系数进行增强处理,对高频分解系数进行衰减处理,即可以达到图象增强的作用。
具体处理过程如下程序:
load woman;
subplot(121);
image(X);
colormap(map);
title(‘原始图象‘);
axis square; %画出原图象
[c,s]=wavedec2(X,2,’sym4’); %进行二层小波分解
sizec=size(c); %处理分解系数,突出轮廓,弱化细节
for I =1:sizec(2)
if(c( I )>350)
c( I )=2*c( I );
else
c( I )=0.5*c( I );
end
end
xx=waverec2(c,s,’sym4’); %分解系数重构
subplot(122);
image(xx);
title(‘增强图象‘)
axis square; %画出增强图像
结果分析:
打到了图像增强的效果,试图像对比更加明显,但由于细节上的弱化,却使得图像产生模糊的感觉。就那妇女托着下腮的手来说,增强后的图像几乎就不能辨认。手指更是消失了。
六:图象融合
说明
图象融合是将同一对象的两个或更多的图象合成在一幅图象中,以便他比原来的任何一幅更能容易的为人们所理解。真一技术可应用于多频谱图象理解以及医学图象处理等领域,再这些场合,同一物体部件的图象往往是采用不同的成象机理得到的。
编程:
用二维小波分析将两幅图象融合在一起。
处理过程如下:
load woman; %装入原图像
X1=X;map1=map;
subplot(221);
image(X1);
colormap(map1);
title(‘woman’);
axis square %画出woman图像
load wbarb; %装入原图像
X2=X;map2=map;
for I =1:256
for j=1:256
if(X2(I, j)>100)
X2(I, j)=1.2*X2(I, j);
else
X2(I, j)=0.5*X2(I, j);
end
end
end
subplot(222);
image(X2);
colormap(map2);
title(‘wbarb’);
axis square %画出wbarb图像
[cl,sl]=wavedec2(X1,2,’sym4’);
sizec1=size(c1);
for I=1:sizec1(2)
c1( I )=1.2*c1( I );
end
[c2,s2]=wavedec2(X2,2,’sym4’);
c=c1+c2;
c=0.5*c;
xx=waverec2(c,s,’sym4’);
subplot(223);image(xx);
title(‘融合图象‘);
axis square %画出融合后的图像
结果分析:
一幅图像和他某一部分放大后的图像融合,融合后的图像给人一种朦朦胧胧梦幻般的感觉,对较深的背景部分则做了淡化处理。
七:图象平滑处理
说明
图像平滑的主要目的是为了减少噪声,一般情况下,在空间域内可以用于平均来减少噪声。在频率域,因为噪声浦多在高频段,因此可以曹用各种形式的低通滤波的办法来减少噪声。
编程
给定一个含噪声的图象,用二维小波分析和图象的中值滤波进行图象的平滑。
[分析]这是一个图象平滑处理问题。首先,对图象在频域内进行增强,然后在空域内加入较大的白噪声。通过对含噪图象进行平滑处理,即可以使含噪图象具有较好的平滑效果。具体处理过程如下:
load woman; %装入原图
X1=X;
map1=map;
subplot(221);
image(X1);
colormap(map1);
title('woman');
axis square %画出原图
[c,s]=wavedec2(X,2,’sym4’); %二层分解小波信号
sizec=size( c );
for I= 1:sizec(2) %频域里增强图像
if(c( I )>350)
c( I )=1.3*c( I );
else
d( I )=0.5*c( I );
end
end
xx=waverec(c,s,’sym4’); %系数重构
init=2788605826; %加入噪声
rand(‘seed’,init);
xx=xx+68*(rand(size(xx)));
subplot(221);image(xx);
title(‘增强的含噪图象‘);
axis square;
for I=2:1:255 %中值滤波
for j=2:1:255
temp=0;
for m=1:3
for n=1:3
temp=temp+xx(I+m-2,j+n-2);
end
end
temp=temp/9;
xx(I, j)=temp;
end
end
colormap(map);
subplot(222);
image(xx);
axis square;
title(‘平滑后的图象‘);
axis square %画出平滑后图像
结果分析:
平滑后的图像没有原图清晰,但边缘轮廓过渡更自然,消噪的效果还是比较明显的,噪声图像中的一些粒状颗粒在平滑后基本消失。
附录
函数名
功能
dwt2
单层二维小波分解
dwtper2
单层二为离散小波变换
wavedec2
多层二维小波分解
idwt2
单层二微小波重构
idwper2
单层二维小波分解
waverec2
多层二维小波重构
upwiev2
二维小波分解的单层重构
wrcoef2
二维小波分解系数单支重构
upcoef2
二维小波分解的直接重构
detcoef2
提取二微小波分解高频系数
appcoef2
提取二维小波分解低频系数
wthresh
进行软阈值或硬阈值处理
wthcoef2
二维信号的小波系数阈值处理
ddencmp
获取在消噪或压缩过程中的默认值阈值
wdencmp
用小波进行信号的消噪和压缩
本文摘自南京大学教学资料:原网址(http://jw.nju.edu.cn/Courseware/tuxyl/text/chap8.htm)