
clc;
clear all;
close all; % 清理工作空间
clear
[imA,map1] = imread('Atif');
M1 = double(imA) / 256;
[imB,map2] = imread('Btif');
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 = (mmMM1) + ((~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这个软件熟不熟,关于算法特别是软件编程的的东西,你只有自己去 *** 作领会,才懂。
我这儿有一个我读研时候的程序,你看看,看得懂就看,原始数据用的地震数据(你可以用自己的txt或者dat数据进去试一下),需要加载seismic工具包,用的是二维两参数小波做连续小波变换。二维数据大的话必须用窗口做再一点一点的平移窗口,窗口点数必须是2的n次方乘2的n次方,还要处理边界,不是一句两句讲的懂。
网上的程序你也可以下载下来看看,很有帮助。
addpath D:\MATLAB\work\SeisLab\S4M\Geophysics_201
addpath D:\MATLAB\work
%--------》初始化《---------------------------------------
clear all
clc
clf
%----------》读取数据《------------
f2=altreadsegy('a3sgy');
Tr=length(f2(1,:));
T=length(f2(:,1));
f3=f2(:,32);
b=zeros(T,Tr);
%-----------------》拓展f(x,t)的边界《-------------
f1=zeros(T+112,Tr+112);
for i=1:1:T+112
for j=1:1:Tr+112
if i<=T&&j<=Tr
f1(i,j)=f2(i,j);
else
f1(i,j)=0;
end
end
end
%-----------------》计算瞬时相位《---------------------
for m=1:(128-16):T
for n=1:(128-16):Tr
for x=1:128
for t=1:128
f(x,t)=f1(m+x-1,n+t-1);
end
end
%-------------》对每一道作Hilbet变换,并取瞬时相位余弦,进行二维小波变换《------------------
F=hilbert(f);
ip=cos(angle(F));
Ph=fft2(ip);
sz=zeros(128,128);
for h=1:40;
seta=pi-(pi/3+hpi/120);
a=002;
for k=1:128;
for j=1:128;
x=a((k-64)cos(seta)-(j-64)sin(seta));
t=a((k-64)sin(seta)+(j-64)cos(seta));
g(k,j)=025exp(-05(5x^2+(t-1)^2));
end
end
mh=Phg;
st=ifft2(mh);
sz1=abs(real(st));
for k=1:128;
for j=1:128;
if sz1(k,j)>=sz(k,j)
sz(k,j)=sz1(k,j);
else
sz(k,j)=sz(k,j);
end
end
end
end
b(m+7:m+119,n+7:n+119)=sz1(8:120,8:120);
end
end
s_cplot(b(8:T-8,8:Tr-8));
shading interp;
f=fopen('aytxt','w');
fwrite(f,f3,'float32');
fclose(f);
以上就是关于求小波变换图像融合的MATLAB程序,毕设用。全部的内容,包括:求小波变换图像融合的MATLAB程序,毕设用。、请问怎么用matlab实现小波变换,我要处理的数据不是图像数据,而是一个很大的二维矩阵中的数据、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)