第一篇:小波变换 matlab 总结范文
小波变换matlab总结 目录
一、预置工具...........................................................................................................................4
1.预置信号......................................................................................................................4 2.预置小波......................................................................................................................4 3.滤波器函数..................................................................................................................6
wfilters函数.......................................................................................................6 4.量化编码......................................................................................................................6
wcodemat函数.......................................................................................................6 5.阈值获取......................................................................................................................6
ddencmp函数.........................................................................................................6 thselect函数.......................................................................................................7 wbmpen函数...........................................................................................................7 wdcbm函数..............................................................................................................7 6.阈值去噪......................................................................................................................8
wden函数................................................................................................................8 wdencmp函数.........................................................................................................8 wthresh函数.........................................................................................................9 wthcoef函数.........................................................................................................9 wpdencmp函数.......................................................................................................9
二、小波变换函数.................................................................................................................12
单尺度一维小波变换.....................................................................................................12
cwt一维连续小波变换.........................................................................................12 dwt一维离散小波变换.........................................................................................12 idwt一维离散小波逆变换..................................................................................13 upcoef 一维小波系数重构................................................................................13 多尺度一维小波变换.....................................................................................................14
wavedec多尺度一维分解...................................................................................14 waverec多尺度一维重构...................................................................................15 appcoef低频系数提取.......................................................................................16 detcoef高频系数提取.......................................................................................16 wrcoef多尺度小波系数重构.............................................................................17 一维静态(平稳)小波变换.........................................................................................18
swt一维平稳小波变换.........................................................................................18 iswt一维平稳小波逆变换..................................................................................18 实例.........................................................................................................................19 单尺度二维小波变换.....................................................................................................19
dwt2二维离散小波变换......................................................................................19 idwt2二维离散小波逆变换................................................................................20 upcoef2二维系数重构.......................................................................................20 多尺度二维小波变换.....................................................................................................21
wavedec2多尺度二维分解.................................................................................21 waverec2多尺度二维重构.................................................................................22 appcoef2低频系数提取.....................................................................................23 detcoef2高频系数提取.....................................................................................23 wrcoef2多尺度小波系数重构...........................................................................24 二维静态(平稳)小波变换.........................................................................................26
swt2二维静态小波变换......................................................................................26 iswt2二维静态小波逆变换................................................................................26 实例.........................................................................................................................26 直接调用的小波函数.....................................................................................................28
meyer函数............................................................................................................28 cgauwavf函数.....................................................................................................28 mexihat函数.......................................................................................................28 morlet函数.........................................................................................................29 symwavf函数.......................................................................................................29
三、图像接口调用.................................................................................................................30
使用图形接口做一维连续小波分析.....................................................................30 使用图形接口做一维离散小波分析.....................................................................33 使用图形接口分析复信号.....................................................................................36 使用图形接口做一维除噪分析.............................................................................36
四、小波变换在图像处理中的应用.....................................................................................40
4.1 小波分析用于图像压缩........................................................................................40
4.1.1 基于小波变换的图像局部压缩...............................................................40 4.1.2 小波变换用于图像压缩的一般方法.......................................................41 4.1.3 基于小波包变换的图像压缩...................................................................45 4.2 小波分析用于图像去噪........................................................................................47
小噪声阈值去噪.....................................................................................................48 大噪声滤波去噪.....................................................................................................49 少量噪声的小波分解系数阈值量化去噪.............................................................50 4.3 小波分析用于图像增强........................................................................................52
4.3.1 图像增强问题描述...................................................................................52 4.3.2 图像钝化...................................................................................................53 4.3.3 图像锐化...................................................................................................54 4.4 小波分析用于图像融合........................................................................................56 4.5 小波分析用于图像分解........................................................................................57
一、预置工具 1.预置信号
Matlab 内置了大量的信号实例,进行信号试验的时候可以调用。调用格式:load signal matlab安装目录的toolbox/wavelet/wavedemo noissin 包含噪声的正弦波
leleccum一维电压信号,有365560个采样点 wbarb 专指图片:
2.预置小波
Matlab预置了共计15种小波。查看语句:wavemngr('read',1)查看单个小波:waveinfo('wname')
1.Haar小波 小波名haar
2.Daubechies小波系 小波名db 调用名db1db2db3db4 db5 db6 db7 db8 db9 db10
3.对称小波系Symlets 小波名sym 调用名sym2sym3 sym4 sym5 sym6 sym7 sym8
4.Coiflets 小波系 小波名coif 调用名 coif1coif2coif3coif4coif5 5.Biorthogonal小波系 小波名bior 调用名bior1.1 bior1.3 bior1.5 bior2.2 bior2.4 bior2.6 bior2.8 bior3.1 bior3.3 bior3.5 bior3.7 bior3.9 bior4.4 bior5.5 bior6.8
6.ReverseBior小波系 小波名rbio 调用名rbio1.1 rbio1.3 rbio1.5 rbio2.2 rbio2.4 rbio2.6 rbio2.8 rbio3.1 rbio3.3 rbio3.5 rbio3.7 rbio3.9 rbio4.4 rbio5.5 rbio6.8
7.Meyer小波 小波名meyr
8.Dmeyer小波 小波名dmey
9.Gaussian小波系 小波名gaus 调用名gaus1gaus2gaus3gaus4gaus5gaus6gaus7gaus8
10.Mexican hat小波 小波名mexh
11.Morlet小波 小波名morl
12.Complex Gaussian小波系 小波名cgau 调用名cgau1cgau2cgau3cgau4cgau5 cgau
13.Shannon小波系 小波名shan 调用名shan1-1.5shan1-1shan1-0.5shan1-0.1shan2-3
14.Frequency B小波系 小波名fbsp 调用名fbsp1-1-1.5fbsp1-1-1fbsp1-1-0.5fbsp2-1-1fbsp2-1-0.5fbsp2-1-0.1
15.Complex Morlet小波系 小波名cmor 调用名cmor1-1.5cmor1-1cmor1-0.5cmor1-1cmor1-0.5cmor1-0.1 3.滤波器函数 wfilters函数
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('wname')计算对应小波的滤波器。
The four output filters are Lo_D, 用于分解的低通滤波器 Hi_D, 用于分解的高通滤波器 Lo_R, 用于重构的低通滤波器 Hi_R, 用于重构的高通滤波器
4.量化编码 wcodemat函数
y=wcodemat(x,nb,opt,absol)y=wcodemat(x,nb,opt)y=wcodemat(x,nb)y=wcodemat(x)该函数是用来对矩阵X进行量化编码,它返回矩阵X的一个编码矩阵,在编码中,把矩阵X中元素绝对值最大的作为NB(NB是一个整数),绝对值最小的作为1,其他元素依其绝对值的大小在1与NB中排列.当OPT为'row'时,做行编码;当OPT为'col'时,做列编码, 当OPT为'mat'时,做全局编码,即把整个矩阵中的元素绝对值最大的元素作为NB,最小的作为1,其他元素依其绝对值的大小在整个矩阵中排列.当ABSOL为0时,该函数返回输入矩阵X的一个编码版本;为非0时,返回X的绝对值
5.阈值获取
MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。ddencmp函数
调用格式:
[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;
IN1取值为'den'或'cmp','den'表示进行去噪,'cmp'表示进行压缩; IN2取值为'wv'或'wp',wv表示选择小波,wp表示选择小波包。输出参数THR为函数选择的阈值,SORH为函数选择阈值使用方式。Sorh=s,为软阈值;Sorh=h,为硬阈值;输出参数KEEPAPP决定了是否对近似分量进行阈值处理。可选为0或1。CRIT为使用小波包进行分解时所选取的熵函数类型。例:自动生成信号小波处理的阈值选取方案。r=2055415866;randn('seed',r);x=randn(1,1000);%产生白噪声;%求取对信号进行小波消噪处理的默认阈值、软阈值,并且保留低频系数;[thr,sorh,keepapp]=ddencmp('den','wv',x);输出:
thr = 3.8593 sorh = s keepapp = 1 thselect函数
调用格式如下:
THR=thselect(X,TPTR);根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。自适应阈值的选择规则包括以下四种:
*TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。*TPTR='heursure',使用启发式阈值选择。
*TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))).*TPTR='minimaxi',用极大极小原理选择阈值。
阈值选择规则基于模型 y = f(t)+ e,e是高斯白噪声N(0,1)。wbmpen函数
调用格式:
THR=wbmpen(C,L,SIGMA,ALPHA);返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。
[C,L]是进行去噪的信号或图像的小波分解结构; SIGMA是零均值的高斯白噪声的标准偏差;
ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般去ALPHA=2。wdcbm函数 调用格式:
(1)[THR,NKEEP]=wdcbm(C,L,ALPHA);(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M);函数wdcbm是使用Birge-Massart算法获取一维小波变换的阈值。返回值THR是与尺度无关的阈值,NKEEP是系数的个数。
[C,L]是要进行压缩或消噪的信号在j=length(L)-2层的分解结构; LAPHA和M必须是大于1的实数;
THR是关于j的向量,THR(i)是第i层的阈值;
NKEEP也是关于j的向量,NKEEP(i)是第i层的系数个数。一般压缩时ALPHA取1.5,去噪时ALPHA取3.6.阈值去噪
MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。wden函数 调用格式:
(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,'wname')(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,'wname')函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。
THR为阈值选择规则:
*TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。*TPTR='heursure',使用启发式阈值选择。
*TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))).*TPTR='minimaxi',用极大极小原理选择阈值。SORH是软阈值或硬阈值的选择(分别对应's'和'h')。SCAL指所使用的阈值是否需要重新调整,包含下面三种: *SCAL='one' 不调整;
*SCAL='sln' 根据第一层的系数进行噪声层的估计来调整阈值。*SCAL='mln' 根据不同的噪声估计来调整阈值。
XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。
wdencmp函数
调用格式有以下三种:
(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('gbl',X,'wname',N,THTR,SORH,KEEPAPP);(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',X,'wname',N,THTR,SORH);(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',C,L,'wname',N,THTR,SORH);函数wdencmp用于一维或二维信号的消噪或压缩。wname是所用的小波函数。
gbl(global的缩写)表示每一层都采用同一个阈值进行处理。lvd表示每层采用不同的阈值进行处理。N表示小波分解的层数。THR为阈值向量,对于格式(2)和(3)每层都要求有一个阈值,因此阈值向量THR的长度为N。
SORH表示选择软阈值或硬阈值(分别取值为's'和'h'),参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。XC是要进行消噪或压缩的信号,[CXC,LXC]是XC的小波分解结构,PERF0和PERFL2是恢复或压缩L^2的范数百分比。如果[C,L]是X的小波分解结构,则PERFL2=100*(CXC向量的范数/C向量的范数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100||XC||^2/||X||^2。
wthresh函数
调用格式:
Y=wthresh(X,SORH,T)返回输入向量或矩阵X经过软阈值(如果SORH='s')或硬阈值(如果SORH='h')处理后的信号。T是阈值。
Y=wthresh(X,'s',T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。
Y=wthresh(X,'h',T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。wthcoef函数 调用格式:
(1)NC=wthcoef('d',C,L,N,P)(2)NC=wthcoef('d',C,L,N)(3)NC=wthcoef('a',C,L)(4)NC=wthcoef('t',C,L,N,T,SORH)用于一维信号小波系数的阈值处理。
格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。
格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=‟s„,则为软阈值;如果SORH='h'则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。
wpdencmp函数
调用格式:
[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,'wname',CRIT,PAR,KEEPAPP)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP)函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;
PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。
SORH的取值为's'或'h',表示的是软阈值或硬阈值。
输入参数N是小波包的分解层数,wname是包含小波名的字符串。
函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。
格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。
实例:
load noisdopp;x=noisdopp;%给出全局阈值
[thr,sorh,keepapp]=ddencmp('den','wv',x);%根据全局阈值对信号降噪
xc=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp);[c,l]=wavedec(x,2,'sym4');[thr1,nkeep]=wdcbm(c,l,3);xc1=wdencmp('lvd',c,l,'sym4',2,thr1,'s');subplot(311);plot(x);title('原始信号')subplot(312);plot(xc);title('使用全局阈值降噪后的信号');subplot(313);plot(xc1);title('使用分层阈值降噪后的信号');
load woman %下面进行噪声的产生 init=3;rand('seed',init);Xn=X+18*(rand(size(X)));%下面进行图像的去噪处理
[thr,sorh,keepapp]=ddencmp('den','wv',Xn);Xd=wdencmp('gbl',Xn,'sym5',2,thr,sorh,keepapp);%用sym5小波对图像信号进行二层的小波分解 [c,s]=wavedec2(X,2,'sym5');[thr1,nkeep1]=wdcbm2(c,s,1.5);Xd1=wdencmp('lvd',c,s,'sym5',2,thr1,'s');%显示图像
subplot(221);image(X);colormap(map);title('原始图像X');axis square subplot(222);image(Xn);colormap(map);title('含噪声的图像');axis square subplot(223);image(Xd);colormap(map);title('去噪后的图像');axis square subplot(224);image(Xd1);colormap(map);title('分层去噪后的图像');axis square
二、小波变换函数 单尺度一维小波变换 cwt一维连续小波变换 调用格式:
coefs = cwt(s,scale,’wname’)【仅给出系数值】
coefs = cwt(s,scale,’wname’,’plot’)【给出系数值同时生成图像】 实例:
load noissin;figure subplot(121)plot(noissin);subplot(122)c=cwt(noissin,1:48,'db4','plot');
dwt一维离散小波变换 调用格式:
[cA1,cD1]=dwt(X,‟wname‟)【使用指定的小波基函数 'wname' 对信号 X 进行分解】 [cA1,cD1]=dwt(X,Lo_D,Hi_D)【使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解】 实例:
load leleccum;s=leleccum(1:3920);ls=length(s);[cA,cD]=dwt(s,'db1');figure subplot(121)plot(cA);subplot(122)plot(cD)[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db1')[cA1,cD1]=dwt(s, Lo_D, Hi_D);figure subplot(121)plot(cA1);subplot(122)plot(cD1)
idwt一维离散小波逆变换 调用格式:
X=idwt(cA,cD,'wname')【由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X】 X=idwt(cA,cD,Lo_R, Hi_R)【用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 】 X=idwt(cA,cD,'wname',L)【指定返回信号 X 中心附近的 L 个点】 X=idwt(cA,cD, Lo_R, Hi_R, L)【与上边一致】
upcoef一维小波系数重构 调用格式:
Y = upcoef(O,X,'wname',N)Y = upcoef(O,X,'wname',N,L)Y = upcoef(O,X,Lo_R,Hi_R,N)Y = upcoef(O,X,Lo_R,Hi_R,N,L)这一函数是一维小波分解系数的直接重构
它重建的是原信号在指定层次的,高频或者低频分量。
也就是说,这个信号不是原本的信号,而且某个层次上的逼近。N=1条件下相当与缺省模式的idwt A1 = upcoef('a',cA1,'db1',1,l_s)相当于A1 = idwt(cA1,[],'db1',l_s);D1 = upcoef('d',cD1,'db1',1,l_s)相当于 D1 = idwt([],cD1,'db1',l_s);而O是一个标识符,O=„a‟ 低频,O=„d‟ 高频 N代表了小波系数的级别,是几级小波系数。L则指定返回信号 X 中心附近的 L 个点 例子:
load leleccum;s=leleccum(1:3920);ls=length(s);[cA,cD]=dwt(s,'db1');A1=upcoef('a',cA,'db1',1,ls);D1=upcoef('d',cD,'db1',1,ls);% A1 = idwt(cA,[],'db1',ls);D1 = idwt([],cD,'db1',ls);subplot(1,2,1);plot(A1);title('Approximation A1')subplot(1,2,2);plot(D1);title('Detail D1')
多尺度一维小波变换 wavedec多尺度一维分解
调用格式:
[C, L]=wavedec(X,N,’wname’)[C, L]=wavedec(X,N,Lo_D,Hi_D)函数返回N层分解的各组分系数C(连接在一个向量里),向量L里返回的是各组分的长度。分解的结构如下
例子:
load leleccum;s=leleccum(1:3920);[C,L]=wavedec(s,3,'db1');subplot(1,2,1);plot(C);title('C')subplot(1,2,2);plot(L);title('L')
waverec多尺度一维重构 调用格式:
X=waverec(C,L,’wname’)X=waverec(C,L,Lo_R,Hi_R)实例:
load leleccum;s=leleccum(1:3920);[C,L]=wavedec(s,3,'db1');A0=waverec(C,L,'db1');Err=abs(s-A0);figure(1)subplot(3,1,1);plot(s);title('original s');subplot(3,1,2);plot(A0);title('wavereconstruction s');subplot(3,1,3);plot(Err);title('wavereconstruction err');
appcoef低频系数提取 调用格式:
A=appcoef(C,L,‟wname‟,N)从C中抽取N层近似系数 A=appcoef(C,L,‟wname‟)A=appcoef(C,L,Lo_R,Hi_R,N)A=appcoef(C,L, Lo_R,Hi_R)detcoef高频系数提取 调用格式:
A=detcoef(C,L,N)A=detcoef(C,L)实例:
load leleccum;s=leleccum(1:3920);[C,L]=wavedec(s,3,'db1');cA3=appcoef(C,L,'db1',3);cD3=detcoef(C,L,3);cD2=detcoef(C,L,2);cD1=detcoef(C,L,1);subplot(2,2,1);plot(cA3);title('cA3')subplot(2,2,2);plot(cD3);title('cD3')subplot(2,2,3);plot(cD2);title('cD2')subplot(2,2,4);plot(cD1);title('cD1')
wrcoef多尺度小波系数重构
调用格式:
X=wrcoef(„type‟,C,L,‟wname‟,N)X=wrcoef(„type‟,C,L,Lo_R,Hi_R,N)X=wrcoef(„type‟,C,L,‟wname‟)X=wrcoef(„type‟,C,L, Lo_R,Hi_R)其中type=„a‟ 低频,type=„d‟ 高频 作用类似于upcoef,只不过是多尺度函数。实例:
load leleccum;s=leleccum(1:3920);[C,L]=wavedec(s,3,'db1');cA3=wrcoef('a',C,L,'db1',3);cD1=wrcoef('d',C,L,'db1',1);cD2=wrcoef('d',C,L,'db1',2);cD3=wrcoef('d',C,L,'db1',3);subplot(2,2,1);plot(cA3);title('cA3')subplot(2,2,2);plot(cD3);title('cD3')subplot(2,2,3);plot(cD2);title('cD2')subplot(2,2,4);plot(cD1);title('cD1')
一维静态(平稳)小波变换
离散平稳小波分析所用到的函数有swt小波分解和iswt小波重构 swt一维平稳小波变换 调用格式
SWC = swt(X,N,'wname')SWC = swt(X,N,Lo_D,Hi_D)[swa,swd] = swt(X,N,'wname')[swa,swd] = swt(X,N,Lo_D,Hi_D)对于SWT变换,如果需要在第k层分解信号,那么原始信号需要能够平分成2^k份。所以如果原始信号的长度不满足要求,需要使用Signal Extension GUI工具或使用wextend函数来扩展它。
函数执行将产生N层近似和细节的系数,两者和信号的长度是相等的,这也是平稳小波和普通小波不同的地方,从而使它在某些领域有好的效果。iswt一维平稳小波逆变换 调用格式
X = iswt(SWC,'wname')X = iswt(SWA,SWD,'wname')X = iswt(SWC,Lo_R,Hi_R)X = iswt(SWA,SWD,Lo_R,Hi_R)实例
load noisdopp s = noisdopp;[swa,swd] = swt(s,1,'db1');%一层平稳小波分解
subplot(1,2,1), plot(swa);title('Approximation cfs')subplot(1,2,2), plot(swd);title('Detail cfs')res = iswt(swa,swd,'db1');%一层平稳小波重构 %从系数中构建近似和细节
nulcfs = zeros(size(swa));A1 = iswt(swa,nulcfs,'db1');D1 = iswt(nulcfs,swd,'db1');subplot(4,1,1), plot(s);title('original s');subplot(4,1,2), plot(res);title('recovered s');subplot(4,1,3), plot(A1);title('Approximation A1');subplot(4,1,4), plot(D1);title('Detail D1');
单尺度二维小波变换 dwt2二维离散小波变换
[cA1,cH1,cV1,cD1]=dwt2(X,‟wname‟)[cA1,cH1,cV1,cD1]=dwt2(X,Lo_D,Hi_D)其中cA1, cH1水平;cV1垂直;cD1对角 二维小波变换有四个值 实例:
load wbarb;figure(1);image(X);colormap(map);colorbar;[cA1,cH1,cV1,cD1]=dwt2(X,'bior3.7');figure(2);colormap(map);subplot(2,2,1);image(wcodemat(cA1,192));title('cA1')subplot(2,2,2);image(wcodemat(cH1,192));title('cH1')subplot(2,2,3);image(wcodemat(cV1,192));title('cV1')subplot(2,2,4);image(wcodemat(cD1,192));title('cD1')
idwt2二维离散小波逆变换
X = idwt2(cA1,cH1,cV1,cD1,'bior3.7');
upcoef2二维系数重构
调用格式:
Y=upcoef2(O,X,‟wname‟,N,S)Y=upcoef2(O,X,Lo_R,Hi_R,N,S)Y=upcoef2(O,X,‟wname‟,N)Y=upcoef2(O,X,Lo_R,Hi_R,N)Y=upcoef2(O,X,‟wname‟)Y=upcoef2(O,X,Lo_R,Hi_R)O:„a‟低频;„h‟水平;„v‟垂直;„d‟对角 实例: load wbarb;[cA1,cH1,cV1,cD1]=dwt2(X,'bior3.7');A1 = upcoef2('a',cA1,'bior3.7',1);H1 = upcoef2('h',cH1,'bior3.7',1);V1 = upcoef2('v',cV1,'bior3.7',1);D1 = upcoef2('d',cD1,'bior3.7',1);figure(2);colormap(map);subplot(2,2,1);image(wcodemat(A1,192));title('Approximation A1')subplot(2,2,2);image(wcodemat(H1,192));title('Horizontal Detail H1')subplot(2,2,3);image(wcodemat(V1,192));title('Vertical Detail V1')subplot(2,2,4);image(wcodemat(D1,192));title('Diagonal Detail D1')
多尺度二维小波变换 wavedec2多尺度二维分解
[C, S]=wavedec2(X,N,’wname’)[C, S]=wavedec2(X,N,Lo_D,Hi_D)
c为各层分解系数,s为各层分解系数长度,也就是大小.c的结构: c=[A(N)|H(N)|V(N)|D(N)|H(N-1)|V(N-1)|D(N-1)|H(N-2)|V(N-2)|D(N-2)|...|H(1)|V(1)|D(1)] 可见,c是一个行向量,即:1*(size(X)),(e.g,X=256*256,then c
大小为:1*(256*256)=1*65536)A(N)代表第N层低频系数,H(N)|V(N)|D(N)代表第N层高频系数,分别是水平,垂直,对角高频,以此类推,到H(1)|V(1)|D(1).s的结构: 储存各层分解系数长度的,即第一行A(N)的长度,第二行是H(N)|V(N)|D(N)|的长度,第三行是
H(N-1)|V(N-1)|D(N-1)的长度,倒数第二行是H(1)|V(1)|D(1)长度,最后一行是X的长度(大小)实例:
load wbarb;[C,S] = wavedec2(X,2,'bior3.7');figure(2);colormap(map);subplot(1,2,1);plot(C);subplot(1,2,2);plot(S);
waverec2多尺度二维重构 调用格式:
X=waverec2(C,S,’wname’)X=waverec2(C,S,Lo_R,Hi_R)实例:
load wbarb;[C,S] = wavedec2(X,2,'bior3.7');X0=waverec2(C,S,'bior3.7');Err=abs(X0-X);figure(1);colormap(map);subplot(3,1,1);image(wcodemat(X,192));title('original X')subplot(3,1,2);image(wcodemat(X0,192));title('wavereconstruction X')subplot(3,1,3);imshow(Err,[])
appcoef2低频系数提取 调用格式:
A=appcoef2(C,S,‟wname‟,N)A=appcoef2(C,S,Lo_R,Hi_R,N)detcoef2高频系数提取
调用格式:
A= detcoef2(‘type’,C,S,’wname’,N)Type: ’h’ 水平;‘v’垂直;‘d’对角 实例:
load wbarb;[C,S] = wavedec2(X,2,'bior3.7');cA2 = appcoef2(C,S,'bior3.7',2);cH2 = detcoef2('h',C,S,2);cV2 = detcoef2('v',C,S,2);cD2 = detcoef2('d',C,S,2);cA1 = appcoef2(C,S,'bior3.7',1);cH1 = detcoef2('h',C,S,1);cV1 = detcoef2('v',C,S,1);cD1 = detcoef2('d',C,S,1);figure(1);colormap(map);subplot(2,2,1);image(wcodemat(cA1,192));title('Approximation A1')subplot(2,2,2);image(wcodemat(cH1,192));title('Horizontal Detail H1')subplot(2,2,3);image(wcodemat(cV1,192));title('Vertical Detail V1')subplot(2,2,4);image(wcodemat(cD1,192));title('Diagonal Detail D1')figure(2);colormap(map);subplot(2,2,1);image(wcodemat(cA2,192));title('Approximation A2')subplot(2,2,2);image(wcodemat(cH2,192));title('Horizontal Detail H2')subplot(2,2,3);image(wcodemat(cV2,192));title('Vertical Detail V2')subplot(2,2,4);image(wcodemat(cD2,192));title('Diagonal Detail D2')
wrcoef2多尺度小波系数重构
调用格式:
X= wrcoef2(„type‟,C,S,‟wname‟,N)X= wrcoef2(„type‟,C,S,Lo_R,Hi_R,N)X= wrcoef2(„type‟,C,S,‟wname‟)X= wrcoef2(„type‟,C,S, Lo_R,Hi_R,N)Type: „a‟低频;‟h‟ 水平;„v‟垂直;„d‟对角 实例:
load wbarb;[C,S] = wavedec2(X,2,'bior3.7');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);A2 = wrcoef2('a',C,S,'bior3.7',2);H2 = wrcoef2('h',C,S,'bior3.7',2);V2 = wrcoef2('v',C,S,'bior3.7',2);D2 = wrcoef2('d',C,S,'bior3.7',2);figure(1);colormap(map);subplot(2,2,1);image(wcodemat(A1,192));title('reApproximation A1')subplot(2,2,2);image(wcodemat(H1,192));title('reHorizontal Detail H1')subplot(2,2,3);image(wcodemat(V1,192));title('reVertical Detail V1')subplot(2,2,4);image(wcodemat(D1,192));title('reDiagonal Detail D1')figure(2);colormap(map);subplot(2,2,1);image(wcodemat(A2,192));title('reApproximation A2')subplot(2,2,2);image(wcodemat(H2,192));title('reHorizontal Detail H2')subplot(2,2,3);image(wcodemat(V2,192));title('reVertical Detail V2')subplot(2,2,4);image(wcodemat(D2,192));title('reDiagonal Detail D2')
二维静态(平稳)小波变换
回顾从一维离散小波变换到二维的扩展,二维静态小波变换采用相似的方式。对行和列分别采用高通和低通滤波器。这样分解的结果仍然是四组图像:近似图像、水平细节图像、竖直细节图像和对角图像,与离散小波变换不同的只是静态小波分解得到的四幅图像与原图像尺寸一致,道理与一维情况相同。
二维离散小波变换同样只提供了一个函数swt2,因为它不对分解系数进行下采样,所以单层分解和多层分解的结果是一样的。不需要另外提供多层分解的功能。swt2二维静态小波变换
调用格式:
[A,H,V,D] = swt2(X,N,'wname')[A,H,V,D] = swt2(X,N,Lo_D,Hi_D)iswt2二维静态小波逆变换 调用格式
X = iswt2(SWC,'wname')X = iswt2(A,H,V,D,wname)X = iswt2(SWC,Lo_R,Hi_R)X = iswt2(A,H,V,D,Lo_R,Hi_R)实例
clc;clear;close all;load woman;[cA,cH,cV,cD]=swt2(X,2,'haar');%用haar小波基进行2尺度平稳小波分解 cA1=cA(:,:,1);cH1=cH(:,:,1);cV1=cV(:,:,1);cD1=cD(:,:,1);%尺度1低、高频系数
cA2=cA(:,:,2);cH2=cH(:,:,2);cV2=cV(:,:,2);cD2=cD(:,:,2);%尺度2低、高频系数
reX = iswt2(cA,cH,cV,cD,'haar');X1 = iswt2(cA1,cH1,cV1,cD1,'haar');X2 = iswt2(cA2,cH2,cV2,cD2,'haar');figure;colormap(map);subplot(1,4,1),image(X);title('原始图像');subplot(1,4,2),image(reX);title('重构图像');subplot(1,4,3),image(X1);title('尺度1的重构图像');subplot(1,4,4),image(X2);title('尺度1的重构图像');figure;colormap(map);subplot(1,2,1),image(uint8(cA1));title('尺度1的低频系数图像');subplot(1,2,2),image(uint8(cA2));title('尺度2的低频系数图像');figure;colormap(map);subplot(2,3,1),image(uint8(cH1));title('尺度1水平方向高频系数');subplot(2,3,2),image(uint8(cV1));title('尺度1垂直方向高频系数');subplot(2,3,3),image(uint8(cD1));title('尺度1斜线方向高频系数');subplot(2,3,4),image(uint8(cH2));title('尺度2水平方向高频系数');subplot(2,3,5),image(uint8(cV2));title('尺度2垂直方向高频系数');subplot(2,3,6),image(uint8(cD2));title('尺度2斜线方向高频系数');
直接调用的小波函数 meyer函数 功能:Meyer小波
函数语法格式:
[PHI,PSI,T] = meyer(LB,UB,N)[PHI,T] = meyer(LB,UB,N,'phi')[PSI,T] = meyer(LB,UB,N,'psi')
cgauwavf函数
功能:Complex Gaussian小波
函数语法格式:
[PSI,X] = cgauwavf(LB,UB,N,P)
mexihat函数 功能:墨西哥帽小波
函数语法格式:
[PSI,X] = mexihat(LB,UB,N)
morlet函数 功能:Morlet小波
函数语法格式:
[PSI,X] = morlet(LB,UB,N)
symwavf函数
功能:Symlets小波滤波器 函数语法格式:F = symwavf(W)
三、图像接口调用
使用图形接口做一维连续小波分析
1.开启一维连续小波工具,只需输入如下命令 wavemenu
出现如下小波工具箱主菜单
选择Continuous Wavelet 1-D菜单项,出现如下一维信号分析连续小波分析工具
2.加载信号
选择菜单File->Load Signal,在Load Signal对话框里选择noissin.mat文件,它在matlab安装目录的toolbox/wavelet/wavedemo文件夹下,点击OK加载信号。一维连续小波工具开始加载信号,加载后默认采样频率为1s。3.执行连续小波变换
下面来测试使用db4小波对尺度1到48做小波分析,设置如下
4.点击Analyze按钮
在短暂的计算后,工具将绘制小波系数,并在Coefficients line坐标系中绘制尺度为24的小波系数,在local maxima坐标系中绘制各尺度的小波系数最大值。
5.查看小波Coefficients Line 在小波系数图中右键点击可以选择展示其他尺度的小波系数,选择后点击New Coefficients Line按钮,Coefficients Line会相应更新。
6.查看Maxima Line 点击Refresh Maxima Line按钮,可以显示从尺度1到所选尺度的小波系数的最大值。
注意当在系数图中按下鼠标右键并移动时,会在最下面的Info框中显示当前鼠标位于的X位置和尺度。
7.在尺度和伪频率之间切换
在右边选择Frequencies,当再在系数图中选择时,在Info中显示的将是Hz。
而关于尺度和频率的转换关系,可以看How to Connect Scale to Frequency? 8.选择要显示的坐标系
9.放大细节
在系数框中按鼠标左键可以选择放大的范围。
10.选择好放大范围后点击最下面的按钮可以实现指定的放大
11.显示普通系数或系数绝对值
两种显示方式的区别在于,普通模式下,颜色映射是在系数的最大最小之间;而绝对模式,颜色映射是在0和最大的系数绝对值之间。图形接口的导入导出信息 导入信号到一维连续小波工具
首先将要处理的信号保存到mat文件中,要求信号是一维的向量。然后使用工具的File->Load Signal菜单功能,选择此信号文件即可导入信号。
文件中第一个一维变量被认为是信号,变量在文件中顺序是按字母排序的。保存小波系数
小波分析完成后,点击File->Save->Coefficients,可以将分析结果保存到mat文件。保存后,可以使用load函数加载数据,会看到保存的变量有小波系数coeff、尺度scales、小波的名字wname。
使用图形接口做一维离散小波分析 1.开启一维小波分析工具 Wavemenu->Wavelet 1-D 2.加载信号
3.执行一层小波分解 使用db1小波执行一层分解
4.放大有关细节 5.执行多层小波分解 使用db1小波执行3层分解。
选择不同的显示方式:在Display mode下拉菜单下可以选择不同的显示方式,默认的显示方式为Full Decomposition Mode,其他的显示方式及其意义如下 Separate Mode:在不同的列中显示细节和近似;
Superimpose Mode:在一张图上以不同的颜色显示细节、近似;
Tree Mode:显示分解树、原始信号和选择的成分,在分解树上选择你想显示的成分; Show and Scroll Mode:显示3个窗口,第一个显示原始信号和选择的近似信号,第二个显示选择的细节,第三个显示小波系数; Show and Scroll Mode(Stem Cfs):和Show and Scroll Mode很接近,除了第三个窗口中以杆状图替代颜色条显示小波系数。
对于每个分析任务,可以改变默认的显示方式,只要在View->Default Display Mode子菜单下选择理想的方式即可;不同的显示方式会有额外的显示选项,在More Display Options中做选择,这些选项可以控制不同成分的显示、选择是否显示原始信号与细节、近似对比。6.从信号中移除噪声
图形接口提供了以预定义的阈值策略除噪的选项,这使得从信号中除噪非常容易,只需点击De-noise按钮就可以弹出除噪工具。
点击Close可以关闭除噪窗口,由于不能同时打开除噪和压缩窗口,所以需要关闭除噪窗口再进行信号压缩。关闭时会提示Update Synthesized Signal提示对话框,点击No,如果点击Yes,合成的信号会加载到主窗口。7.改善分析
图像工具可以在任何时候轻易的改善分析,只需要改变分析的方法就可以了,如使用db3做5层小波分析。8.压缩信号
图形接口提供了自动化或人工阈值的做压缩的功能。
默认使用的是全阈值方法,当然也可以使用人工阈值的方法,选择By Level thresholding选项即可,下面的滑动条提供了各级阈值独立调整的功能,相应的调整可以在左边的窗口中看到,在图形窗口中也可以直接拖动来改变阈值。
完成选择后,点击压缩按钮可以完成压缩。从压缩的结果可以看到,压缩过程去除了大多数噪声,但保存了信号99.74%的能量。自动化阈值是非常有效的,它使除3.2%的小波系数都归零化了。9.显示残差
点击Residuals按钮可以查看压缩的残差。显示的统计数据包括测量的趋势(平均值、众数、中值)和散布情况(极差、标准差)。另外,工具还提供了概率分布直方图和累计直方图以及时间序列图,如自相关函数、频谱。这些都是和去噪工具是一样的。10.显示统计分布
可以显示一系列有关信号及其组分的统计数据。
点击Statistics按钮可以查看统计数据信息,点击Histograms可以查看直方图。从图形接口中导入导出信息 保存信息
l 保存合成的信号
如加载如下信号File > Example Analysis > Basic Signals > with db3 at level 5 → Sum of sines,做除噪或压缩处理后,保存合成信号File > Save > Synthesized Signal,保存后加载文件,会得到如下变量: 如果使用除全阈值外的方法时,得到的变量结构如下
Synthsig是合成的信号,除噪或压缩的小波方法保存在wname中,相互依赖的各级阈值保存在thrParams中,小波分解的等级数和cell的长度相等,thrParams{i},i从1到5分别保存了阈值间距上下限的值和阈值(间距阈值是允许的,在自适应阈值方法中会用到,参见One-Dimensional Variance Adaptive Thresholding of Wavelet Coefficients)如果使用的全阈值方法,保存的数据结构如下
alTHR保存的是全阈值的值。l 保存离散小波变换的系数 一个例子的文件内容如下
Coefs包含了离散小波变换的系数,longs包含了各组分的长度,thrParams为空,因为合成信号不存在,wname是小波的名字。l 保存分解结果(即保存小波分析的全体数据)小波工具将保存为.wal文件,加载方式为 load wdecex1d.wa1 –mat 文件内容为
加载信息
加载的文件只要和保存的相应文件中的变量一样即可。
使用图形接口分析复信号
与实信号不同的是,选择Complex Continuous Wavelet 1-D,得到的结果如下
具体操作过程与实信号的相似,如下
使用图形接口做一维除噪分析 1.开启一维平稳小波除噪工具
输入wavemenu,选择SWT Denoising 1-D,出现如下GUI
2.加载信号 Load Signal 3.执行平稳小波分解
使用db1小波执行5层小波分解,得到的是非抽取系数(nondecimated coefficients),它们是使用相同的离散小波变换来得到的,只是省略了抽取的步骤。得到的结果如下
4.使用平稳小波变换除噪
可以使用GUI默认的参数做除噪处理。右边的滑动条可以控制各级系数的阈值大小,也可以直接在系数图中直接拖动来调整阈值的大小,注意近似系数中没有阈值。点击denoise进行除噪处理
得到的效果是非常好的,但似乎在信号不连续的地方出现了过平滑,这个可以从残差图中看出来,在800的位置出现了突降点。
选择hard阈值模式代替soft模式,再进行除噪,结果如下
可以看到这次效果非常好,而且残差图也看起来像白噪声序列。为了验证这一点,可以点击Residuals按钮查看残差图及相关统计数据来详细说明。
四、小波变换在图像处理中的应用 4.1 小波分析用于图像压缩
4.1.1 基于小波变换的图像局部压缩
基于离散余弦变换的图像压缩算法,其基本思想是在频域对信号进行分解,驱除信号点之间的相关性,并找出重要系数,滤掉次要系数,以达到压缩的效果,但该方法在处理过程中并不能提供时域的信息,在我们比较关心时域特性的时候显得无能为力。
但是这种应用的需求是很广泛的,比如遥感测控图像,要求在整幅图像有很高压缩比的同时,对热点部分的图像要有较高的分辨率,例如医疗图像,需要对某个局部的细节部分有很高的分辨率,单纯的频域分析的方法显然不能达到这个要求,虽然可以通过对图像进行分快分解,然后对每块作用不同的阈值或掩码来达到这个要求,但分块大小相对固定,有失灵活。
在这个方面,小波分析的就优越的多,由于小波分析固有的时频特性,我们可以在时频两个方向对系数进行处理,这样就可以对我们感兴趣的部分提供不同的压缩精度。
下面我们利用小波变化的时频局部化特性,举一个局部压缩的例子,大家可以通过这个例子看出小波变换在应用这类问题上的优越性。
我们把图像中部的细节系数都置零,从压缩图像中可以很明显地看出只有中间部分变得模糊(比如在原图中很清晰的围巾的条纹不能分辨),而其他部分的细节信息仍然可以分辨的很清楚。
实例:
load wbarb %使用sym4小波对信号进行一层小波分解 [ca1,ch1,cv1,cd1]=dwt2(X,'sym4');codca1=wcodemat(ca1,192);codch1=wcodemat(ch1,192);codcv1=wcodemat(cv1,192);codcd1=wcodemat(cd1,192);%将四个系数图像组合为一个图像
codx=[codca1,codch1,codcv1,codcd1];%复制原图像的小波系数 rca1=ca1;rch1=ch1;rcv1=cv1;rcd1=cd1;%将三个细节系数的中部置零
rch1(33:97,33:97)=zeros(65,65);rcv1(33:97,33:97)=zeros(65,65);rcd1(33:97,33:97)=zeros(65,65);codrca1=wcodemat(rca1,192);codrch1=wcodemat(rch1,192);codrcv1=wcodemat(rcv1,192);codrcd1=wcodemat(rcd1,192);%将处理后的系数图像组合为一个图像
codrx=[codrca1,codrch1,codrcv1,codrcd1];%重建处理后的系数
rx=idwt2(rca1,rch1,rcv1,rcd1,'sym4');subplot(221);image(wcodemat(X,192)),colormap(map);title('原始图像');subplot(222);image(codx),colormap(map);title('一层分解后各层系数图像');subplot(223);image(wcodemat(rx,192)),colormap(map);title('压缩图像');subplot(224);image(codrx),colormap(map);title('处理后各层系数图像');%求压缩信号的能量成分 per=norm(rx)/norm(X)%求压缩信号与原信号的标准差 err=norm(rx-X)运行结果
per = 1.0000 err = 586.4979 4.1.2 小波变换用于图像压缩的一般方法
二维小波分析用于图像压缩是小波分析应用的一个重要方面。
它的特点是压缩比高,压缩速度快,压缩后能保持图像的特征基本不变,且在传递过程中可以抗干扰。4.1.2.1 利用二维小波分析进行图像压缩
基于小波分析的图像压缩方法很多,比较成功的有小波包、小波变换零树压缩、小波变换矢量量化压缩等。
利用二维小波变换进行图像压缩时,小波变换将图像从空间域变换到时间域,它的作用与以前在图像压缩中所用到的离散余弦(DCT)、傅立叶变换(FFT)等的作用类似。但是要很好的进行图像的压缩,需要综合的利用多种其他技术,特别是数据的编码与解码算法等,所以利用小波分析进行图像压缩通常需要利用小波分析和许多其他相关技术共同完成。小波高频滤波压缩 %%%%%%%%装入图像、变换 load wbarb;%对图像用bior3.7小波进行2层小波分解 [c,s]=wavedec2(X,2,'bior3.7');%提取小波分解结构中第一层低频系数和高频系数 ca1=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];%%%%%%%%%下面进行图像压缩处理
%保留小波分解第一层低频信息,进行图像的压缩 %第一层的低频信息即为ca1,显示第一层的低频信息 %首先对第一层信息进行量化编码
ca1=appcoef2(c,s,'bior3.7',1);ca1=wcodemat(ca1,440,'mat',0);%改变图像的高度 ca1=0.5*ca1;%保留小波分解第二层低频信息,进行图像的压缩,此时压缩比更大 %第二层的低频信息即为ca2,显示第二层的低频信息 ca2=appcoef2(c,s,'bior3.7',2);%首先对第二层信息进行量化编码
ca2=wcodemat(ca2,440,'mat',0);%改变图像的高度 ca2=0.25*ca2;%%%%%%%显示图像、分解后各频率成分的信息
subplot(221);image(X);colormap(map);title('原始图像');axis square subplot(222);image(c1);axis square;title('分解后低频和高频信息');subplot(223);image(ca1);colormap(map);axis square;title('第一次压缩');subplot(224);image(ca2);colormap(map);axis square;title('第二次压缩');disp('压缩前图像X的大小:');whos('X')disp('第一次压缩图像的大小为:');whos('ca1')disp('第二次压缩图像的大小为:');whos('ca2')输出结果如下所示:
压缩前图像X的大小: Name SizeBytesClass X256x256524288double array Grand total is 65536 elements using 524288 bytes 第一次压缩图像的大小为: Name SizeBytesClass ca1135x135145800double array Grand total is 18225 elements using 145800 bytes 第二次压缩图像的大小为: Name SizeBytesClass ca2 75x7545000double array Grand total is 5625 elements using 45000 bytes
可以看出,第一次压缩提取的是原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小(约为1/3):第二次压缩是提取第一层分解低频部分的低频部分(即小波分解第二层的低频部分),其压缩比较大(约为1/12),压缩效果在视觉上也基本过的去。这是一种最简单的压缩方法,只保留原始图像中低频信息,不经过其他处理即可获得较好的压缩效果。
小波高频阈值压缩 %装入一个二维信号 load tire;
%下面进行图像压缩
[c,s]=wavedec2(X,2,'db3');%对图像用db3小波进行2层小波分解, [thr,sorh,keepapp]=ddencmp('cmp','wv',X);%使用ddencmp函数来求取阈值
[Xcomp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,s,'db3',2,thr,sorh,keepapp);%输入参数中选择了全局阈值选项„gbl‟,用来对所有高频系数进行相同的阈值量化处理 %将压缩后的图像与原始图像相比较,并显示出来
subplot(121);image(X);colormap(map);title('原始图像');axis square subplot(122);image(Xcomp);colormap(map);title('压缩图像');axis square disp('小波分解系数中置0的系数个数百分比:');perf0 disp('压缩后图像剩余能量百分比:');perfl2
输出结果如下所示:
小波分解系数中置0的系数个数百分比: perf0 =49.1935 压缩后图像剩余能量百分比: perfl2 =99.9928 4.1.2.2 二维信号压缩中的阈值的确定与作用命令
由于阈值处理只关心系数的绝对值,并不关心系数的位置,所以二维小波变换系数的阈值化方法同一维情况大同小异,为了方便用户使用小波工具箱对某些阈值化方法提供了专门的二维处理命令
阈值化压缩方法 %装入一个二维信号 load tire;%下面进行图像压缩
[c,s]=wavedec2(X,2,'db3');%对图像用db3小波进行2层小波分解, [thr,sorh,keepapp]=ddencmp('cmp','wv',X);%使用ddencmp函数来求取阈值 [Xcomp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,s,'db3',2,thr,sorh,keepapp);%将压缩后的图像与原始图像相比较,并显示出来 subplot(121);image(X);colormap(map);title('原始图像');axis square subplot(122);image(Xcomp);colormap(map);title('压缩图像');axis square disp('小波分解系数中置0的系数个数百分比:');perf0 disp('压缩后图像剩余能量百分比:');perfl2
显示结果如图所示
可见分层阈值化压缩方法同全局阈值化方法相比,在能量损失不是很大的情况下可以获得最高的压缩化,这主要是因为层数和方向相关的阈值化方法能利用更精细的细节信息进行阈值化处理。
4.1.3 基于小波包变换的图像压缩
小波分析之所以在信号处理中有着强大的功能,是基于其分离信息的思想,分离到各个小波域的信息除了与其他小波域的关联,使得处理的时候更为灵活。全局阈值化方法作用的信息粒度太大,不够精细,所以很难同时获得高的压缩比和能量保留成分,在作用的分层阈值以后,性能明显提高,因为分层阈值更能体现信号固有的时频局部特性。
但是小波分解仍然不够灵活,分解出来的小波树只有一种模式,不能完全地体现时频局部化信息。而压缩的核心思想既是尽可能去处各小波域系数之间的信息关联,最大限度体现时频局部化的信息,因此,实际的压缩算法多采用小波包算法,而小波树的确定则是根据不同的信息论准则,以达到分解系数表达的信息密度最高。
下面我通过一个例子来说明小波包分析在图像压缩中的应用,并给出性能参数以便于同基于小波分析的压缩进行比较。
小波包优化 %读入信号 load julia %求颜色索引表长度 nbc=size(map,1);%得到信号的阈值,保留层数,小波树优化标准
[thr,sorh,keepapp,crit]=ddencmp('cmp','wp',X);%通过以上得到的参数对信号进行压缩
[xd,treed,perf0,perfl2]=wpdencmp(X,sorh,4,'sym4',crit,thr*2,keepapp);%更改索引表为pink索引表 colormap(pink(nbc));subplot(121);image(wcodemat(X,nbc));title('原始图像');subplot(122);image(wcodemat(xd,nbc));title('全局阈值化压缩图像');xlabel(['能量成分',num2str(perfl2),'%','零系数成分',num2str(perf0),'%']);plot(treed);
得到的压缩结果如图所示
图6 基于小波包分析的图像压缩
压缩过程中使用的最优小波数如图所示
图7 最优小波树
ddencmp、wpdencmp这两个命令是Matlab小波工具箱提供的自动获取阈值和自动使用小波包压缩的命令,后者将分解阈值化和重建综合起来。在将小波包用于信号压缩的过程中,ddencmp命令返回的最优小波树标准都是阈值化标准。根据这个标准确定的最优小波树可以使得压缩过程的零系数成分最高,并且自动降低计算量。
图像压缩是应用非常广泛的一类问题,所以其机器实现效率是至关重要的,在实际的应用中,如JPEG2000,一般不采用通常的mallat算法做小波分解,而是应用特定的双正交小波,利用其滤波器分布规则的特性,用移位操作来实现滤波操作。4.2 小波分析用于图像去噪
噪声可以理解为妨碍人的视觉器官或系统传感器对所接收图像源进行理解或分析的各种因素。一般噪声是不可预测的随机信号,它只能用概率统计的方法去认识。噪声对图像处理十分重要,它影响图像处理的输入、采集、处理的各个环节以及输出结果的全过程。特别是图像的输入、采集的噪声是个十分关键的问题,若输入伴有较大噪声,必然影响处理全过程及输出结果。因此一个良好的图像处理系统,不论是模拟处理还是计算机处理无不把减少最前一级的噪声作为主攻目标。去噪已成为图像处理中极其重要的步骤。
对二维图像信号的去噪方法同样适用于一维信号,尤其是对于几何图像更适合。二维模型可以表述为
s(i,j)=f(i,j)+δ·e(i,j)i,j=0,1,…,m-1 其中,e是标准偏差不变的高斯白噪声。二维信号用二维小波分析的去噪步骤有3步:(1)二维信号的小波分解。选择一个小波和小波分解的层次N,然后计算信号s到第N层的分解。
(2)对高频系数进行阈值量化。对于从1到N的每一层,选择一个阈值,并对这一层的高频系数进行软阈值量化处理。
(3)二维小波的重构。根据小波分解的第N层的低频系数和经过修改的从第一层到第N层的各层高频系数计算二维信号的小波重构。
在这3个步骤中,重点是如何选取阈值和阈值的量化 小噪声阈值去噪
下面给出一个二维信号(文件名为detfinger.mat),并利用小波分析对信号进行去噪处理。
%装入图像 load tire %下面进行噪声的产生 init=3718025452;rand('seed',init);Xnoise=X+18*(rand(size(X)));%用sym5小波对图像信号进行二层的小波分解 [c,s]=wavedec2(X,2,'sym5');%下面进行图像的去噪处理
%使用ddencmp函数来计算去噪的默认阈值和熵标准
%使用wdencmp函数来实现图像的压缩
[thr,sorh,keepapp]=ddencmp('den','wv',Xnoise);[Xdenoise,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,s,'sym5',2,thr,sorh,keepapp);%显示去噪后的图像 colormap(map);subplot(131);image(wcodemat(X,192));title('原始图像X');axis square subplot(132);image(wcodemat(X,192));title('含噪声的图像Xnoise');axis square subplot(133);image(Xdenoise);title('去噪后的图像');axis square
输出结果
从图中3个图像的比较可以看出,Matlab中的ddencmp和wdencmp函数可以有效地进行去噪处理。大噪声滤波去噪
再给定一个有较大白噪声的delmontl.mat图像。由于图像所含的噪声主要是白噪声,而且主要集中在图像的高频部分,所以我们可以通过全部滤掉图像中的高频部分实现图像的去噪。
load wmandril;%产生含噪图像
init=2055615866;randn('seed',init)x=X+38*randn(size(X));
%下面进行图像的去噪处理
%用小波函数sym4对x进行2层小波分解 [c,s]=wavedec2(x,2,'sym4');%提取小波分解中第一层的低频图像,即实现了低通滤波去噪 a1=wrcoef2('a',c,s,'sym4',1);%提取小波分解中第二层的低频图像,即实现了低通滤波去噪 a2=wrcoef2('a',c,s,'sym4',2);
%画出图像
subplot(221);image(X);colormap(map);title('原始图像');axis square subplot(222);image(x);colormap(map);title('含噪声图像');axis square;subplot(223);image(a1);title('第一次去噪图像');axis square;subplot(224);image(a2);title('第二次去噪图像');axis square;输出结果如图:
从上面的输出结果可以看出,第一次去噪已经滤去了大部分的高频噪声,但从去噪图像与原始图像相比可以看出,第一次去噪后的图像中还是含有不少的高频噪声;第二次去噪是在第一次去噪的基础上,再次滤去其中的高频噪声。从去噪的结果可以看出,它具有较好的去噪效果。
少量噪声的小波分解系数阈值量化去噪
下面再给出定一个喊有较少噪声的facets.mat图像。由于原始图像中只喊有较少的高频噪声,如果按照上一个例子把高频噪声全部滤掉的方法将损坏图像中固有的高频有用信号。因此这幅图像适合采用小波分解系数阈值量化方法进行去噪处理。
%下面装入原始图像,X中含有被装载的图像 load facets;%产生含噪声图像
init=2055615866;randn('seed',init)x=X+10*randn(size(X));%下面进行图像的去噪处理
[c,s]=wavedec2(x,2,'coif3');%用小波画数coif3对x进行2层小波分解 n=[1,2];%设置尺度向量n p=[10.12,23.28];%设置阈值向量p %对三个方向高频系数进行阈值处理 nc=wthcoef2('h',c,s,n,p,'s');nc=wthcoef2('v',nc,s,n,p,'s');nc=wthcoef2('d',nc,s,n,p,'s');%对新的小波分解结构[nc,s]进行重构 xx=waverec2(nc,s,'coif3');%画出图像
subplot(131);image(X);colormap(map);title('原始图像');axis square subplot(132);image(x);colormap(map);title('含噪声图像');axis square subplot(133);image(xx);colormap(map);title('去噪后的图像');axis square
输出结果如图
更加标准的做法是下面这样:
第二篇:matlab小波变换函数的总结与程序
小波去噪举例
MATLAB中用wnoise函数测试去噪算法
sqrt_snr=3;init=231434;
[x,xn]=wnoise(3,11,sqrt_snr,init);% 加噪,信噪比为3 subplot(3,2,1),plot(x)
title('original test function')subplot(3,2,2),plot(xn)title('noised function')lev=5;
xd=wden(x,'heursure','s','one',lev,'sym8');%利用小波对一维信号进行降噪, XD为降噪后的%信号,CXD,LXD为XD的小波分解结构 % 's' or 'h'决定阈值的使用方式,SCAL决定阈值是%否随噪声变化:'one' 不调整,'sln'对第一层系%数的层噪声分别进行估计和调整; 'mln'对各层%系数的层噪声分别进行估计和调整;
subplot(3,2,3),plot(xd)
title('One de-noised function')xd=wden(x,'heursure','s','sln',lev,'sym8');subplot(3,2,4),plot(xd)
title('Sln de-noised function')xd=wden(x,'sqtwolog','s','sln',lev,'sym8');% 固定阈值选择算法去噪 subplot(3,2,5),plot(xd)
title('Sqtwolog de-noised function')
[c,l]=wavedec(x,lev,'sym8');subplot(3,2,6),plot(xd)
title('CL de-noised function')
MATLAB中图像噪声处理举例
load sinsin;
colormap('default');subplot(1,3,1),image(X);title('original image');axis('square');init=231434;
randn('seed',init);
X=X+18*randn(size(X));%产生噪声信号 subplot(1,3,2),image(x);title('noised image');axis('square');[thr,sorh,keepapp]=ddencmp('den','wv',x);%自动生成小波去躁或压缩的阈值选择方案,也 %就是寻找默认值
[xc,cxc,lxc,perf0,perfl2]=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp);%使用全局阈值进行
%图象降噪
subplot(1,3,3),image(xc);title('denoised image');axis('square')
可见,含躁图像的噪声含量很强,利用小波去躁,可以有效去除躁声,同时保留了边界。Wdencmp函数
[xc,cxc,lxc,perf0,perfl2]=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp)是使用小波进行一维或二维小波压缩或降噪的函数。前面的语句是对于输入的一维或二维信号X,使用全局正阈值THR,由小波系数阈值得到降噪或压缩后的信号XC。附加的输出变量[cxc,lxc]是XC的小波分解结构; [perf0,perfl2]是恢复和压缩的L2范数百分比。使用小波'sym4'执行小波分解到第N=2层。Sorh是软阈值或硬阈值。若keepapp=1,低频系数不能进行阈值处理。
第三篇:小波变换快速算法及应用小结
离散小波变换的快速算法
Mallat算法[经典算法] 在小波理论中,多分辨率分析是一个重要的组成部分。多分辨率分析是一种对信号的空间分解方法,分解的最终目的是力求构造一个在频率上高度逼近L2(R)空间的正交小波基,这些频率分辨率不同的正交小波基相当于带宽各异的带通滤波器。因此,对于一个能量有限信号,可以通过多分辨率分析的方法把其中的逼近信号和细节信号分离开,然后再根据需要逐一研究。多分辨率分析的概念是S.Mallat在构造正交小波基的时候提出的,并同时给出了著名的Mallat算法。Mallat算法在小波分析中的地位相当于快速傅立叶变换在经典傅立叶变换中的地位,为小波分析的应用和发展起到了极大的推动作用。MALLAT算法的原理
在对信号进行分解时,该算法采用二分树结构对原始输入信号x(n)进行滤波和二抽取,得到
111第一级的离散平滑逼近和离散细节逼近和,再采用同样的结构对进行滤波和二抽取
22得到第二级的离散平滑逼近和离散细节逼近和,再依次进行下去从而得到各级的离散123细节逼近对,…,即各级的小波系数。重构信号时,只要将分解算法中的步骤反过来进行即可,但要注意,此时的滤波器与分解算法中的滤波器不一定是同一滤波器,并且要将二抽取装置换成二插入装置才行。
多孔算法
[小波变换快速算法及其硬件实现的研究毛建华]
多孔算法是由M.shen于1992年提出的一种利用Mallat算法结构计算小波变换的快速算法,因在低通滤波器h0()和高通滤波器h1()中插入适当数目的零点而得名。它适用于a=2的二分树结构,与Mallat算法的电路实现结构相似。先将Mallat算法的电路实现的基本支路作一下变形。令h0 和h1()的z变换为H0(z)与H1(z),下两条支路完全等价,只不过是将插值和二抽取的顺序调换一下罢了。图中其它的上下两条支路也为等效支路,可仿照上面的方法证明。这样,我们便可由Mallat算法的二分树电路结构得出多孔算法的电路级联图,原Mallat算法中的电路支路由相应的等效支路所取代,所以整个电路形式与Mallat算法非常相似。如果舍去最后的抽取环节们实际上相当于把所有点的小波变换全部计算出来。
基干FFT的小波快速算法
[小波变换快速算法及其硬件实现的研究毛建华]
Mallat算法是由法国科学家StephaneG.Mallat提出的计算小波分解与重构的快速算法,能大大降低小波分解与重构的计算量,因此在数字信号处理和数字通信领域中得到了广泛的应用。但是如果直接采用该算法计算信号的分解和重构,其运算量还是比较大。主要体现在信号长度较大时,与小波滤波器组作卷积和相关的乘加法的计算量很大,不利于信号的实时处理。故有必要对该算法作进一步的改进。众所周知,FFT是计算离散傅里叶变换(DFT)的一种快速算法,如能将它和Mallat算法结合在一起,势必会进一步降低小波分解和重构的计算量,事实证明这一想法是可行的。
基于FFT的小波变换快速算法是通过离散傅里叶变换建立起FFT和mallat算法之何的桥梁,从而将、FFT引入到小波变换中来,达到改小波变换快速算法及硬件实现的研究进Mallat算法的目的。
当信号长度较小时,FFT算法效率不及直接算法;随着长度的增加,特别是对于长度是2的幕次方的信号,FFT算法比直接算法更适用,能大大降低计算t。当信号是长序列信号时,小波分解与重构中,滤波器要补很多的零,这对信号的实时计算很不利,我们可以采用长序列快速相关卷积算法对信号进行分段后再运用FFT算法,提高运算速度。
基于算术傅里叶变换的小波变换快速算法
[小波变换快速算法及其硬件实现的研究毛建华]
算术傅里叶变换(AFT)是1988年由Tufts和Sadasiv提出的一种用Mobius反演公式计算连续函数傅里叶系数的方法.它具有乘法运算t仅为O(N)算法简单、并行性好的优点。根据DPT和连续函数傅里叶系数的关系,可以用AFT计算DFT。同直接算法相比,APT方法可以将DFT的计算时间减少90%,尤其是对于含有较大素因子,特别是其长度本身为素数的DFT,它的速度比传统的FFT更快.另一方面,Mallat算法的分解和重构算法也可由DFT来计算,从而将AFT与Mallat算法联系了起来,从而为小波变换快速算法开辟了新的途径。对于尺度
为j的快速分解算法步骤如下: 1)选定滤波器系数h(n)和g(n),再根据FFT的性质2,用N点的AFT分别计算出H(k)和G(k),分别取共扼,进而得到H*(k),G*(k)。
2)在已知cj(n)的情况下,用N点的AFT求出其DFTCj(k)3)分别计算出H*(k)Cj(k),G*(k)Cj(k),即C’j(k)和D’j(k)4)用N点的AFT求出C’j+1(k)和D’j+1(k)IDFT,得到C’j+1(n)和D’j+1(n)IDFT,再分别对它 们作二抽取,就可求出Cj+1(n)和Dj+1(n)。在进行分解计算时,H(k)G(k)只要计算一次即可。重复步骤(2)一(4)可实现下一尺度小波分解,直到达到规定的尺度为止。不过要注意:尺度增加一个级别,信号长度减半。对于尺度为j+1的快速重构算法为: 1)对Cj+1(n)和Dj+1(n)进行二插值,得到C’j+1(n)和D’j+1(n);2)用N点的AFT分别求出h(n)、g(n)的DFTH(k)和G(k)3)用N点的AFT分别求出C’j+1(n)和D’j+1(n)的DFTC’j+1(k)和D’j+1(k);4)根据(17)式求出Cj(k),再用N点的AFT进行IDFT,可求出cj(n)。
基于Hermite插值的小波变换模极大值重构信号快速算法
[基于Hermite插值的小波变换模极大值重构信号快速算法韩民,田岚,翟广涛,崔国辉] 信号在不同尺度上的小波变换模极大值包含了信号中的重要信息,因此研究如何由小波变 换模极大值重构信号是很有意义的。论文提出了一种基于Hermite插值多项式由二进小波变换模极大值重构信号的快速算法。数值试验表明,与S.Mallat提出的经典交替投影算法相比,该算法可以在保证重构质量的前提下简化计算过程,提高计算效率,计算所需时间与交替投影算法相比大大减少,是一种实用性较强的信号重构算法。
Hermite插值[11]方法是一种具有重节点的多项式插值方法,由于它要求在节点处满足相应的导数条件,因此也称为切触差值。由于小波系数模极大值点的导数为零,这与Hermite插值对节点的导数要求不谋而合,因此我们选用Hermite插值多项式作为改进的插值方法。
强奇异积分方程小波Petrov-Galerkin快速算法
[强奇异积分方程小波Petrov-Galerkin快速算法隆广庆]
通过构造具有高阶消失矩、小支集和半双正交性质的分片多尺度小波基底, 给出第2类强奇异积分方程的小波Petrov-Galerkin快速算法, 并证明该算法收敛阶达到最佳, 条件数有界, 计算复杂性几乎最佳。构造配置泛函的思想, 构造分片多项式空间Xn上2列具有半双正交性的小波基,其中一列具有高阶消失矩性质。
小波变换的应用
小波分析在图像压缩编码中的应用
[小波变换算法在数字图像处理中的应用支春强中国电子科技集团公司第二十八研究所,江苏南京 210007摘] 数字图像信号像素间一般都具有相关性,相邻之间、相邻列之间的相关性最强,其相关系数呈指规律衰减。图像中相关性的存在,是图像压缩的理论依据,使得能针对性地采用某种相关的手段去除冗余信息,达到压缩的目的。利用变换编码可以有效地消除像素间的相关性,从而获得较好的压缩效果。其基本原理就是将在时域描述的信号(如声音信号)或在空域描述的信号(如图像信号)经变换到正交向量空间(即变换域)中进行描述,在变换域的描述中各信号分量之间的相关性很小或互不相关,即能量得以集中。
小波变换进行图像重构实质上是相当于分别对图像数据的行和列做一维小波逆变换。对通过水平跟垂直滤波,离散小波将一级变换后图像的4个子图进行合成。对多级变换后的图像,则先对其信息集中的图进行重构,然后逐层进行。
小波分析在图像处理边缘检测中的应用
小波变换在车牌定位中的应用张国才,王召巴(中北大学信息与通信工程学院,山西太原030051)
由于传统的边缘检测方法检测到的边缘信息复杂,要想从中找准车牌的位置十分困难,而小波可以在不同的分辨率层次上对图像进行分割,在低分辨率层次上进行粗分割,由于计算量较小,适用于寻找目标的大致轮廓,在较高分辨率上实现精细分割,而且粗分割的结果对精细分割具有一定的指导作用,可以减少计算量和提高目标的定位精度。所以有的学者将小波变换用在了车牌区域的定位方面,利用小波的特点对车牌图像进行分析,发现小波分解后的细节分量中有能较好体现出车牌位置的信息,特别是水平低频、垂直高频分量能提供更准确的车牌位置信息。利用小波变换对车牌定位,在小波变换的分解图像中这里只研究其低频子图像,对低频子图像利用最大类间方差法进行二值化分割。
在军事工程方面的应用
[小波变换及其在轨道检测中的应用俞峰 戴月辉 ] 目前小波分析应用于轨道检测主要有: ①用小波时域局部特征检测突变信号(如检测钢
轨焊接部位缺陷、钢轨表面磨损等);②当传统的功率谱无法区分信号谱特征时,采用小波分 层细化分解,提取信号谱特征。
在语音合成方面的应用
[语音处理中自适应小波变换的应用 Application of Adaptive Wavelet Transformations in Speech Processing徐静波,冉崇森XU Jing2bo , RAN Chong2sen(信息工程大学信息工程学院,河南郑州450002)] 对于含噪声语音信号,我们先分离小波变换中语音信号引起的模极大值点和噪声引起的模极 大值点,再根据语音信号引起的模极大值点来检测端点。一般地,原始信号的Lipschitz指数是正的,而白噪声的Lipschitz指数是负的。当尺度减少时,如果某些小波变换模极大值点的幅值急剧增加,则表明对应的奇异性具有负的Lipschitz指数,这些极大值点几乎被噪声控制。因为由噪声引起的模极大值点的平均密度与尺度成反比,所以,随着尺度的递增,至少有一半的模极大值点不能传递到较大尺度上。因此,那些不能从一个尺度上传递到较大尺度上的模极大值点,也是由噪声控制的。我们把噪声控制的模极大值点去掉,剩下的模极大值点就是由语音信号控制的。
在其他方面的应用
(1)小波分析在数字水印中的应用
使用小波域水印方法的优点与在JPEG 中使用小波是类似的,并且小波的多分辨率分析与人眼视觉特性是一致的,这对根据HVS 选择适当的水印嵌入位置和嵌入强度有很大的帮助。(2)小波分析在图像滤波中的应用
在小波变换域,可通过对小波系数进行切削、缩小幅度等非线性处理,以达到滤除噪声的目的。
(3)小波分析在地球物理勘探中的应用
提高物理勘探资料的信噪比和分辨率一直是物理勘探资料处理所追求的目标。在资料处理中所遇到的噪音主要有规则干扰和随机干扰两大类,利用小波变换时频两域都有局部化的特点,对信号进行多尺度分解同样可以抑制噪音。(4)医学检测方面的应用
小波能有效提取生理信号中的突变特征点,这在医学方面(如B超、CT、磁共振、心电图等)已有成熟的应用。在胃动力检测方面,利用小波包变换方法能很清除地分辨出人体胃运动的三相特征,这些在临床上都有重要的应用价值。
第四篇:matlab总结
班级: 学号: 姓名:
Matlab学习综述
MATLAB是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和强大的数据可视化功能集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充。
MATLAB产品由若干个模块组成,不同的模块完成不同的功能,其中主要的核心模块有MATLAB、MATLAB Toolboxex、MATLAB Compiler Simulink、Simulink Blocksets、Real-time Workshop(RTW)Stateflow。这些产品大体上可以分为以MATLAB为基础的产品和以Simulink为基础的产品两大分支。其中,MATLAB是MATLAB产品家族的基础,任何其他MATLAB产品产品都以这个模块为基础。MATLAB的桌面应用程序开发工具是以MATLAB Compiler为核心的一组编译工具。Simulink是基于MATLAB的框图设计环境,可以用来对各种动态系统进行建模,分析和仿真,它的建模范围广泛,可以针对任何能够用数字来描述的系统进行建模。
一种完整的计算机应用语言应该提供对数据的描述和对数据的操作。在M语言中,最常用的数据类型表现手段和形式就是变量和常量,由于MATLAB软件自身的特点,它是一种以数值计算为基础的软件,因此M语言的基本处理单位是数值矩阵或者数值向量,在M语言中统一将矩阵或者向量称之为数组,因此掌握一些基本的矩阵、向量和数组操作的基本知识就成为了掌握MATLAB软件的基础。变量和常量是编程语言中类型的表现手段和形式,掌握变量和常量的概念也是掌握M语言编程的基础。所谓变量,就是指在程序运行中需要改变数值的量,每一个变量都具有一个名字,变量将在内存中占据一定的空间,以在程序运行的过程中保存其数值,对变量的命名有相应的要求:变量必须以字母开头,后面可以是字母、数字或者下划线之间的组合。所谓常量就是在程序运行的过程中不需要改变数值的量。
MATLAB专门以矩阵作为基本的运算单位,首先要掌握向量、矩阵、索引和多维数组的概念,以及在MATLAB环境下创建向量、矩阵和多维数组的方法,以及操作矩阵和多维数值的函数的使用方法。
目前的MATLAB版本中不仅有多达十几种的基本数据类型。在不同的专业工具箱中还有特殊的数据类型,并且MATLAB还支持面向对象的编程技术,支持用户自定义的数据类型。获取MATLAB的数据类型可以在MATLAB命令行窗体中键入help datatypes。MATLAB的数据类型包括基本的数值类型,逻辑类型数据、元胞数值、结构和字符串等,需要指出一点,MATLAB的基本数据是双精度数据类型和字符类型。MATLAB提供了完整的编写应用程序的功能,这种能力被称为M语言的高级语言来实现。这种语言是一种解释性语言,利用该语言编写的代码仅能被MATLAB接受,被MATLAB解释执行。其实,一个M语言文件就是由若干MATLAB的命令组合在一起构成的,和C语言类似。M语言文件都是标准的纯文本格式的文件,其文件的扩展名为.m。MATLAB的函数主要有两类,一类被称为内建函数,这类函数是由MATLAB的内核提供的,能够完成基本的运算,例如三角函数、矩阵运算函数等。另外一类函数就是利用高级语言开发的函数文件,这里的函数文件包括用C/FORTRAN语言开发的MEX函数文件,也包括了M函数文件。
M语言文件可以分为两类,其中一类是脚本文件,另一类是函数文件,脚本文件是最简单的一种M语言文件。所谓脚本文件就是由一系列的M语言文件指令和命令组成的纯文本格式的M文件,执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。脚本文件没有输入参数,也没有输出参数,脚本文件处理的数据或者变量必须在MATLAB的公共工作空间中,脚本文件主要是由注视行和代码行组成。
函数文件是M文件最重要的组成部分,M语言函数文件能够接受用户的输入参数,并进行计算,然后将计算结果作为函数的返回值返回给调用者,M函数文件和脚本文件不同,函数文件不仅有自己特殊的文件格式,而且不同的函数还分别具有自己的工作空间,函数文件的输/输出参数不同,这些输入/输出参数在定义的时候不需要指出变量的类型,因为MATLAB默认这些参数都使用双精度类型,这样可以简化程序的编写。M语言的函数文件不仅可以有一个输入参数和一个返回值,还可以为M语言函数文件定义多个输入参数和多个输出参数,同一个M函数文件中可以包含多个函数。如果在同一个M函数文件中包含了多个函数,那么将出现在文件中的第一个M函数称为主函数,其余的函数称为子函数。
经过这么一段时间的学习,对MATLAB有了初步的认识。但是关于它还有很多知识我们所不知道,还有待进一步的学习。以上内容是我对这学期所学课程的总结,可能有些地方总结的不够到位,因为有些地方学习的不够深入,所以,以后要更加努力,在MATLAB的学习上多花一些时间,为以后的学习和工作打下基础。
第五篇:MATLAB总结
目录
一、Matlab相关说明.....................................................................2
二、Matlab操作注意事项..............................................................2
三、Matlab常用代码(图像处理相关)......................................5
四、Matlab常用快捷键.................................................................7
五、Matlab学习心得.....................................................................8
一、Matlab相关说明
Matlab是“Matrix Laboratory”的缩写,意为“矩阵实验室”。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
我所使用的Matlab版本是2012a,下文所涉及到图片、专业术语等都是以此版本为基础。
二、Matlab操作注意事项
1.打开并运行一个现存的m文件且这个m文件运行时需用到同一级文件夹中的其他文件,会出现如下提示框:
选择变更文件夹,将当前文件夹变更为这个m文件所在的文件夹。
2.不小心点错或关闭了各种小窗口,将Matlab恢复成默认布局
点击桌面—桌面布局—默认
3.查看某个函数的用法
在命令窗口输入该变量的名称,回车即可。
4.查找某个函数的用法
在命令窗口输入help+函数的名称,回车后会自动显示该函数的相关信息。
5.运行文件后报错 如下图所示,命令窗口中报错的第一段是错误的原因,后面几段会显示发生错误的文件夹以及在该文件夹中的位置。
点击文件的名称,会跳转出一个提示框,上面显示了该文件的具体实现功能,如下图所示。点击文件名后面的行标号,可以直接跳转到发生错误的那一行。
6.如何编辑界面?
修改如图所示的fig文件
1.新建一个GUI文件
2.选择打开现存的GUI文件,点击Open,就可以对当前界面进行编辑了。
7.如何将MAtlab中默认的current folder修改为自己想要的路径,每次启动后都默认是自己 设定的这个路径?
>>右键matlab 快捷方式,属性-快捷方式-起始位置 填入你自己的工作目录。8.把图复制到WORD文件的方法:电机EDIT—>Copy Figure—>Ctrl+V 9.输入时,标点必须是英文状态下的
10.大多数情况下,matlab对空格不予处理
11.小括号代表运算级别,中括号用于生成矩阵,大括号用于构成单元数组
12.分号;的作用:不显示运算结果,但对图形窗口不起作用。分号也用于区分行,13.逗号,的作用:函数参数分隔符,也用于区分行,显示运算结果,当然不加标点也显示运算结果
14.冒号:多用于数组
15.续行号...不能放在等号后面使用,不能放在变量名中间使用,起作用时默认显蓝色 16.双引号'string'是字符串的标识符 17.感叹号!用于调用操作系统运算
18.百分号%是注释号,百分号后面直到行末的语句matlab跳过执行.另外还有一个块注释,即对多行一次注释,会使用到,格式为(注意%{ 和%}都要单独成行)%{ %} 19.矩阵中用圆括号表示下标,单元数组用大括号表示下标
20.对变量名的基本要求:区分大小写,不超过63个字符,以字母开头,只能是字母,数字和下划线
三、Matlab常用代码(图像处理相关)
1.创建一个文件夹 mkdir('D:myData');2.将图片保存到指定的文件夹
image_source=strcat('result',num2str(loop),'.jpg');imwrite(F.cdata,image_source);3.将电影转成图片序列
fnum=size(mov,2);%读取电影的祯数 for i=1:fnum strtemp=strcat('C:UsersAdministratorDesktopparticalfiltermyself粒子滤波',int2str(i),'.jpg');%将每祯转成jpg的图片 imwrite(mov(i).cdata,strtemp,'jpg');end
4、模拟噪声生成函数和预定义滤波器
① imnoise:用于对图像生成模拟噪声,如:
i=imread('104_8.tif');j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声 ② fspecial:用于产生预定义滤波器,如: h=fspecial('sobel');%sobel水平边缘增强滤波器 h=fspecial('gaussian');%高斯低通滤波器 h=fspecial('laplacian');%拉普拉斯滤波器
h=fspecial('log');%高斯拉普拉斯(LoG)滤波器 h=fspecial('average');%均值滤波器
5、图像文件I/O函数命令
imfinfo 返回图形图像文件信息
语法:info=imfinfo(filename,fmt)info=imfinfo(filename)imread 从图像文件中读取(载入)图像
语法:A=imread(filename,fmt)[X,map]=imread(filename,fmt)[...]=imread(filename)[...]=imread(URL,...)[...]=imread(...,idx)(CUR,ICO,and TIFF only)[...]=imread(...,'frames',idx)(GIF only)[...]=imread(...,ref)(HDF only)[...]=imread(...,'BackgroundColor',BG)(PNG only)[A,map,alpha] =imread(...)(ICO,CUR,PNG only)imwrite 把图像写入(保存)图像文件中
语法:imwrite(A,filename,fmt)imwrite(X,map,filename,fmt)imwrite(...,filename)imwite(...,Param1,Val1,Param2,Val2...)imcrop 剪切图像
语法:I2=imcrop(I)X2=imcrop(X,map)RGB2=imcrop(RGB)I2=imcrop(I,rect)X2=imcrop(RGB,rect)[...]=imcrop(x,y,...)[A,rect]=imcrop(...)[x,y,A,rect]=imcrop(...)
6.impixel 确定像素颜色值
语法:P=impixel(I)P=impixel(X,map)P=impixel(RGB)P=impixel(I,c,r)P=impixel(X,map,c,r)P=impixel(RGB,c,r)[c,r,P]=impixel(...)P=impixel(x,y,I,xi,yi)P=impixel(x,y,RGB,xi,yi)P=impixel(x,y,X,map,xi,yi)[xi,yi,P]=impixel(x,y,...)
7.二进制图像操作函数
applylut 在二进制图像中利用lookup表进行行边沿操作 语法:A=applylut(BW,LUT)bwarea 计算二进制图像对象的面积 语法:total=bwarea(BW)bweuler 计算二进制图像的欧拉数 语法:eul=bweuler(BW)
8.颜色空间转换函数
hsv2rgb 转换HSV值为RGB颜色空间:M=hsv2rgb(H)ntsc2rgb 转换NTSC值为RGB颜色空间:rgbmap=ntsc2rgb(yiqmap)RGB=ntsc2rgb(YIQ)rgb2hsv 转换RGB值为HSV颜色空间:cmap=rgb2hsv(M)rgb2ntsc 转换RGB值为NTSC颜色空间:yiqmap=rgb2ntsc(rgbmap)YIQ=rgb2ntsc(RGB)rgb2ycbcr 转换RGB值为YCbCr颜色空间:ycbcrmap=rgb2ycbcr(rgbmap)YCBCR=rgb2ycbcr(RGB)ycbcr2rgb 转化YCbCr值为RGB颜色空间:rgbmap=ycbcr2rgb(ycbcrmap)RGB=ycbcr2rgb(YCBCR)
9.类型转换函数
im2bw 转换图像为二进制图像
语法:BW=im2bw(I,level)BW=im2bw(X,map,level)BW=im2bw(RGB,level)im2double 转换图像矩阵为双精度型
语法:I2=im2double(I1)RGB2=im2double(RGB1)I=im2double(BW)X2=im2double(X1,'indexed')double 转换数据为双精度型 语法:double(X)unit8、unit16转换数据为8位、16位无符号整型: i=unit8(x)i=unit16(x)im2unit8 转换图像阵列为8位无符号整型
语法:I2=im2unit8(I1)RGB2=im2unit8(RGB1)I=im2unit8(BW)X2=im2unit8(X1,'indexed')im2unit16 转换图像阵列为16位无符号整型
语法:I2=im2unit16(I1)RGB2=im2unit16(RGB1)I=im2unit16(BW)X2=im2unit16(X1,'indexed')
四、Matlab常用快捷键
1.在命令窗口(Command Window)中:
1)【上、下键】――切换到之前、之后的命令,可以重复按多次来达到你想要的命令
2)clc――清除命令窗口显示的语句,此命令并不清空当前工作区的变量,仅仅是把屏幕上显示出来的语句清除掉
3)clear――这个才是清空当前工作区的变量命令,常用语句clear all来完成 4)【Tab】键――在command窗口,输入一个命令的前几个字符,然后按tab键,会弹出前面含这几个字符的所有命令,找到你要的命令,回车,就可以自动完成。目前讨论结果是:matlab6.5版本中,如果候选命令超过100个,则不显示。而在matlab7以后版本中,则没有这个限制,均可正常提示 5)【Ctrl+C】(或【Ctrl+Break】)――在matlab程序运行过程中,可能由于程序编写的失误,导致程序不停的运行,在命令窗口输入“Ctrl+C”可以将运行的程序停下来,而不需要将整个Matlab程序关掉。不过进行此操作的前提是能够激活切换到命令窗口才行。6)edit+函数名 查看或编辑源文件 7)who 显示当前变量名列表 8)whos 显示变量详细列表
9)which+函数名 证实该函数是否在当前路径 10)what 列出当前路径的所有matlab文件 11)load 加载外部文件 12)save 保存文件到外部 13)20.matlab的帮助函数: 14)help 15)help+函数名或help+函数类名 精确查询 16)helpwin 打开帮助窗口 17)helpwin+函数名 精确查询 18)helpdesk 打开帮助窗口 19)doc 打开帮助窗口
20)doc+函数名 打开帮助窗口,精确查询
21)lookfor+关键字 这个是matlab中的谷歌,模糊查询
2.在编辑器(Editor)中: 1)【Tab】(或【Ctrl+]】)――增加缩进(对多行有效)2)3)4)5)6)【Ctrl+[】--减少缩进(对多行有效)
【Ctrl+I】--自动缩进(即自动排版,对多行有效)【Ctrl+R】――注释(对多行有效)【Ctrl+T】――去掉注释(对多行有效)
【Ctrl+B】――括号配对检查(对版本6.5有效,但版本7.0无效,不知道是取消了还是换了另外的快捷键,请大牛们指点,其他版本没有测试过)7)【F12】――设置或取消断点 8)【F5】――运行程序
五、Matlab学习心得
接触Matlab一个多月,从刚开始连最基本的操作都不会,到现在能够熟练地运用Matlab解决问题。虽然现在学到的也只是皮毛而已,离精通还相差甚远,但至少为以后研究生期间的学习打下了良好的基础。下面我就简单的谈一下这一个月来的学习感想。
首先,想要学好Matlab必须有一定数学基础。Matlab软件是与高等数学,计算机科学相结合的软件。所以,当你学习Matlab时,你也得会一定的数学。你要尽量多的熟悉matlab自带的函数,及其作用,因为matlab的自带函数特别多,基本上能够满足一般的数据和矩阵的计算,所以基本上不用你自己编函数。这一点对你的程序非常有帮助,可以使你的程序简单,运行效率高,可以节省很多时间。
其次,要注重基础知识于实际操作结合。你把基本的知识看过之后,就需要找一个实际的程序来动手编一下,不要等所有的知识都学好之后再去编程,你要在编程的过程中学习,程序需要什么知识再去补充。在遇到问题时,不要光看别人如果解决,也不要光想怎么解决,自己坐下来,动手自己解决一下,那你就会把不是你的知识变成自己的知识。
最后,也是最重要的一点就是坚持。MATLAB涉及的领域太多,每个领域里面都缺乏足够的专家分布在你周围。那么我们很难有机会接触到真正的高手,对我们的技术细节一一指点。在遇到实际问题时,就只能靠自己去摸索。常常是再坚持一两个小时,就能够解决你的问题。最大的成就感,就在付出了极大的心血和耐心,才取得一个艰难的小胜利。