当前位置:首页 > 代码 > 正文

小波变换matlab代码(matlab中小波变换)

admin 发布:2022-12-19 17:03 155


今天给各位分享小波变换matlab代码的知识,其中也会对matlab中小波变换进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

怎样用MATLAB程序实现小波变换?

[YC,YS]=wavedec2(Y,2,'db1');

Y为要分解的图像矩阵,2为分解的层数,‘db1'为采用的小波基

返回两个矩阵YC和YS。Yh2=detcoef2('h',YC,YS,2);这是提取出图像2层分解后的水平分量,h改v是垂直分量,h该d是对角分量。细节分量用另外一个方法提取。

求基于小波变换的图像融合的程序算法(Matlab)

clc;

clear all;

close all; % 清理工作空间

clear

[imA,map1] = imread('A.tif');

M1 = double(imA) / 256;

[imB,map2] = imread('B.tif');

M2 = double(imB) / 256;

zt= 4;

wtype = 'haar';

% M1 - input image A

% M2 - input image B

% wtype使用的小波类型

% Y - fused image

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%

%% 小波变换图像融合

%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 小波变换的绝对值大的小波系数,对应着显著的亮度变化,也就是图像中的显著特征。所以,选择绝对值大

%% 的小波系数作为我们需要的小波系数。【注意,前面取的是绝对值大小,而不是实际数值大小】

%%

%% 低频部分系数采用二者求平均的方法

%%

%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[c0,s0] = wavedec2(M1, zt, wtype);%多尺度二维小波分解

[c1,s1] = wavedec2(M2, zt, wtype);%多尺度二维小波分解

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 后面就可以进行取大进行处理。然后进行重构,得到一个图像

%% 的小波系数,然后重构出总的图像效果。

%% 取绝对值大的小波系数,作为融合后的小波系数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

KK = size(c1);

Coef_Fusion = zeros(1,KK(2));

Temp = zeros(1,2);

Coef_Fusion(1:s1(1,1)) = (c0(1:s1(1,1))+c1(1:s1(1,1)))/2; %低频系数的处理

%这儿,连高频系数一起处理了,但是后面处理高频系数的时候,会将结果覆盖,所以没有关系

%处理高频系数

MM1 = c0(s1(1,1)+1:KK(2));

MM2 = c1(s1(1,1)+1:KK(2));

mm = (abs(MM1)) (abs(MM2));

Y = (mm.*MM1) + ((~mm).*MM2);

Coef_Fusion(s1(1,1)+1:KK(2)) = Y;

%处理高频系数end

%重构

Y = waverec2(Coef_Fusion,s0,wtype);

%显示图像

subplot(2,2,1);imshow(M1);

colormap(gray);

title('input2');

axis square

subplot(2,2,2);imshow(M2);

colormap(gray);

title('input2');

axis square

subplot(223);imshow(Y,[]);

colormap(gray);

title('融合图像');

axis square;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

求小波变换图像降噪的matlab代码

%源代码来自于在《MATLAB环境下基于小波变换的图像去噪》刘智clear;clc % 清理工作空间

load wbarb; % 装载原始图像

subplot(221); % 新建窗口

image(X); % 显示图像

colormap(map); % 设置色彩索引图

title('原始图像'); % 设置图像标题

axis square; % 设置显示比例,生成含噪图像并图示

init=2055615866; % 初始值

randn('seed',init); % 随机值

XX=X+8*randn(size(X)); % 添加随机噪声

subplot(222); % 新建窗口

image(XX); % 显示图像

colormap(map); % 设置色彩索引图

title('含噪图像'); % 设置图像标题

axis square; %用小波函数coif2 对图像XX 进行2 层分解

[c,l]=wavedec2(XX,2,'coif2'); % 分解

n=[1,2]; % 设置尺度向量

p=[10.28,24.08]; % 设置阈值向量,对高频小波系数进行阈值处理

%nc=wthcoef2('h',c,l,n,p,'s');

%nc=wthcoef2('v',c,l,n,p,'s');

nc=wthcoef2('d',c,l,n,p,'s');

X1=waverec2(nc,l,'coif2'); % 图像的二维小波重构

subplot(223); % 新建窗口

image(X1); % 显示图像

colormap(map); %设置色彩索引图

title('第一次消噪后的图像'); % 设置图像标题

axis square; % 设置显示比例,再次对高频小波系数进行阈值处理

%mc=wthcoef2('h',nc,l,n,p,'s');mc=wthcoef2('v',nc,l,n,p,'s');

mc=wthcoef2('d',nc,l,n,p,'s');

X2=waverec2(mc,l,'coif2'); % 图像的二维小波重构

