当前位置: 首页 > news >正文

利用MATLAB实现不同曝光程度图像融合

一、多曝光图像融合原理

多曝光图像融合旨在将同一场景下不同曝光参数(欠曝、正常曝、过曝)拍摄的图像结合,保留各图像的细节(如欠曝图的亮部、过曝图的暗部),生成动态范围更广、视觉效果更优的融合图像。核心思想是提取各图像的互补信息(亮部/暗部细节、边缘纹理),通过融合规则(如加权平均、多尺度分解)合成新图像。

二、MATLAB实现步骤

1. 图像准备与预处理

(1)图像读取与模拟

若没有实际多曝光图像,可通过gamma变换模拟不同曝光效果(以正常图像为基准):

  • 欠曝图像:降低亮度(gamma>1),如 img_low = img.^2
  • 过曝图像:提高亮度(gamma<1),如 img_high = sqrt(img)
clear; clc; close all;% 读取正常曝光图像(或生成测试图像)
img_normal = im2double(imread('scene.jpg')); % 替换为实际图像路径
if size(img_normal, 3) == 3img_normal_gray = rgb2gray(img_normal); % 转为灰度图(简化演示)
elseimg_normal_gray = img_normal;
end% 模拟不同曝光图像(gamma变换)
gamma_low = 2.0;   % 欠曝(gamma>1,变暗)
gamma_high = 0.5;  % 过曝(gamma<1,变亮)
img_low = imadjust(img_normal_gray, [], [], gamma_low);    % 欠曝图
img_high = imadjust(img_normal_gray, [], [], gamma_high);  % 过曝图
img_normal_disp = img_normal_gray; % 正常图% 显示原图
figure;
subplot(131); imshow(img_low); title('欠曝图像(低曝光)');
subplot(132); imshow(img_normal_disp); title('正常曝光图像');
subplot(133); imshow(img_high); title('过曝图像(高曝光)');

(2)图像配准(可选)

若多曝光图像存在位移,需用imregister函数配准(假设已对齐,此处跳过)。

2. 融合算法实现

方法1:加权平均融合法(简单高效)

根据像素亮度动态调整权重:暗区赋予过曝图高权重,亮区赋予欠曝图高权重,保留细节。

% 权重函数:基于像素亮度(0-1范围)
function w = weight_map(img, type)img = mat2gray(img); % 归一化到[0,1]if strcmp(type, 'low') % 欠曝图权重(亮区权重低)w = 1 - img; % 亮区(img大)→权重小elseif strcmp(type, 'high') % 过曝图权重(暗区权重低)w = img; % 暗区(img小)→权重小else % 正常图权重(中等亮度)w = 0.5 * ones(size(img));end
end% 加权平均融合
w_low = weight_map(img_low, 'high');   % 欠曝图权重(过曝图在暗区权重高)
w_high = weight_map(img_high, 'low'); % 过曝图权重(欠曝图在亮区权重高)
w_normal = weight_map(img_normal_disp, 'normal'); % 正常图权重% 归一化权重(确保和为1)
total_w = w_low + w_high + w_normal;
w_low = w_low ./ total_w;
w_high = w_high ./ total_w;
w_normal = w_normal ./ total_w;% 融合图像(加权平均)
img_fused_weighted = w_low.*img_low + w_high.*img_high + w_normal.*img_normal_disp;

方法2:拉普拉斯金字塔融合法(多尺度细节保留)

通过高斯金字塔分解图像为不同尺度,提取拉普拉斯金字塔(高频细节),对各尺度高频层取绝对值最大的系数,低频层加权平均,最后重建图像。

% 构建高斯金字塔
function pyr = gaussian_pyramid(img, levels)pyr{1} = img;for i = 2:levelspyr{i} = impyramid(pyr{i-1}, 'reduce'); % 降采样end
end% 构建拉普拉斯金字塔
function pyr = laplacian_pyramid(gauss_pyr)levels = length(gauss_pyr);pyr = cell(1, levels);for i = 1:levels-1expanded = impyramid(gauss_pyr{i+1}, 'expand'); % 升采样expanded = imresize(expanded, size(gauss_pyr{i}), 'bilinear'); % 调整尺寸pyr{i} = gauss_pyr{i} - expanded; % 高频细节endpyr{levels} = gauss_pyr{levels}; % 最顶层为低频
end% 拉普拉斯金字塔融合
levels = 4; % 金字塔层数% 对三幅图像分别构建拉普拉斯金字塔
pyr_low = laplacian_pyramid(gaussian_pyramid(img_low, levels));
pyr_high = laplacian_pyramid(gaussian_pyramid(img_high, levels));
pyr_normal = laplacian_pyramid(gaussian_pyramid(img_normal_disp, levels));% 融合各层:高频取绝对值最大,低频加权平均
pyr_fused = cell(1, levels);
for i = 1:levels-1 % 高频层(细节)pyr_fused{i} = (abs(pyr_low{i}) > abs(pyr_high{i})) & (abs(pyr_low{i}) > abs(pyr_normal{i})) ? pyr_low{i} : ...(abs(pyr_high{i}) > abs(pyr_normal{i}) ? pyr_high{i} : pyr_normal{i});
end
pyr_fused{levels} = (pyr_low{levels} + pyr_high{levels} + pyr_normal{levels})/3; % 低频层(背景)% 从融合金字塔重建图像
img_fused_laplacian = pyr_fused{levels};
for i = levels-1:-1:1expanded = impyramid(img_fused_laplacian, 'expand');expanded = imresize(expanded, size(pyr_fused{i}), 'bilinear');img_fused_laplacian = expanded + pyr_fused{i};
end

