求小波变换图像融合的MATLAB程序,毕设用。

求小波变换图像融合的MATLAB程序,毕设用。,第1张

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实现小波变换,我要处理的数据不是图像数据,而是一个很大的二维矩阵中的数据、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9511018.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存