请给我一段基于拉普拉斯金字塔融合红外与可见光图像的matlab代码
时间: 2023-12-18 09:03:10 浏览: 102
matlab基于拉普拉斯金字塔分解的图像融合源程序
5星 · 资源好评率100%
以下是基于拉普拉斯金字塔融合红外与可见光图像的Matlab代码:
```
% 读取红外图像和可见光图像
ir = imread('infrared_image.jpg');
rgb = imread('visible_light_image.jpg');
% 将图像转换为灰度图像
ir_gray = rgb2gray(ir);
rgb_gray = rgb2gray(rgb);
% 求取拉普拉斯金字塔
levels = 5;
ir_pyramid = cell(levels, 1);
rgb_pyramid = cell(levels, 1);
ir_pyramid{1} = im2double(ir_gray);
rgb_pyramid{1} = im2double(rgb_gray);
for i = 2:levels
ir_pyramid{i} = impyramid(ir_pyramid{i-1}, 'reduce');
rgb_pyramid{i} = impyramid(rgb_pyramid{i-1}, 'reduce');
end
% 求取高频部分
ir_high = cell(levels-1, 1);
rgb_high = cell(levels-1, 1);
for i = 1:levels-1
ir_high{i} = ir_pyramid{i} - imresize(impyramid(ir_pyramid{i+1}, 'expand'), size(ir_pyramid{i}));
rgb_high{i} = rgb_pyramid{i} - imresize(impyramid(rgb_pyramid{i+1}, 'expand'), size(rgb_pyramid{i}));
end
% 融合图像
fused = cell(levels-1, 1);
for i = 1:levels-1
fused{i} = ir_high{i} + rgb_high{i};
end
% 重建图像
fused_pyramid = cell(levels, 1);
fused_pyramid{levels} = ir_pyramid{levels};
for i = levels-1:-1:1
fused_pyramid{i} = impyramid(imresize(fused_pyramid{i+1}, size(fused{i})), 'expand');
fused_pyramid{i} = fused_pyramid{i} + fused{i};
end
fused_image = fused_pyramid{1};
% 显示结果
figure;
subplot(2,2,1); imshow(ir); title('红外图像');
subplot(2,2,2); imshow(rgb); title('可见光图像');
subplot(2,2,3); imshow(fused_image); title('融合图像');
subplot(2,2,4); imshowpair(ir,rgb,'montage'); title('对比显示');
```
阅读全文