subplot(224); % 新建窗口

image(X2); % 显示图像

colormap(map); % 设置色彩索引图

title('第二次消噪后的图像'); % 设置图像标题

axis square; % 设置显示比例

关于小波变换的Matlab编程

这是一个带参数的函数 根据下面的参数校验可以看出你应该是直接点运行了吧 所以报错了

你至少应该产生一个输入信号,比如一个正弦信号来做输入进行变换

。。。谁给你的程序啊 这bug也太多了 很多低级bug 我只是改的能运行了

function [WT,FreqBins,Scales]=CWT_Morlet(Sig,WinLen,nLevel)

%continuous Wavelet Transform using Morlet function

%Sig:信号

%WinLen:小波函数在尺度参数a=1时的长度(默认为10)

%nLevel:频率轴划分区间段(默认为1024)

%

%WT:返回的小波变换计算结果

%FreqBins:返回频率轴划分结果(归一化频率,最高频率为0.5)

%Scales:返回与频率轴划分值相对应的尺度划分(频率0.5对应的尺度为1)

if (nargin==0),

error('At least 1 parameter required!');

end;

if (nargin3),

nLevel=1024;

end

if (nargin2),

WinLen=10;

end

Sig=hilbert(real(Sig));%计算信号的解析信号

SigLen=length(Sig);%获取信号的长度

fmax=0.5;%设置最高分析频率

fmin=0.005;%设置最低分析频率

FreqBins=logspace(log10(fmin),log10(0.5),nLevel);%将频率轴在分析范围内等

%对数坐标划分

Scales=fmax*ones(size(FreqBins))./FreqBins;%计算响应的尺度参数

omg0=WinLen/6;

WT=zeros(nLevel,SigLen);%分配计算结果的存储单元

wait=waitbar(0,'Under calculation,please wait');

for m=1:nLevel,

waitbar(m/nLevel,wait);

a=Scales(m);%提取尺度参数

t=-round(a*WinLen):1:round(a*WinLen);

Mor1=pi^(-1/4)*exp(1i*2*pi*0.5*t/a).*exp(-t.^2/2/(2*omg0*a)^2);

%计算当前尺度下的小波函数

temp=conv(Sig,Mor1)/sqrt(a); %计算信号与小波函数的卷积

WT(m,:)=temp(round(a*WinLen)+1:length(temp)-round(a*WinLen));

end;

close(wait);

WT=WT/WinLen;

%%%%%%运行示例%%%%%%%%%

Fs=100;

t=0:1/Fs:2*pi;

sig=sin(t);

[WT,FreqBins,Scales]=CWT_Morlet(sig);

小波变换的matlab程序: wavename='cmor5-2';

