个人收集的一些关于小波分析的matlab程序.docx
- 文档编号:23612162
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:139
- 大小:60.57KB
个人收集的一些关于小波分析的matlab程序.docx
《个人收集的一些关于小波分析的matlab程序.docx》由会员分享,可在线阅读,更多相关《个人收集的一些关于小波分析的matlab程序.docx(139页珍藏版)》请在冰豆网上搜索。
个人收集的一些关于小波分析的matlab程序
个人收集的一些关于小波分析的matlab程序
都是从网上收集来的,在文档结构图里查看,每个标题对应一个程序,难免重复,请大家理解。
标题:
提升法97经典程序
1.%%本程序实现任意偶数大小图像第二代双正交97提升小波变换%%注1:
采用标准正交方法,对行列采用不同矩阵(和matlab里不同)
2.%%注2:
为了保证正交,所有边界处理,全部采用循环处理
3.%%注3:
正交性验证,将单位阵带入函数,输出仍是单位阵(matlab不具有此性质)
4.%%注4:
此程序是矩阵实现,所以图像水平分量和垂直分量估计被交换位置
5.%%注5:
此程序实现的是类小波(wavelet-like)变换,是介于小波包变换与小波变换之间的变换
6.%%注6:
此程序每层变换相对原图像矩阵,产生的矩阵都是正交阵,这和小波包一致
7.%%注7:
但小波变换每层产生的矩阵,是相对每个待分解子块的正交矩阵,而不是原图像的正交矩阵
8.%%注8:
且小波变换产生的正交矩阵维数,随分解层数2分减少
9.%%注9:
提升系数可以在MATLAB7.0以上版本,用liftwave('9.7')获取,这里直接给出,考虑兼容性
10.%%注10:
由于MATLAB数组下标从1开始,所以注意奇偶序列的变化
11.%%注11:
d为对偶上升,即预测;p为原上升,即更新%%编程人沙威安徽大学
12.%%编程时间2004年12月18日%%x输入图像,y输出图像
13.%%flag_trans为正变换或反变换标志,0执行正变换,1执行反变换
14.%%flag_max,是否最大层数变换标志,0执行用户设定层数,1执行最大层数变换
15.%%layer,用户层数设置(小于最大层)functiony=db97(x,flag_trans,flag_max,layer);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
16.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
17.
18.%1.输入参数检查%矩阵维数判断
19.[sa,sb]=size(x);if(sa~=sb)%防止非图像数据
20.errordlg('非图像数据!
');
21.error('非图像数据!
');
22.end;%变换标志判断
23.[sa,sb]=size(flag_trans);
24.if((sa~=1)|(sb~=1))%变换标志错误
25.errordlg('变换标志错误!
');
26.error('变换标志错误!
');
27.end;if((flag_trans~=1)&(flag_trans~=0))%变换标志错误
28.errordlg('变换标志错误!
');
29.error('变换标志错误!
');
30.end;%最大层数标志判断
31.[sa,sb]=size(flag_max);
32.if((sa~=1)|(sb~=1))%最大层数标志错误
33.errordlg('最大层数标志错误!
');
34.error('最大层数标志错误!
');
35.end;if((flag_max~=1)&(flag_max~=0))%最大层数标志错误
36.errordlg('最大层数标志错误!
');
37.error('最大层数标志错误!
');
38.end;%用户设置层数判断
39.if(flag_max~=1)[sa,sb]=size(layer);
40.if((sa~=1)|(sb~=1))%层数设置错误
41.errordlg('层数设置错误!
');
42.error('层数设置错误!
');
43.end;if(flag_max<0)%层数设置错误
44.errordlg('层数设置错误!
');
45.error('层数设置错误!
');
46.end;
47.end;
48.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50.
51.%2.提升系数确定
52.%t1=liftwave('9.7');%获取提升系数(MATLAB7.0以后)d1=[-1.586100000000000e+000,-1.586134342069360e+000];
53.p1=[1.079600000000000e+000,-5.298011857188560e-002];
54.d2=[-8.829110755411875e-001,-8.829110755411875e-001];
55.p2=[4.435068520511142e-001,1.576123746148364e+000];
56.d3=-8.698644516247808e-001;
57.p3=-1.149604398860242e+000;
58.
59.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
60.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61.
62.%3.分解层数确定
63.%采用用户输入和自动给出最大层数两种方法N=length(x);%矩阵大小
64.S=N;%变量
65.s=log2(N);%最大循环次数
66.n1=N/2;%初始一半矩阵大小
67.n2=N;%初始矩阵大小
68.u=0;%初始值%对非2的整数幂大小图像确定最大分解层数
69.forss=1:
s
70.if(mod(S,2)==0)
71.u=u+1;
72.S=S/2;
73.end;
74.end;
75.u=u-1;%分解最大层数减1(后面的边界处理造成)%最大层数确定
76.if(flag_max==0)%手动输入
77.T=layer;%用户输入值
78.else%自动确定最大层数
79.T=u;%分解最大层数
80.end
81.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
83.
84.%4.最大层数和图像大小检查if(T>u)%防止用户层数越界
85.errordlg('已超过最大分解层数!
或者非偶数大小图像!
');
86.error('已超过最大分解层数!
或者非偶数大小图像!
');
87.end;if(mod(N,2)~=0)%防止图像大小错误
88.errordlg('非偶数大小图像!
');
89.error('非偶数大小图像!
');
90.end;
91.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
92.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
93.
94.%5.提升法正变换if(flag_trans==0)
95.fortime=1:
T;%行正变换
96.
97.%d;
98.x1(n1,:
)=x(n2,:
)+d1
(2)*x(n2-1,:
)+d1
(1)*x(1,:
);
99.x1([1:
n1-1],:
)=x([2:
2:
n2-2],:
)+d1
(2)*x([1:
2:
n2-3],:
)+d1
(1)*x([3:
2:
n2-1],:
);
100.
101.%p;
102.x(1,:
)=x(1,:
)+p1
(2)*x1(n1,:
)+p1
(1)*x1(1,:
);
103.x([2:
n1],:
)=x([3:
2:
n2-1],:
)+p1
(2)*x1([1:
n1-1],:
)+p1
(1)*x1([2:
n1],:
);
104.x([n1+1:
n2],:
)=x1([1:
n1],:
);
105.
106.%d;
107.x(n1+1,:
)=x(n1+1,:
)+d2
(2)*x(n1,:
)+d2
(1)*x(1,:
);
108.x([n1+2:
n2],:
)=x([n1+2:
n2],:
)+d2
(2)*x([1:
n1-1],:
)+d2
(1)*x([2:
n1],:
);
109.
110.%p;
111.x(n1,:
)=x(n1,:
)+p2
(2)*x(n1+1,:
)+p2
(1)*x(n1+2,:
);
112.x(n1-1,:
)=x(n1-1,:
)+p2
(2)*x(n2,:
)+p2
(1)*x(n1+1,:
);
113.x([1:
n1-2],:
)=x([1:
n1-2],:
)+p2
(2)*x([n1+2:
n2-1],:
)+p2
(1)*x([n1+3:
n2],:
);
114.
115.%归一
116.x([1:
n1],:
)=p3*x([1:
n1],:
);
117.x([n1+1:
n2],:
)=d3*x([n1+1:
n2],:
);clearx1;
118.
119.%列正变换
120.
121.%d;
122.x1(:
[1:
n1])=x(:
[2:
2:
n2]);
123.
124.%p;
125.x(:
1)=x(:
1)-d1
(1)*x1(:
n1)-d1
(2)*x1(:
1);
126.x(:
[2:
n1])=x(:
[3:
2:
n2-1])-d1
(1)*x1(:
[1:
n1-1])-d1
(2)*x1(:
[2:
n1]);
127.x(:
[n1+1:
n2])=x1(:
[1:
n1]);
128.
129.%d;
130.x(:
n2)=x(:
n2)-p1
(1)*x(:
n1)-p1
(2)*x(:
1);
131.x(:
[n1+1:
n2-1])=x(:
[n1+1:
n2-1])-p1
(1)*x(:
[1:
n1-1])-p1
(2)*x(:
[2:
n1]);
132.
133.%p;
134.x(:
n1,:
)=x(:
n1)-d2
(1)*x(:
n2)-d2
(2)*x(:
n1+1);
135.x(:
[1:
n1-1])=x(:
[1:
n1-1])-d2
(1)*x(:
[n1+1:
n2-1])-d2
(2)*x(:
[n1+2:
n2]);
136.
137.%d;
138.x(:
n1+1)=x(:
n1+1)-p2
(1)*x(:
n1-1)-p2
(2)*x(:
n1);
139.x(:
n1+2)=x(:
n1+2)-p2
(1)*x(:
n1)-p2
(2)*x(:
1);
140.x(:
[n1+3:
n2])=x(:
[n1+3:
n2])-p2
(1)*x(:
[1:
n1-2])-p2
(2)*x(:
[2:
n1-1]);
141.
142.%归一
143.x(:
[1:
n1])=d3*x(:
[1:
n1]);
144.x(:
[n1+1:
n2])=p3*x(:
[n1+1:
n2]);clearx1;
145.
146.n2=n2/2;%原大小
147.n1=n2/2;%一半大小
148.end;
149.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
150.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
151.
152.%6.提升法反变换else
153.n2=N/(2.^(T-1));%分解最小子块维数
154.n1=n2/2;
155.fortime=1:
T;%行反变换
156.
157.%去归一
158.x([1:
n1],:
)=x([1:
n1],:
)/p3;
159.x([n1+1:
n2],:
)=x([n1+1:
n2],:
)/d3;%反p;
160.x(n1,:
)=x(n1,:
)-p2
(2)*x(n1+1,:
)-p2
(1)*x(n1+2,:
);
161.x(n1-1,:
)=x(n1-1,:
)-p2
(2)*x(n2,:
)-p2
(1)*x(n1+1,:
);
162.x([1:
n1-2],:
)=x([1:
n1-2],:
)-p2
(2)*x([n1+2:
n2-1],:
)-p2
(1)*x([n1+3:
n2],:
);
163.
164.%反d;
165.x(n1+1,:
)=x(n1+1,:
)-d2
(2)*x(n1,:
)-d2
(1)*x(1,:
);
166.x([n1+2:
n2],:
)=x([n1+2:
n2],:
)-d2
(2)*x([1:
n1-1],:
)-d2
(1)*x([2:
n1],:
);
167.
168.%反p;
169.x1(1,:
)=x(1,:
)-p1
(2)*x(n2,:
)-p1
(1)*x(n1+1,:
);
170.x1([2:
n1],:
)=x([2:
n1],:
)-p1
(2)*x([n1+1:
n2-1],:
)-p1
(1)*x([n1+2:
n2],:
);
171.
172.%反d;
173.x(n2,:
)=x(n2,:
)-d1
(2)*x1(n1,:
)-d1
(1)*x1(1,:
);
174.x([2:
2:
n2-2],:
)=x([n1+1:
n2-1],:
)-d1
(2)*x1([1:
n1-1],:
)-d1
(1)*x1([2:
n1],:
);
175.
176.%偶数
177.x([1:
2:
n2-1],:
)=x1([1:
n1],:
);
178.
179.clearx1;
180.
181.%列反变换
182.
183.%归一
184.x(:
[1:
n1])=x(:
[1:
n1])/d3;
185.x(:
[n1+1:
n2])=x(:
[n1+1:
n2])/p3;%反d;
186.x(:
n1+1)=x(:
n1+1)+p2
(1)*x(:
n1-1)+p2
(2)*x(:
n1);
187.x(:
n1+2)=x(:
n1+2)+p2
(1)*x(:
n1)+p2
(2)*x(:
1);
188.x(:
[n1+3:
n2])=x(:
[n1+3:
n2])+p2
(1)*x(:
[1:
n1-2])+p2
(2)*x(:
[2:
n1-1]);
189.
190.%反p;
191.x(:
n1,:
)=x(:
n1)+d2
(1)*x(:
n2)+d2
(2)*x(:
n1+1);
192.x(:
[1:
n1-1])=x(:
[1:
n1-1])+d2
(1)*x(:
[n1+1:
n2-1])+d2
(2)*x(:
[n1+2:
n2]);
193.
194.%反d;
195.x(:
n2)=x(:
n2)+p1
(1)*x(:
n1)+p1
(2)*x(:
1);
196.x(:
[n1+1:
n2-1])=x(:
[n1+1:
n2-1])+p1
(1)*x(:
[1:
n1-1])+p1
(2)*x(:
[2:
n1]);
197.
198.%反p;
199.x1(:
1)=x(:
1)+d1
(1)*x(:
n2)+d1
(2)*x(:
n1+1);
200.x1(:
[2:
n1])=x(:
[2:
n1])+d1
(1)*x(:
[n1+1:
n2-1])+d1
(2)*x(:
[n1+2:
n2]);%奇偶
201.x(:
[2:
2:
n2])=x(:
[n1+1:
n2]);
202.x(:
[1:
2:
n2-1])=x1(:
[1:
n1]);clearx1;
203.
204.n2=n2*2;%原大小
205.n1=n2/2;%一半大小end;
206.end;
207.
208.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
209.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
210.
211.%7.结果输出y=x;
212.%传输最后结果%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
213.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
214.
215.%8.内存清理clearx;
216.clearflag_max;
217.clearlayer;
218.clearflag_trans;
219.clearN;
220.clearn1;
221.clearn2;
222.clears;
223.clearss;
224.clearu;
225.cleard1;
226.cleard2;
227.cleard3;
228.clearp1;
229.clearp2;
230.clearp3;
231.clearsa;
232.clearsb;
233.
234.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
235.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
复制代码
标题:
2代小波示意程序
1.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2.%%此程序用提升法实现第二代小波变换
3.%%我用的是非整数阶小波变换
4.%%采用时域实现,步骤先列后行
5.%%正变换:
分裂,预测,更新;
6.%%反变换:
更新,预测,合并
7.%%只做一层(可以多层,而且每层的预测和更新方程不同)clear;clc;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9.%%%%
10.
11.%1.调原始图像矩阵loadwbarb;%下载图像
12.f=X;%原始图像
13.%f=[00000000;...
14.%00011000;...
15.%00244200;...
16.%01488410;...
17.%01488410;...
18.%00244200;...
19.%00011000;...
20.%00000000;];%原始图像矩阵N=length(f);%图像维数
21.T=N/2;
22.
23.%子图像维数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
24.%%%%%%%%%%%%%%%%%正变换%%%%%%%%%%%%%%%%%%%%%%%%%
25.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
26.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27.%%%%1.列变换
28.
29.%A.分裂(奇偶分开)f1=f([1:
2:
N-1],:
);%奇数
30.f2=f([2:
2:
N],:
);%偶数%f1(:
T+1)=f1(:
1);%补列
31.%f2(T+1,:
)=f2(1,:
);%补行%B.预测fori_hc=1:
T;
32.high_frequency_column(i_hc,:
)=f1(i_hc,:
)-f2(i_hc,:
);
33.end;%high_frequency_column(T+1,:
)=high_frequency_column(1,:
);%补行%C.更新fori_lc=1:
T;
34.low_frequency_column(i_lc,:
)=f2(i_lc,:
)+1/2*high_frequency_column(i_lc,:
);
35.end;%D.合并
36.f_column([1:
1:
T],:
)=low_frequency_column([1:
T],:
);
37.f_column([T+1:
1:
N],:
)=high_frequency_column([1:
T],:
);
38.
39.
40.figure
(1)
41.colormap(map);
42.image(f);figure
(2)
43.colormap(map);
44.image(f_column);
45.
46.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48.%%%%2.行变换
49.
50.%A.分裂(奇偶分开)f1=f_column(:
[1:
2:
N-1]);%奇数
51.f2=f_column(:
[2:
2:
N]);%偶数
52.%f2(:
T+1)=f2(:
1);%补行%B.预测fori_hr=1:
T;
53.high_frequency_row(:
i_hr)=f1(:
i_hr)-f2(:
i_hr);
54.end;%high_frequency_row(:
T+1)=high_frequency_row(:
1);%补行%C.更新fori_lr=1:
T;
55.low_frequency_row(:
i_lr)=f2(:
i_lr)+1/2*high_frequency_row(:
i_lr);
56.end;%D.合并
57.f_row(:
[1:
1:
T])=low_frequency_row(:
[1:
T]);
58.f_row(:
[T+1:
1:
N])=high_frequency_row(:
[1:
T]);
59.figure(3)
60.colormap(map);
61.image(f_row);
62.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
63.%%%%%%%%%%%%%%%%%%%反变换%%%%%%%%%%%%%%%%%%%%%%%%%
64.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65.%%%%%%%%%%%%%%%%%%%%%%%%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 收集 一些 关于 分析 matlab 程序