matlab中18张jpg彩色图片的图像融合算法代码
时间: 2023-08-26 09:15:21 浏览: 91
课程设计-基于matlab的水下图像增强融合算法 完整代码
5星 · 资源好评率100%
这里提供一种基于拉普拉斯金字塔的图像融合算法,可以将18张彩色图片融合成一张彩色图片。具体实现步骤如下:
1. 读入18张彩色图片,将它们转换为灰度图像。
2. 对每一张灰度图像进行高斯金字塔分解,得到不同分辨率的图像。
3. 对每一张灰度图像进行拉普拉斯金字塔分解,得到不同分辨率的拉普拉斯图像。
4. 对于每个像素点,对18个拉普拉斯图像的对应像素点取平均值,得到18个平均拉普拉斯图像。
5. 对18个平均拉普拉斯图像进行重建,得到一张融合后的灰度图像。
6. 将融合后的灰度图像转换为彩色图像。
下面是具体的matlab实现代码:
```matlab
% 读入18张彩色图片,转换为灰度图像
for i = 1:18
img = imread(['img', num2str(i), '.jpg']);
gray_img(:,:,i) = rgb2gray(img);
end
% 对每个灰度图像进行高斯金字塔分解和拉普拉斯金字塔分解
for i = 1:18
% 高斯金字塔分解
G = gray_img(:,:,i);
for j = 1:5
G = impyramid(G, 'reduce');
G_pyramid{i,j} = G;
end
% 拉普拉斯金字塔分解
L = gray_img(:,:,i);
for j = 1:4
G = G_pyramid{i,j};
L = L - impyramid(G, 'expand');
L_pyramid{i,j} = L;
end
L_pyramid{i,5} = gray_img(:,:,i); % 最底层为原图像本身
end
% 对18个拉普拉斯图像的对应像素点取平均值,得到18个平均拉普拉斯图像
for i = 1:4
for j = 1:size(L_pyramid{1,i},1)
for k = 1:size(L_pyramid{1,i},2)
for m = 1:18
L_avg{j,k,m} = L_pyramid{m,i}(j,k);
end
L_avg{j,k,19} = mean(L_avg{j,k,1:18}); % 第19个为平均拉普拉斯图像
end
end
end
% 重建融合后的灰度图像
for i = 1:4
for j = 1:size(L_pyramid{1,i},1)
for k = 1:size(L_pyramid{1,i},2)
L = L_avg{j,k,19};
for m = 1:18
G = G_pyramid{m,i};
L = impyramid(L, 'expand');
L = L + impyramid(G, 'expand') .* L_avg{j,k,m};
end
L_fused{j,k,i} = L;
end
end
end
% 将融合后的灰度图像转换为彩色图像
fused_img = zeros(size(gray_img(:,:,1), 1), size(gray_img(:,:,1), 2), 3);
for i = 1:size(L_pyramid{1,1},1)
for j = 1:size(L_pyramid{1,1},2)
for k = 1:3
L = L_fused{i,j,k};
if k == 1
G = G_pyramid{1,1};
elseif k == 2
G = G_pyramid{1,2};
else
G = G_pyramid{1,3};
end
L = impyramid(L, 'expand');
G = impyramid(G, 'expand');
fused_img(i,j,k) = L + G;
end
end
end
% 显示融合后的彩色图像
imshow(uint8(fused_img));
```
需要注意的是,这个算法的输入图片应该尽可能保持同一场景、同一拍摄条件,并且图片大小应该一致。
阅读全文