使用MATLAB设计小波变换程序中的若干问题3[转贴]使用MATLAB设计小波变换程序中的若干问题仍需探讨的问题:为什么使用PNG存储经小波变换后的重构图像变大?我曾在清华大学的多媒体课程的教师答疑中写了“老师:尊重事实:DB9阈值10的PNG文件就是比原文件大”和“续一:尊重事实:DB9阈值10的PNG文件就是比原文件大”,在林老师的鼓励和指导下,我进行了继续试验、分析,与刘赵璧(Anna)同学进行了探讨,并得到了Lily(姓名还不知道)同学的帮助,同时同学们也做了各自不同的实验,现在的实验结果可以说基本上比较明确,那就是有些图像就是会变大,这与图像的种类、纹理等密切相关。林老师曾经鼓励我去研究一下PNG的压缩方法,无奈我资质不够,至今在这方面的进展不大。由于临近期末考试,作业也要抓紧,所以我暂且将没有搞明白的内容搁置,待寒假期间再进行,希望对这些问题有各种看法也有兴趣研究的同学对此发表意见。以下是我最近试验、分析和阅读到的一些相关信息。试验结果我首先根据老师第三章的Haar矩阵算法推演出DB9的系数矩阵,并实现了分解重构及阈值处理程序,对几种照片进行了比较,然后使用3.1节的simplecmp进行了相同照片的实验,结果相当一致。细小差别是因为我的程序对边界的扩展与MATLAB不一样,在设置阈值后引起了边界上小部分不一致造成的。表一:真彩色图像百合花的处理结果阈值PngHaar(Mat/Mine)0数Haat(Mat/Mine)PNGDb9(MAT/Mine)0数Db9(MAT/Mine)95973/95973095973/9597327524/2426895973/9597327/9574552/74292135838/136063101882/101992167412/1656621051976/51504163423/16374198411/98861199200/1957302032474/32346180167/18026792295/93660220629/217214从对比表中我们能够看到2个程序的结果相当一致,因此,我不再给出两种程序的对比,而是使用simplecmp直接处理的结果说明。将百合花图像使用[I,map]=rgb2ind(x,255);转换成为彩色图像处理,在将伪彩色图像转换为连续变换的灰度图像(如2.4常见问题中讨论的方法)进行处理:表二:百合花的伪彩色图像和处理后的灰度(gray)图像的处理结果阈值PngHaar(Index/Gray)0数Haar(Index/Gray)PNDb9(Index/Gray)0数Db9(Index/Gray)48535/43235048535/432356096/743048535/4323518/22553207/364509473/4362660362/499277009/528521058025/2360213362/5434464916/4781313202/658812060193/1434721948/6003966020/4601424468/73494其他伪彩色与进行加工的灰度图的结果与此完全一致,这也就说明了如果伪彩色文件的色板不是单调性递增就不适合小波分解。“Thecolorbartotherightoftheimageisnotsmoothanddoesnotmonotonicallyprogressfromdarktolight.Thistypeofindexedimageisnotsuitablefordirectwaveletdecompositionwiththetoolboxandneedstobepreprocessed.”。我对Facets进行同样的实验,结果与此一致。这种处理的结果可以从图像象素值的连续性来理解。这是处理与不处理的图像的中间一行的数据图。另外,不连续的图像质量在压缩后会被极大地破坏图2伪彩色文件变化前后的第128行数据的连续性情况对比分析多种试验图片基本能够反映类似的结果,虽然IndexedColorimage有时令Haar小波的分解重构图像出现增大现象,单经过处理之后,这种现象就会消失。然而对于DB9可以看到无论真彩色还是处理后的灰度图像都在阈值510处超过原始图像的大小,能不能因此得出DB9不适合进行图像压缩的结论呢?有一些同学确实这样认为,但我认为这种观点因为忽略了如何利用小波进行压缩和还原的过程,这也正是第四章老师为我们讲述的那些编码算法而造成的。在推荐材料[1]中也有类似的说明。图3、JPEG2000的基本结构看一下上图就可以明白为什么PNG不能衡量小波压缩的效率问题。上图的图像原始数据首先经过正变换(ForwardTransform)就是小波变换的得到小波系数,变换的小波系数经过阈值处理后进行量化,编码后得到压缩的图像文件JPEG2000,如果你没有JPEG2000的显示程序,那么你就不能看到它。它的显示程序就是由解码器从压缩数据中解出编码,进行反量化,得到小波系数,再实施逆变换(InverseTransform)就是小波系数重构。最终得到图像的原始数据。因此衡量小波变换的效率是应该看你选择的小波能不能分解出适合“编码器”压缩的小波系数,这种编码器不是PNG的LZ77,因为LZ77压缩小波分解系数的效率不是最好的。这种高效编码器在第四章可以找到。那么我们存储PNG文件的目的是什么呢?我认为压缩与去噪(de-noising)是同一种方法的两种提法。他们都使用了设置阈值的方法。我们可以仔细分析经过重构的PNG图片的质量来体会这种消除噪音的效果,也可以评定小波压缩后的图片的视觉质量,同时PNG的文件大小也可以让我们从LZ77算法的本质来理解小波变换压缩后的重构图像的内容变化情况。比如,我们可以从表2中的灰度图像在haar变换取阈值20时出现块状象素,文件大小变为14347,而db9却为46014,超过原始的PNG大小,但并不出现块状而是具有波状的特征。这本身说明了采用Harr小波压缩或去噪后重构的图像中相同的‘串’增多,便于PNG方式压缩,而db9则在相同阈值的情况下不会象Haar那样制造‘马赛克’,说明了它的平滑性,这也能帮助我们理解小波的特性。当然,当阈值继续增加后,超过某一界限,即使DB9也仍然会使PNG文件大小减小。这本身也就是由双尺度(Dyadic)小波变换的两种滤波器决定的。低通滤波结果相当于平均值,高通滤波结果相当于差值,差值能够保证重构图像的细节部分丢失最小,如果差值部分被阈值略去的过多,细节就会越来越少,平均意义的值约来越多,直到多到某一个临界值时(该图像的阈值取到40),重构的图像也可能出现较多的相同数字串,这就会提高PNG的压缩结果。下图是我对Haar(蓝色)小波取阈值为20,db9(红色)小波阈值取40时第128行1:32列的数据曲线与原始数据(黑色)曲线的对比。可以看出也db9在阈值=40时出现了较多的平均值,但比haar在阈值=20时的曲线要少的多。图4、haar(蓝色)和db9(红色)压缩后重构图像的第128行,1:32列的数据曲线不过,MATLAB给我们提供了量化的方法来决定如何选取阈值。在HELPWaveletToolbox:AdvanceConcepts:ChoosingtheOptimalDecomposition中提到了几种利用“熵”的概念来衡量如何选取合适的分解级。感兴趣的同学还可以参看wentropy,wdcbm2,wpdec的帮助。文献[1]中也提到了衡量压缩质量的客观化方法MSE,PNSR并指出小波的重构滤波器的长度越长,形状越规则越能够提供良好的压缩性能。上面对PNG的讨论因为没有足够的算法分析和程序解读,同时也没有准确的试验数据,因此只能作为猜测。但衡量小波压缩效率的方法我坚持认为不能以PNG文件大小来解说,如果采用图像文件大小来衡量,应该以JPEG2000来衡量。

