标准图像测试:
%%%%本实验实现彩色图像融合
clc,clear,close all
Ioriginal11 = imread('timg4.jpg');%%读取图像1
Ioriginal12 = imread('timg5.jpg');
Ioriginal11 = rgb2ntsc(Ioriginal11); %转到ntsc色域空间
Ioriginal12 = rgb2ntsc(Ioriginal12);
IAfter031 = zeros(300,260,3);
for i = 1:3
Ioriginal1 = Ioriginal11(:,:,i);
Ioriginal2 = Ioriginal12(:,:,i);
% I01 = double(imresize(I(1:end,1:end),[300,300]));%%
I01 = double(imresize(Ioriginal1(1:end,1:end),[300,260])); %将图像大小设置为300*260
figure,imshow(I01,[])
I02 = double(imresize(Ioriginal2(1:end,1:end),[300,260]));
figure,imshow(I02,[])
I1 = ones(size(I01))*1; %%图像1滤波系数
for x = 1:size(I1,1) %%定义理想数字低通滤波器
for y = 1:size(I1,2)
if ((x-size(I1,1)/2).^2+(y-size(I1,2)/2).^2)>25^2
I1(x,y)=0; %高频分量为0
end
end
end
I2 = ones(size(I02))*1; %%图像2滤波系数
for x = 1:size(I2,1) %%定义理想数字高通滤波器
for y = 1:size(I2,2)
if ((x-size(I2,1)/2).^2+(y-size(I2,2)/2).^2)<10^2
I2(x,y)=0; %低频分量为0
end
end
end
% I2 = 1-I1;
fftI = fftshift(fft2(double(I01)));%%对图像1进行傅里叶变换并将零频率移到中心
fftIAfter01 = fftI.*I1;%%对图像1进行低通滤波
IAfter = ifft2(ifftshift(fftIAfter01));%对滤波后的频谱进行反变换得到滤波后的图像
figure,imshow(real(IAfter),[])%%显示图像
fftI = fftshift(fft2(double(I02)));
fftIAfter02 = fftI.*I2; %%对图像2进行高通滤波
IAfter = ifft2(ifftshift(fftIAfter02));
figure,imshow(real(IAfter),[])
alpha = [1 1] % 参数alpha用于修改Lena和Mona Lisa谁占得多,输入太大会产生特殊点的效果
fftIAfter03 = fftIAfter01*alpha(1)+fftIAfter02*alpha(2);%%%将滤波后的频谱相加融合
IAfter03 = ifft2(ifftshift(fftIAfter03)); %对相加后的频谱进行反变换得到融合后的图像
figure,imshow(real(IAfter03),[])
title('融合结果')
IAfter031(:,:,i)= (real(IAfter03));
end
IAfter031 = ntsc2rgb(IAfter031);
figure,imshow(real(IAfter031),[])
运行后,得到两张图像的融合:
Einstein&Monroe图像融合实验
clc,clear,close all
Ioriginal11 = imread('Albert_Einstein.jpg');
Ioriginal12 = imread('Marilyn_Monroe.jpg');
Ioriginal11 = rgb2ntsc(Ioriginal11);
Ioriginal12 = rgb2ntsc(Ioriginal12);
IAfter031 = zeros(300,260,3);
for i = 1:3
Ioriginal1 = Ioriginal11(:,:,i);
Ioriginal2 = Ioriginal12(:,:,i);
% I01 = double(imresize(I(1:end,1:end),[300,300]));
I01 = double(imresize(Ioriginal1(1:end,1:end),[300,260]));
if i == 1
figure,imshow(I01)
end
I02 = double(imresize(Ioriginal2(1:end,1:end),[300,260]));
if i == 1
figure,imshow(I02)
end
I1 = ones(size(I01))*1;
for x = 1:size(I1,1)
for y = 1:size(I1,2)
if ((x-size(I1,1)/2)^2+(y-size(I1,2)/2)^2)>25^2
I1(x,y)=0;
end
end
end
I2 = ones(size(I02))*1;
for x = 1:size(I2,1)
for y = 1:size(I2,2)
if ((x-size(I2,1)/2)^2+(y-size(I2,2)/2)^2)<10^2
I2(x,y)=0;
end
end
end
fftI = fftshift(fft2(double(I01)));
fftIAfter01 = fftI.*I1;
IAfter = ifft2(ifftshift(fftIAfter01));
fftI = fftshift(fft2(double(I02)));
fftIAfter02 = fftI.*I2;
IAfter02 = ifft2(ifftshift(fftIAfter02));
alpha = [0.95 0.4];
fftIAfter03 = fftIAfter01*alpha(1)+fftIAfter02*alpha(2);
IAfter03 = ifft2(ifftshift(fftIAfter03));
IAfter031(:,:,i)= (real(IAfter03));
end
IAfter031 = ntsc2rgb(IAfter031);
figure,imshow(real(IAfter031))
title('融合效果')
放大了近看Marilyn Monroe更突出,缩略后远看Albert Einstein更突出。