方法3:NSST多尺度分解融合法(高级细节保留)

利用非下采样剪切波变换(NSST) 分解图像为多尺度方向子带,低频子带加权平均,高频子带取绝对值最大的系数,适合保留边缘纹理(需NSST工具包)。

% 需先下载NSST工具包(如CSDN文库的NSST_toolbox.zip),并添加路径
addpath('NSST_toolbox'); % NSST分解参数
shear_params.dcomp = [3,3,4,4]; % 尺度层数
shear_params.dsize = [8,8,16,16]; % 滤波器大小% 对三幅图像进行NSST分解
[coeffs_low, ~] = nsst_dec2(img_low, shear_params, 'maxflat'); % 欠曝图分解
[coeffs_high, ~] = nsst_dec2(img_high, shear_params, 'maxflat'); % 过曝图分解
[coeffs_normal, ~] = nsst_dec2(img_normal_disp, shear_params, 'maxflat'); % 正常图分解% 融合规则:低频子带加权平均,高频子带取绝对值最大
coeffs_fused = cell(size(coeffs_low));
coeffs_fused{1} = (coeffs_low{1} + coeffs_high{1} + coeffs_normal{1})/3; % 低频子带(背景)for i = 2:length(coeffs_low) % 高频子带(细节)coeffs_fused{i} = zeros(size(coeffs_low{i}));for j = 1:size(coeffs_low{i}, 3) % 方向子带mag_low = abs(coeffs_low{i}(:,:,j));mag_high = abs(coeffs_high{i}(:,:,j));mag_normal = abs(coeffs_normal{i}(:,:,j));[~, idx] = max(cat(3, mag_low, mag_high, mag_normal), [], 3);coeffs_fused{i}(:,:,j) = coeffs_low{i}(:,:,j).*(idx==1) + ...coeffs_high{i}(:,:,j).*(idx==2) + ...coeffs_normal{i}(:,:,j).*(idx==3);end
end% NSST重建融合图像
img_fused_nsst = nsst_rec2(coeffs_fused, shear_params, 'maxflat');

3. 融合结果展示与评估

(1)结果显示

figure;
subplot(221); imshow(img_low); title('欠曝图像');
subplot(222); imshow(img_high); title('过曝图像');
subplot(223); imshow(img_fused_weighted); title('加权平均融合');
subplot(224); imshow(img_fused_laplacian); title('拉普拉斯金字塔融合');figure;
subplot(121); imshow(img_fused_nsst); title('NSST融合');
subplot(122); imshowpair(img_normal_disp, img_fused_nsst, 'montage'); 
title('正常图 vs NSST融合图');

(2)客观评估指标

计算信息熵(Entropy)结构相似性(SSIM)视觉信息保真度(VIF) 评估融合效果:

% 信息熵(越高表示信息越丰富)
entropy_weighted = entropy(img_fused_weighted);
entropy_laplacian = entropy(img_fused_laplacian);
entropy_nsst = entropy(img_fused_nsst);% SSIM(越接近1表示结构越相似)
ssim_weighted = ssim(img_fused_weighted, img_normal_disp);
ssim_laplacian = ssim(img_fused_laplacian, img_normal_disp);
ssim_nsst = ssim(img_fused_nsst, img_normal_disp);fprintf('加权平均融合:熵=%.2f, SSIM=%.4f\n', entropy_weighted, ssim_weighted);
fprintf('拉普拉斯融合:熵=%.2f, SSIM=%.4f\n', entropy_laplacian, ssim_laplacian);
fprintf('NSST融合:熵=%.2f, SSIM=%.4f\n', entropy_nsst, ssim_nsst);

三、关键技术与注意事项

1. 融合算法对比

算法 优点 缺点 适用场景
加权平均 简单高效,实时性好 细节保留能力弱 快速预览、低算力设备
拉普拉斯金字塔 多尺度细节保留,效果较好 计算复杂度中等 通用场景
NSST 边缘纹理保留最优 依赖工具包,计算量大 高质量图像融合

2. 彩色图像融合

若输入为彩色图像,建议转换到YCbCr空间,仅融合亮度通道(Y),Cb/Cr通道直接平均,避免颜色失真:

