%求出各图的灰度平均图
sum=0;
for i=1:2
[filename,pathname]=uigetfile('*.bmp','读入短波图像1');
file=strcat(pathname,filename);
I=imread(file);
I=rgb2gray(I);
I=double(I);
sum=sum+I;
end
ave=sum/2;
ave=uint8(ave);
%imshow(ave);
%将灰度平均图分成6*9区域,对其进行二值化
J=double(ave);
[m,n]=size(ave);
for i=1:6:(6*fix(m/6)-5)
for j=1:9:(9*fix(n/9)-8)
Ir=ave(i:i+5,j:j+8) ;
level=graythresh(Ir);
BW = im2bw(Ir,level);
J(i:i+5,j:j+8)=BW;
end
end
J=double(J);
%figure,imshow(J);
%将平均后图像分成长波和短波两幅图,二值化图像中每列1的个数过半则为长波,否则为短波图
L=zeros(m,n);
S=zeros(m,n);
a=zeros(1,n);
b=zeros(1,n);
l=0;
p=0;
for i=1:n
k=0;
for j=1:m
if J(j,i)==1
k=k+1;
end
end
if k>fix(m/2)
l=l+1;
a(i)=1;
L(:,l)=ave(:,i);
else
p=p+1;
a(i)=0;
S(:,p)=ave(:,i);
end
end
L=uint8(L);
S=uint8(S);
imshow(L);
%figure,imshow(S);
%分别用均值和中值滤波器选择窗口大小分别为3*3 5*5对长短波图像进行滤波,取像质最好
h1=ones(3,3)/9;
h2=ones(5,5)/25;
LA1=imfilter(L,h1);
LA2=imfilter(L,h2);
LM1=medfilt2(L,[3 3]);
LM2=medfilt2(L,[5 5]);
SA1=imfilter(S,h1);
SA2=imfilter(S,h2);
SM1=medfilt2(S,[3 3]);
SM2=medfilt2(S,[5 5]);
%figure,imshow(LA1),title('长波均值3*3');
%figure,imshow(LA2),title('长波均值5*5');
%figure,imshow(LM1),title('长波中值3*3');
%figure,imshow(LM2),title('长波中值5*5');
%figure,imshow(SA1),title('短波均值3*3');
%figure,imshow(SA2),title('短波均值5*5');
%figure,imshow(SM1),title('短波中值3*3');
%figure,imshow(SM2),title('短波中值5*5');
%均选择窗口为3*3的中值滤波对图像进行处理,将滤波后的长短波图像合成
x=0;
y=0;
R=zeros(m,n);
for i=1:n
%s=a(i);
%t=b(i);
%R(:,s)=LM1(:,i);
%R(:,t)=SM1(:,i);
if(a(i)==1)
x=x+1;
R(:,i)=LM1(:,x);
end
if(a(i)==0)
y=y+1;
R(:,i)=SM1(:,y);
end
end
R=uint8(R);
figure,imshow(R);
%求出长波和短波交界处的差值,长波条纹减掉该差值;短波条纹加上该差值,得到两幅图像
d=zeros(m,1);
R=double(R);
R1=R;
R2=R;
%R1=zeros(m,n);
%R2=zeros(m,n);
for k=1:n-1
if (a(k)==1)&&(a(k+1)==0)
d(:,1)=R(:,k)-R(:,k+1);
x=k-1;
while a(x)~=0
x=x-1;
end
for i=(x+1):k
R1(:,i)=R1(:,i)-d(:,1);
end
y=k+2;
while (a(y)~=1)&&(y<n)
y=y+1;
end
for j=k+1:y-1
R2(:,j)=R2(:,j)+d(:,1);
end
end
end
R1=uint8(R1);
R2=uint8(R2);
%figure,imshow(R1);
%figure,imshow(R2);
%对所得到的两幅图像进行中值及均值滤波 窗口分别选择3*3和5*5
h1=ones(3,3)/9;
h2=ones(5,5)/25;
R1A1=imfilter(R1,h1);
R1A2=imfilter(R1,h2);
R1M1=medfilt2(R1,[3 3]);
R1M2=medfilt2(R1,[5 5]);
R2A1=imfilter(R2,h1);
R2A2=imfilter(R2,h2);
R2M1=medfilt2(R2,[3 3]);
R2M2=medfilt2(R2,[5 5]);
%figure,imshow(R1A1),title('R1均值3*3');
%figure,imshow(R1A2),title('R1均值5*5');
figure,imshow(R1M1),title('R1中值3*3');
%figure,imshow(R1M2),title('R1中值5*5');
%figure,imshow(R2A1),title('R2均值3*3');
%figure,imshow(R2A2),title('R2均值5*5');
figure,imshow(R2M1),title('R2中值3*3');
%figure,imshow(R2M2),title('R2中值5*5');
%均选择窗口为3*3的中值滤波对图像进行处理,将滤波后的两幅图像融合
[m n]=size(R1M1);
min=R1M1(1,1);
max=R1M1(1,1);
for i=1:m;
for j=1:n;
if R1M1(i,j)<min;
min=R1M1(i,j);
end;
if R1M1(i,j)>max;
max=R1M1(i,j);
end;
end;
end;
R1M1=double(R1M1);
for i=1:m;
for j=1:n;
I3(i,j)=(R1M1(i,j)-double(min))/(double(max)-double(min));
end;
end;
I4=I3.*double(R2M1);
I4=uint8(I4);
figure,imshow(I4);
%imwrite(I4,'hdtzfusion.bmp');
%对融合后的图象选择3*3的中值滤波进行处理
V=medfilt2(I4,[3 3]);
figure,imshow(V),title('WAHAHA');