请给我一段基于区域能量取大的可见光灰度图像与红外灰度图像融合的matlab代码
时间: 2023-12-18 09:02:53 浏览: 81
【图像融合】非下采样剪切波算法NSST红外与可见光图像融合(灰度图像)【含Matlab源码 4231期】.zip
好的,以下是一个简单的 Matlab 代码,用于基于区域能量取大的可见光灰度图像与红外灰度图像融合:
```matlab
% 读入可见光灰度图像和红外灰度图像
visible = imread('visible.jpg');
infrared = imread('infrared.jpg');
% 将两幅图像进行直方图均衡化,增强对比度
visible = histeq(visible);
infrared = histeq(infrared);
% 计算可见光和红外灰度图像的区域能量分布
visible_energy = imfilter(visible.^2, fspecial('gaussian', 15, 5), 'replicate');
infrared_energy = imfilter(infrared.^2, fspecial('gaussian', 15, 5), 'replicate');
% 计算加权相加的融合图像
alpha = 0.5; % 可见光和红外的权重
fused_image = alpha*visible + (1-alpha)*infrared;
% 计算融合图像的区域能量分布
fused_energy = imfilter(fused_image.^2, fspecial('gaussian', 15, 5), 'replicate');
% 取区域能量分布最大的像素
mask = fused_energy > max(visible_energy, infrared_energy);
% 将融合图像中对应位置的像素替换成可见光或红外图像中的像素
result = fused_image;
result(mask) = infrared(mask); % 取红外图像中的像素
% 显示结果
imshow(result);
```
此代码首先读入可见光灰度图像和红外灰度图像,并对两幅图像进行直方图均衡化以增强对比度。然后,通过计算可见光和红外灰度图像的区域能量分布,得到加权相加的融合图像。接着,计算融合图像的区域能量分布,并取区域能量分布最大的像素,将融合图像中对应位置的像素替换成可见光或红外图像中的像素。最后,显示结果。
阅读全文