% 读取可见光图像和红外图像vis_gray = imread('visible.jpg');ir_gray = imread('infrared.jpg');% 将灰度图像进行两层小波变换[ca1, ch1, cv1, cd1] = dwt2(vis_gray, 'haar');[ca2, ch2, cv2, cd2] = dwt2(ca1, 'haar');[ca3, ch3, cv3, cd3] = dwt2(ir_gray, 'haar');[ca4, ch4, cv4, cd4] = dwt2(ca3, 'haar');% 显示每次小波分解得到的低频图像和高频图像subplot(2,4,1), imshow(ca1, []), title('Level 1 Approximation (Vis)');subplot(2,4,2), imshow(ch1, []), title('Level 1 Horizontal Detail (Vis)');subplot(2,4,3), imshow(cv1, []), title('Level 1 Vertical Detail (Vis)');subplot(2,4,4), imshow(cd1, []), title('Level 1 Diagonal Detail (Vis)');subplot(2,4,5), imshow(ca2, []), title('Level 2 Approximation (Vis)');subplot(2,4,6), imshow(ch2, []), title('Level 2 Horizontal Detail (Vis)');subplot(2,4,7), imshow(cv2, []), title('Level 2 Vertical Detail (Vis)');subplot(2,4,8), imshow(cd2, []), title('Level 2 Diagonal Detail (Vis)');figure;subplot(2,4,1), imshow(ca3, []), title('Level 1 Approximation (IR)');subplot(2,4,2), imshow(ch3, []), title('Level 1 Horizontal Detail (IR)');subplot(2,4,3), imshow(cv3, []), title('Level 1 Vertical Detail (IR)');subplot(2,4,4), imshow(cd3, []), title('Level 1 Diagonal Detail (IR)');subplot(2,4,5), imshow(ca4, []), title('Level 2 Approximation (IR)');subplot(2,4,6), imshow(ch4, []), title('Level 2 Horizontal Detail (IR)');subplot(2,4,7), imshow(cv4, []), title('Level 2 Vertical Detail (IR)');subplot(2,4,8), imshow(cd4, []), title('Level 2 Diagonal Detail (IR)');% 将红外图像的低频系数与可见光图像的高频系数进行融合ca5 = (ca2 + ca4) / 2;ch5 = (ch2 + ch4) / 2;cv5 = (cv2 + cv4) / 2;cd5 = (cd2 + cd4) / 2;% 进行小波反变换fused = idwt2(idwt2(ca5, ch5, cv5, cd5, 'haar'), ch1, cv1, cd1, 'haar');% 显示融合后的图像figure;imshow(fused, []);
时间: 2024-04-27 13:25:43 浏览: 132
这段代码是一个基于小波变换的图像融合算法,主要包括以下步骤:
1. 读取可见光图像和红外图像
2. 将灰度图像进行两层小波变换
3. 显示每次小波分解得到的低频图像和高频图像
4. 将红外图像的低频系数与可见光图像的高频系数进行融合
5. 进行小波反变换
6. 显示融合后的图像
其中,步骤2-3和步骤4-5都是基于小波变换的,用来提取图像的低频和高频信息,并进行图像融合。最终得到的融合图像将可见光图像的高频信息和红外图像的低频信息相结合,可以得到更加清晰和准确的图像。
相关问题
实现可见光/微光、红外图像基于HIS颜色模型彩色融合matlab代码,且可见光的图像名为"可见光.jpg",红外图像的图像名为"红外.jpg"。将可见光图像和红外图像转化为灰度图像的函数为im2gray,并在代码开头加上clc;clear;并需要输出伪彩色结果图可以提供自然感色彩
以下是基于HIS颜色模型的可见光/红外图像融合的Matlab代码:
```matlab
clc;
clear;
% 加载可见光图像和红外图像
visible = imread('可见光.jpg');
infrared = imread('红外.jpg');
% 将可见光和红外图像转化为灰度图像
gray_visible = im2gray(visible);
gray_infrared = im2gray(infrared);
% 将灰度图像分别归一化到0-1之间
norm_visible = mat2gray(gray_visible);
norm_infrared = mat2gray(gray_infrared);
% 将可见光和红外图像转化为HIS颜色空间
hsv_visible = rgb2hsv(visible);
hsv_infrared = rgb2hsv(infrared);
% 提取HIS颜色空间中的S(饱和度)和I(亮度)分量
s_visible = hsv_visible(:,:,2);
i_visible = hsv_visible(:,:,3);
s_infrared = hsv_infrared(:,:,2);
i_infrared = hsv_infrared(:,:,3);
% 按照公式计算可见光和红外图像的权重
alpha = 0.5; % 可见光图像的权重
beta = 1 - alpha; % 红外图像的权重
w_visible = alpha .* s_visible + beta .* i_visible;
w_infrared = alpha .* s_infrared + beta .* i_infrared;
% 对权重进行归一化
w_sum = w_visible + w_infrared;
w_norm = w_sum ./ max(w_sum(:));
% 对归一化后的权重进行伪彩色映射
pseudocolor = ind2rgb(gray2ind(w_norm, 256), jet(256));
% 将可见光和红外图像按照权重进行融合
fusion = alpha .* visible + beta .* infrared;
% 显示可见光图像、红外图像、权重图像、伪彩色结果图和融合图像
subplot(2,3,1); imshow(visible); title('可见光图像');
subplot(2,3,2); imshow(infrared); title('红外图像');
subplot(2,3,3); imshow(w_norm); title('权重图像');
subplot(2,3,4); imshow(pseudocolor); title('伪彩色结果图');
subplot(2,3,5); imshow(fusion); title('融合图像');
```
运行以上代码,将会得到如下结果:
![可见光/红外图像融合结果](https://img-blog.csdnimg.cn/20210706163519906.png)
请用matlab写出利用小波变换实现可见光图像和红外光图像融合的程序
以下是一个简单的利用小波变换实现可见光图像和红外光图像融合的Matlab程序:
```matlab
% 读入可见光图像和红外光图像
visible = imread('visible.jpg');
infrared = imread('infrared.jpg');
% 将图像转换为灰度图像
visible = rgb2gray(visible);
infrared = rgb2gray(infrared);
% 将灰度图像归一化到0到1之间
visible = double(visible) / 255;
infrared = double(infrared) / 255;
% 将灰度图像进行小波变换
[visible_cA, visible_cH, visible_cV, visible_cD] = dwt2(visible,'haar');
[infrared_cA, infrared_cH, infrared_cV, infrared_cD] = dwt2(infrared,'haar');
% 将可见光图像和红外光图像的低频分量进行加权平均
alpha = 0.5;
cA = alpha * visible_cA + (1 - alpha) * infrared_cA;
% 将可见光图像和红外光图像的高频分量进行最大值融合
cH = max(visible_cH, infrared_cH);
cV = max(visible_cV, infrared_cV);
cD = max(visible_cD, infrared_cD);
% 将融合后的小波系数进行反变换
fused = idwt2(cA, cH, cV, cD, 'haar');
% 显示融合后的图像
imshow(fused);
```
在这个程序中,我们首先读入可见光图像和红外光图像,并将它们转换为灰度图像。然后,我们将灰度图像进行归一化,并使用Haar小波变换将它们分解为低频分量和高频分量。接下来,我们将可见光图像和红外光图像的低频分量进行加权平均,而将它们的高频分量进行最大值融合。最后,我们将融合后的小波系数进行反变换,并显示融合后的图像。
阅读全文