基于MATLAB的红外与可见光图像融合代码实现(多种方法)
一、核心方法代码
1. 加权平均法(Weighted Average Fusion)
原理:通过调整红外与可见光图像的权重系数,生成融合图像。
代码:
function fused = weighted_average_fusion(vis_img, ir_img, alpha)
% 转换为灰度图
vis_gray = rgb2gray(vis_img);
ir_gray = rgb2gray(ir_img);
% 加权融合
fused = alpha * double(ir_gray) + (1 - alpha) * double(vis_gray);
fused = uint8(clamp(fused, 0, 255));
end
% 示例调用
vis_img = imread('visible.jpg');
ir_img = imread('infrared.jpg');
alpha = 0.6; % 红外权重
fused_img = weighted_average_fusion(vis_img, ir_img, alpha);
imshow(fused_img);
特点:简单快速,适合初步融合。
2. 小波变换融合(Wavelet Transform Fusion)
原理:利用小波分解将图像分为低频和高频分量,分别融合。
代码:
function fused = wavelet_fusion(vis_img, ir_img, wavelet)
% 小波分解
[c_vis, s_vis] = wavedec2(im2double(vis_img), 3, wavelet);
[c_ir, s_ir] = wavedec2(im2double(ir_img), 3, wavelet);
% 低频取平均,高频取绝对值最大
c_low = (c_vis(1,:) + c_ir(1,:)) / 2;
c_high = cell(1,3);
for i = 1:3
c_high{i} = max(abs(c_vis(i+1,:)), abs(c_ir(i+1,:)));
end
% 重构图像
fused = waverec2([c_low; c_high], s_vis, wavelet);
fused = uint8(clamp(fused, 0, 255));
end
% 示例调用
wavelet = 'db4'; % Daubechies小波
fused_img = wavelet_fusion(vis_img, ir_img, wavelet);
imshow(fused_img);
特点:保留细节能力强,适合复杂场景。
3. 主成分分析(PCA)融合
原理:通过PCA降维提取主要特征,融合后重建。
代码:
function fused = pca_fusion(vis_img, ir_img)
% 转换为灰度图并展平
vis_gray = im2double(rgb2gray(vis_img));
ir_gray = im2double(rgb2gray(ir_img));
data = [vis_gray(:), ir_gray(:)];
% PCA降维
[coeff, score, ~] = pca(data);
fused_data = score(:,1) * coeff(:,1)';
fused = reshape(fused_data, size(vis_gray));
fused = uint8(clamp(fused, 0, 255));
end
% 示例调用
fused_img = pca_fusion(vis_img, ir_img);
imshow(fused_img);
特点:保留主要信息,适合高维数据。
4. 拉普拉斯金字塔融合(Laplacian Pyramid Fusion)
原理:构建图像金字塔,在每层进行特征融合。
代码:
function fused = laplacian_pyramid_fusion(vis_img, ir_img, levels)
% 构建高斯金字塔
G_vis = cell(levels,1);
G_ir = cell(levels,1);
G_vis{1} = im2double(vis_img);
G_ir{1} = im2double(ir_img);
for l = 2:levels
G_vis{l} = imresize(imfilter(G_vis{l-1}, fspecial('gaussian', [5 5], 1)), 0.5);
G_ir{l} = imresize(imfilter(G_ir{l-1}, fspecial('gaussian', [5 5], 1)), 0.5);
end
% 构建拉普拉斯金字塔
LP_vis = cell(levels,1);
LP_ir = cell(levels,1);
for l = levels:-1:1
if l == levels
LP_vis{l} = G_vis{l};
LP_ir{l} = G_ir{l};
else
up_vis = imresize(G_vis{l+1}, size(G_vis{l}));
up_ir = imresize(G_ir{l+1}, size(G_ir{l}));
LP_vis{l} = G_vis{l} - up_vis;
LP_ir{l} = G_ir{l} - up_ir;
end
end
% 融合规则:绝对值最大
LP_fused = cell(levels,1);
for l = 1:levels
mask = abs(LP_vis{l}) > abs(LP_ir{l});
LP_fused{l} = mask .* LP_vis{l} + ~mask .* LP_ir{l};
end
% 重构图像
fused = LP_fused{1};
for l = 2:levels
fused = imresize(fused, size(LP_fused{l})) + LP_fused{l};
end
fused = uint8(clamp(fused, 0, 255));
end
% 示例调用
levels = 4;
fused_img = laplacian_pyramid_fusion(vis_img, ir_img, levels);
imshow(fused_img);
特点:多尺度融合,细节保留更优。
二、进阶方法代码
5. 导向滤波融合(Guided Filter Fusion)
原理:利用可见光图像作为引导图,保留其结构信息。
代码:
function fused = guided_filter_fusion(vis_img, ir_img, radius, eps)
% 转换为灰度图
vis_gray = rgb2gray(vis_img);
ir_gray = rgb2gray(ir_img);
% 导向滤波
fused = imguidedfilter(double(vis_gray), double(ir_gray), radius, eps);
fused = uint8(clamp(fused, 0, 255));
end
% 示例调用
radius = 15;
eps = 0.01;
fused_img = guided_filter_fusion(vis_img, ir_img, radius, eps);
imshow(fused_img);
特点:保持边缘清晰,抑制噪声。
6. 显著性检测引导融合(Significance-Guided Fusion)
原理:基于显著性检测提取重要区域,增强目标对比度。
代码:
function fused = saliency_guided_fusion(vis_img, ir_img)
% 转换为灰度图
vis_gray = rgb2gray(vis_img);
ir_gray = rgb2gray(ir_img);
% 显著性检测(基于局部对比度)
saliency_vis = local_contrast(vis_gray);
saliency_ir = local_contrast(ir_gray);
% 融合权重
weight_vis = saliency_vis ./ (saliency_vis + saliency_ir + eps);
weight_ir = 1 - weight_vis;
% 加权融合
fused = im2uint8(weight_vis .* double(vis_gray) + weight_ir .* double(ir_gray));
end
function saliency = local_contrast(img)
% 计算局部对比度
kernel = fspecial('gaussian', [5 5], 1);
smooth = imfilter(img, kernel, 'same');
saliency = abs(img - smooth);
end
% 示例调用
fused_img = saliency_guided_fusion(vis_img, ir_img);
imshow(fused_img);
特点:突出目标区域,抑制背景噪声。
参考代码 用于进行红外、可见光的图像融合的代码 www.youwenfan.com/contentcnq/52438.html
三、应用场景与选择建议
| 方法 | 适用场景 | 优势 | 局限性 |
|---|---|---|---|
| 加权平均法 | 实时处理、简单场景 | 计算快,实现简单 | 细节丢失明显 |
| 小波变换 | 多尺度特征保留 | 细节丰富,抗噪性好 | 分解层数影响性能 |
| PCA | 高维数据压缩 | 保留主要信息 | 依赖数据分布 |
| 拉普拉斯金字塔 | 高分辨率融合 | 多尺度细节保留 | 计算复杂度高 |
| 导向滤波 | 结构保持 | 边缘清晰,噪声抑制 | 需调整参数 |
| 显著性检测 | 目标突出 | 增强关键区域 | 显著性图质量依赖算法 |
四、扩展与优化方向
-
多传感器融合:结合雷达、激光雷达数据,提升目标识别能力。
-
深度学习辅助:使用卷积神经网络(CNN)自动学习融合规则。
-
硬件加速:利用GPU并行计算加速分解与重构过程。
参考文献:
基于PCA与NSST的红外与可见光图像融合
双树复小波变换在图像融合中的应用
小波变换与TMSST融合方法
多尺度分解与自适应权重优化
交叉双边滤波器融合
显著性检测引导的双尺度融合
对比度增强与多尺度边缘保持分解
基于显著性检测的融合方法

浙公网安备 33010602011771号