将上述代码中,每次小波分解的得到的低频以及高频图像也显示出来
时间: 2024-03-01 07:56:01 浏览: 199
好的,以下是修改后的 MATLAB 代码,它将每次小波分解得到的低频图像和高频图像进行了显示:
```matlab
% 读取可见光图像和红外图像
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, []);
```
这段代码与之前的代码类似,不同之处在于它添加了 `subplot` 函数用于显示每次小波分解得到的低频图像和高频图像。在显示融合后的图像之前,使用 `figure` 函数创建一个新的图形窗口。最后,使用 `imshow` 函数显示融合后的图像,并使用 `[]` 将像素值缩放到 0 到 255 的范围内。
阅读全文