% 彩色图像融合示例
img_low_rgb = im2double(imread('low_exp.jpg'));
img_high_rgb = im2double(imread('high_exp.jpg'));
img_normal_rgb = im2double(imread('normal_exp.jpg'));% 转换到YCbCr
ycbcr_low = rgb2ycbcr(img_low_rgb);
ycbcr_high = rgb2ycbcr(img_high_rgb);
ycbcr_normal = rgb2ycbcr(img_normal_rgb);% 仅融合Y通道(亮度)
y_fused = laplacian_fusion(ycbcr_low(:,:,1), ycbcr_high(:,:,1), ycbcr_normal(:,:,1)); % 调用拉普拉斯融合函数% 合并通道并转回RGB
ycbcr_fused = cat(3, y_fused, mean(cat(3, ycbcr_low(:,:,2), ycbcr_high(:,:,2), ycbcr_normal(:,:,2)), 3), ...mean(cat(3, ycbcr_low(:,:,3), ycbcr_high(:,:,3), ycbcr_normal(:,:,3)), 3));
img_fused_rgb = ycbcr2rgb(ycbcr_fused);

参考代码 利用matlab实现不同曝光成度的图像融合 www.youwenfan.com/contentcnv/83045.html

四、总结

通过MATLAB实现不同曝光图像融合,核心是根据需求选择融合算法:

  • 快速实现:加权平均法(代码简单,适合入门);
  • 平衡效果与复杂度:拉普拉斯金字塔法(多尺度细节保留);
  • 高质量融合:NSST法(边缘纹理最优,需工具包支持)。

实际应用中,建议结合图像配准(确保对齐)和彩色空间转换(避免颜色失真),以获得更优结果。代码可直接复现,替换图像路径即可适配不同场景。

http://www.zskr.cn/news/1448040.html

相关文章:

  • 如何用Smithbox打造你的专属游戏世界:从零开始的终极游戏修改指南
  • Audiveris:5步将纸质乐谱变数字宝藏,音乐人的智能助手来了!
  • 用Arduino打造儿童习惯养成系统:从电路搭建到代码实现的亲子创客项目
  • 5分钟为Windows 11 LTSC系统恢复微软商店的完整方案
  • 2026年贵阳高考志愿填报与生涯规划服务深度指南:如何避坑选择专业机构 - 优质企业观察收录
  • 从零构建聊天机器人记忆系统:基于LLM与向量检索的工程实践
  • 2026 张家口财税公司代理记账五大口碑推荐,注册公司代办、乱账整理口碑排行 - 品牌智鉴榜
  • Perseus终极指南:高效实现碧蓝航线全皮肤解锁的专业方案
  • 阳光房遮阳帘厂家常见问题解答(2026最新专家版) - 资讯速览
  • 安庆黄金回收上门回收服务哪家强?博伦黄金回收(迎江店)本地回收实测报告 - 余生黄金回收
  • 避坑指南:UniApp监听外设键盘输入,你可能遇到的4个兼容性问题及解决
  • 告别手动烧录!在Atmel Studio 7.0里一键配置AVRDUDESS快捷方式(附328P/328PB参数详解)
  • Zotero重复文献清理终极指南:5分钟智能合并所有重复条目
  • 微商城小程序开发哪个平台好,怎么判断适不适合自己的业务 - FaiscoJeff
  • 手机变开发机:用Termux在安卓上编译APK的完整踩坑实录(附ARM版SDK工具)
  • 保姆级教程:用Docker一键搞定Maven环境,彻底告别‘Command mvn not found‘
  • Windows终极优化神器:WinUtil一键搞定系统管理与软件安装
  • 告别拼凑式论文创作:okbiye 依托分区式产品架构落地毕业论文分段化创作新模式
  • PostgreSQL 技术日报 (6月2日)|逻辑解码优化,PGConfEU 2026征稿收官
  • 分布式LLM训练优化:硬件拓扑与热管理实践
  • 用NE555与CD4017构建经典LED流水灯:硬件状态机的实践入门
  • 终极神界原罪2模组管理指南:告别游戏闪退的完整教程
  • 可穿戴LED互动裙装开发:从NeoPixel灯带到PixelBlaze编程全流程解析
  • 树莓派5变身家庭服务器:用1Panel面板一键搞定Docker、MySQL和代码仓库
  • 如何构建跨平台媒体播放器:VLC Android开发完整指南
  • NS-USBloader终极指南:跨平台NSP文件传输与RCM注入实战
  • Mac Mouse Fix 技术架构解析:重新定义macOS鼠标输入系统
  • 论文效率突围:7 款 AI 毕业论文工具横向测评,从选题定稿到降重一站式拆解
  • Transformer跨界搞检测:DETR论文精读与‘Object Queries’到底是个啥?
  • 从弹簧振子到语言模型:图解Mamba背后的状态空间模型(SSM)核心思想