如何编写二维离散小波变换的matlab公式

二维离散小波变换的matlab公式是这样编写的,可以直接拷贝到MATLAB上运行:

clear;clc;

%%%%%%%%%%测试图像只能是方形图像,长宽像素一样。

f=imread('Lena.bmp');%%读取图像数据,图像只能保存在m文件所在的路径下

d=size(f);

if length(d)2

f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图

end

T=d(1);

SUB_T=T/2;

% 2.进行二维小波分解

l=wfilters('db10','l'); % db10(消失矩为10)低通分解滤波器冲击响应(长度为20)

L=T-length(l);

l_zeros=[l,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂

h=wfilters('db10','h'); % db10(消失矩为10)高通分解滤波器冲击响应(长度为20)

h_zeros=[h,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂

for i=1:T; % 列变换

row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积-FFT

row(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积-FFT

end;

for j=1:T; % 行变换

line(j,1:SUB_T)=dyaddown( ifft( fft(l_zeros).*fft(row(j,:)) ) ); % 圆周卷积-FFT

line(j,SUB_T+1:T)=dyaddown( ifft( fft(h_zeros).*fft(row(j,:)) ) ); % 圆周卷积-FFT

end;

decompose_pic=line; % 分解矩阵

% 图像分为四块

lt_pic=decompose_pic(1:SUB_T,1:SUB_T); % 在矩阵左上方为低频分量--fi(x)*fi(y)

rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T); % 矩阵右上为--fi(x)*psi(y)

lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T); % 矩阵左下为--psi(x)*fi(y)

rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T); % 右下方为高频分量--psi(x)*psi(y)

% 3.分解结果显示

figure(1);

subplot(2,1,1);

imshow(f,[]); % 原始图像

title('original pic');

subplot(2,1,2);

image(abs(decompose_pic)); % 分解后图像

title('decomposed pic');

figure(2);

% colormap(map);

subplot(2,2,1);

imshow(abs(lt_pic),[]); % 左上方为低频分量--fi(x)*fi(y)

title('\Phi(x)*\Phi(y)');

subplot(2,2,2);

imshow(abs(rt_pic),[]); % 矩阵右上为--fi(x)*psi(y)

title('\Phi(x)*\Psi(y)');

subplot(2,2,3);

imshow(abs(lb_pic),[]); % 矩阵左下为--psi(x)*fi(y)

title('\Psi(x)*\Phi(y)');

subplot(2,2,4);

imshow(abs(rb_pic),[]); % 右下方为高频分量--psi(x)*psi(y)

title('\Psi(x)*\Psi(y)');

% 5.重构源图像及结果显示

% construct_pic=decompose_matrix'*decompose_pic*decompose_matrix;

l_re=l_zeros(end:-1:1); % 重构低通滤波

l_r=circshift(l_re',1)'; % 位置调整

h_re=h_zeros(end:-1:1); % 重构高通滤波

h_r=circshift(h_re',1)'; % 位置调整

top_pic=[lt_pic,rt_pic]; % 图像上半部分

t=0;

for i=1:T; % 行插值低频

if (mod(i,2)==0)

topll(i,:)=top_pic(t,:); % 偶数行保持

else

t=t+1;

topll(i,:)=zeros(1,T); % 奇数行为零

end

end;

for i=1:T; % 列变换

topcl_re(:,i)=ifft( fft(l_r).*fft(topll(:,i)') )'; % 圆周卷积-FFT

end;

bottom_pic=[lb_pic,rb_pic]; % 图像下半部分

t=0;

for i=1:T; % 行插值高频

if (mod(i,2)==0)

bottomlh(i,:)=bottom_pic(t,:); % 偶数行保持

else

bottomlh(i,:)=zeros(1,T); % 奇数行为零

t=t+1;

end

end

小波变换matlab代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于matlab中小波变换、小波变换matlab代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/14701.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载