帮我用matlab分别写几种不同的灰度图像融合代码
时间: 2024-03-13 12:22:49 浏览: 14
当涉及到图像融合时,Matlab是一种非常方便和强大的工具。以下是几种不同的灰度图像融合代码:
1. 基于平均值的图像融合:
```matlab
% 读取两张灰度图像
img1 = imread('image1.jpg');
img2 = imread('image2.jpg');
% 将两张图像进行平均值融合
img_avg = (double(img1) + double(img2)) / 2;
img_avg = uint8(img_avg);
% 显示结果
imshow(img_avg);
```
2. 基于拉普拉斯金字塔的图像融合:
```matlab
% 读取两张灰度图像
img1 = imread('image1.jpg');
img2 = imread('image2.jpg');
% 将两张图像进行拉普拉斯金字塔分解
level = 5;
gaussPyr1 = img1;
gaussPyr2 = img2;
lapPyr1 = zeros(size(img1,1), size(img1,2), level);
lapPyr2 = zeros(size(img2,1), size(img2,2), level);
for i=1:level
% 生成高斯金字塔
gaussPyr1 = impyramid(gaussPyr1, 'reduce');
gaussPyr2 = impyramid(gaussPyr2, 'reduce');
% 生成拉普拉斯金字塔
lapPyr1(:,:,i) = imresize(gaussPyr1, size(img1,1:2)) - img1;
lapPyr2(:,:,i) = imresize(gaussPyr2, size(img2,1:2)) - img2;
end
% 将两张图像的拉普拉斯金字塔进行融合
lapPyr = zeros(size(lapPyr1));
for i=1:level
lapPyr(:,:,i) = lapPyr1(:,:,i) * (i/level) + lapPyr2(:,:,i) * (1-i/level);
end
% 通过拉普拉斯金字塔重建融合后的图像
img_fused = lapPyr(:,:,1);
for i=2:level
img_fused = impyramid(img_fused, 'expand');
img_fused = img_fused + lapPyr(:,:,i);
end
% 显示结果
imshow(uint8(img_fused));
```
3. 基于小波变换的图像融合:
```matlab
% 读取两张灰度图像
img1 = imread('image1.jpg');
img2 = imread('image2.jpg');
% 将两张图像进行小波变换
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('haar','d');
[C1,S1] = wavedec2(img1, 2, Lo_D, Hi_D);
[C2,S2] = wavedec2(img2, 2, Lo_D, Hi_D);
% 将两张图像的小波系数进行融合
alpha = 0.5;
C_fused = alpha * C1 + (1-alpha) * C2;
% 通过小波逆变换重建融合后的图像
img_fused = waverec2(C_fused, S1, Lo_R, Hi_R);
% 显示结果
imshow(uint8(img_fused));
```
这些是仅供参考的代码示例,可以根据自己的需求进行修改和优化。