【HDR】曝光融合(Exposure Fusion)

news2024/11/24 8:43:59

文章目录

  • 0 前言
  • 1 算法细节
    • 1.1 Naive
      • 1.1.1 主要思想
      • 1.1.2 权重计算
      • 1.1.3 融合
    • 1.2 Multi-resolution
  • 2 实验
  • 3 参考

0 前言

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

曝光融合算法的优势在于不需要标定相机响应曲线,并且跳过tonemapping步骤,直接合成用于显示的高动态范围图像。

1 算法细节

1.1 Naive

1.1.1 主要思想

对于多曝光图像序列,取每一张图像中最有价值的部分用于合成。例如,曝光时间长的图像中暗区细节丰富同时噪声水平低,那么暗区就是有价值的部分。显然,需要一个指标来衡量每张图像中哪些像素有价值,然后通过计算每张图每个像素的价值指标当作对应的权重,最终通过加权融合的方式得到HDR。

1.1.2 权重计算

从对比度、饱和度和亮度三个维度对像素的价值进行评估:

  • 对比度
    这里的对比度指的是图像的梯度,对于边缘和纹理等重要的信息分配很大的权重。具体地,对图像的灰度图执行拉普拉斯滤波,结果取绝对值作为对比度指标 C ( I k ) C(I_k) C(Ik)
    C ( I k ) = ∣ △ g r a y ( I k ) ∣ C(I_k)=|\triangle_{gray}(I_k)| C(Ik)=gray(Ik)
  • 饱和度
    RGB三通道之间差异大的可视为饱和度高的区域,反之,对于过曝或者欠曝区域RGB三通道的值趋于一致,饱和度较低。因此,可将RGB三个通道之间的标准差作为饱和度指标。
    S k , i , j = ( I k , i , j B − M k , i , j ) 2 + ( I k , i , j G − M k , i , j ) 2 + ( I k , i , j R − M k , i , j ) 2 3 S_{k,i,j}=\sqrt{\frac{(I_{k,i,j}^{B}-M_{k,i,j})^2+(I_{k,i,j}^{G}-M_{k,i,j})^2+(I_{k,i,j}^{R}-M_{k,i,j})^2}{3}} Sk,i,j=3(Ik,i,jBMk,i,j)2+(Ik,i,jGMk,i,j)2+(Ik,i,jRMk,i,j)2 M k , i , j = I k , i , j B + I k , i , j G + I k , i , j R 3 M_{k,i,j}=\frac{I_{k,i,j}^{B}+I_{k,i,j}^{G}+I_{k,i,j}^{R}}{3} Mk,i,j=3Ik,i,jB+Ik,i,jG+Ik,i,jR
  • 亮度
    对于归一化至0~1范围的图像,将取值在0.5左右的像素视为曝光良好,应该分配很大的权重;接近0和1的分别为欠曝和过曝应该分配很小的权重。像素值与其对应权重的关系符合均值为0.5的高斯分布:
    E k . i , j = e − ( I k , i , j B − 0.5 ) 2 2 σ 2 ⋅ e − ( I k , i , j G − 0.5 ) 2 2 σ 2 ⋅ e − ( I k , i , j R − 0.5 ) 2 2 σ 2 E_{k.i,j}=e^{-\frac{(I_{k,i,j}^{B}-0.5)^2}{2\sigma^2}} \cdot e^{-\frac{(I_{k,i,j}^{G}-0.5)^2}{2\sigma^2}} \cdot e^{-\frac{(I_{k,i,j}^{R}-0.5)^2}{2\sigma^2}} Ek.i,j=e2σ2(Ik,i,jB0.5)2e2σ2(Ik,i,jG0.5)2e2σ2(Ik,i,jR0.5)2

获取以上3个指标后,就能计算每个像素对应的权重:
W i , j , k = ( C i , j , k ) w c ⋅ ( S i , j , k ) w s ⋅ ( E i , j , k ) w e W_{i,j,k}=(C_{i,j,k})^{w_c}\cdot (S_{i,j,k})^{w_s}\cdot (E_{i,j,k})^{w_e} Wi,j,k=(Ci,j,k)wc(Si,j,k)ws(Ei,j,k)we默认 w c = w s = w e = 1 w_c=w_s=w_e=1 wc=ws=we=1;另外,为了保证多张图像在同一位置的权重和为1,需要在图像数量维度上对权重进行归一化:
W ^ i j , k = W i j , k ∑ k ′ = 1 N W i j , k ′ \hat{W}_{{ij,k}}=\frac{{W}_{{ij,k}}}{\sum_{k^{\prime}=1}^{N}{W}_{{ij,k^{\prime}}}} W^ij,k=k=1NWij,kWij,k

1.1.3 融合

根据计算的权重对原始图像进行加权求和,即可得到融合后的图像:
H i j = ∑ k = 1 N W ^ i j , k ⋅ I i j , k H_{ij}=\sum_{k=1}^{N}\hat{W}_{{ij,k}}\cdot I_{ij,k} Hij=k=1NW^ij,kIij,k

这样粗糙融合的结果存在一个问题,在权重尖锐过渡的区域,由于每张图像的曝光时间不同,绝对强度也不同,导致融合后灰度跳变太大,图像中呈现很多黑色和白色斑点,与噪声形态类似。

权重尖锐过渡区会出现问题,那么可以让其平滑一点,提到平滑自然而然就想到了高斯滤波。作者对权重图做高斯滤波后再进行合成,虽然斑点问题得到了缓解,但是在边缘处会出现光晕现象

既然光晕是由于边缘处的权重被平滑所导致的,可以考虑使用保边滤波代替高斯滤波。

1.2 Multi-resolution

由于naive版本的融合方式不能完全解决黑白斑点的问题,并且会引入光晕这样的新问题。因此,作者提出了使用拉普拉斯金字塔融合的方式,其流程如下图所示:
在这里插入图片描述
简单来说,就是从不同曝光的原始图像中分解出拉普拉斯金字塔,对应的权重图中分解出高斯金字塔,然后分别在每个尺度下进行融合,得到融合后的拉普拉斯金字塔。最后,从拉普拉斯金字塔的顶层开始向上采样,叠加同尺度的拉普拉斯细节,再向上采样和叠加细节,递归至最高分辨率,得到最终的结果。(此处有一个点需要注意,拉普拉斯金字塔的顶层就是原始图像高斯金字塔的顶层)
在这里插入图片描述

  • 为什么拉普拉斯金字塔融合效果好?
    将平坦区和尖锐过渡区(如边缘)分开融合,平坦区融合使用的是经过多次高斯滤波和下采样后的权重图,仅在比较大的边缘纹理处变化剧烈;由于拉普拉斯金字塔中只保留了边缘等高频信息,因此在拉普拉斯金字塔上对尖锐过渡区进行融合不会影响平坦区。

2 实验

3 参考

Mertens T, Kautz J, Van Reeth F. Exposure fusion[C]//15th Pacific Conference on Computer Graphics and Applications (PG’07). IEEE, 2007: 382-390.
https://zhuanlan.zhihu.com/p/455674916

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySql加密存储的数据,如何模糊搜索?

背景 蔚来被勒索 225 万美元,大量数据遭泄露! 根据网络上流传的截图显示,黑客似乎掌握着蔚来内部员工数据 22800 条、车主用户身份证数据 399000 条、用户地址数据 6500000 条、注册用户数据 4850000 条、企业及企业代表联系人数据 10000 条…

dpdk编译

ubuntu网卡信息配置 虚拟机中除去最开始的一块网卡,再另外添加两块网卡,如下图所示 修改Ubuntu20_x64.vmx里面的配置信息 将ethernet0.virtualDev "e1000"里面的e1000更改成vmxnet3,因为e1000只支持网卡单队列,vmxnet3支持网卡对…

5G无线技术基础自学系列 | 5G移动性KPI

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G移动类KPI用来评估NR网络的移动性能&…

29. 如何通过 ABAP 代码给 SAP OData 元数据增添注解

笔者的这篇 SAP UI5 开发教程文章,* SAP UI5 应用开发教程之一百二十九 - 如何给 SAP UI5 SmartField 添加 Value Help 功能,有朋友留言: 你好,请教一个问题,请问如何在odata里面通过annotations添加一个自定义注解&am…

2022年哪些工具适合设计企业产品手册?

产品手册是什么? 产品手册是因特网发展的成果,是一种以移动端为基础进行在线营销的新内容,其中包含了对原有的纸质商品、小册子、促销软文、邀请函等现有促销资料进行数字化的更新。 产品手册是从传统的纸质公司样本书中升级而来的&#xf…

Git 入门

文章目录0. 前言学习目标参考教程链接1. Git概念1.1 什么是Git1.2 Git 的下载1.3 Git三大区域1.4 远程仓库2. Git的使用2.1 图形化操作2.1.1 IDEA图形化操作2.1.2 GitKraken(可选)2.2 命令行操作2.2.1 Git 配置2.2.2 分支命令2.2.3 拉取与推送3. 总结0. 前言 学习目标 了解 G…

面试官:你来说一下Spring IOC容器的创建过程

这篇文章主要讲解 IOC 容器的创建过程,让你对整体有一个全局的认识,文章没有复杂嵌套的 debug 流程,相对来说比较简单。 不 BB,上文章目录。 1. 基础知识 1.1 什么是 Spring IOC ? IOC 不是一种技术,只是…

数据结构抽象数据类型的表示和实现

抽象数据类型(Abstract Data Type,ADT)是指一个数学模型以及定义在此数学模型上的一组操作。例如,“整数”是一个抽象数据类型,其数学特性和具体的计算机或语言无关。“抽象”的意义在于强调数据类型的数学特性。抽象数据类型和数据类型实质上…

Halcon常用算子(库函数)整理

目录一. 常规操作类1.1 tuple_length()1.2 tuple_find_first()1.3 tuple_gen_const()二. 机器视觉操作类2.1 read_image()2.2 get_image_size()2.3 intensity()2.4 zoom_image_factor()2.5 median_image()2.6 Gauss_filter()2.7 fft_generic()2.8 convol_fft()2.9 sub_image()2…

大白话给你讲明白数据仓库

数据仓库的本质就是完成从面向业务过程数据的组织管理到面向业务分析数据的组织和管理的转变过程。 数据仓库类比粮食仓库 业务过程数据的组织管理实际上就是由各种业务系统来完成的,比如ERP、CRM、OA等各类业务系统,解决的是基本的业务流程管理。通过…

PS的安装、背景、背景练习、雪碧图、线性渐变、径向渐变、电影卡片练习——06fontbackground

目录 一、PS的安装 二、背景(background-color、background-image、 background-repeat、background-position、background-clip、background-origin、background-size、background-attachment) 三、背景练习(背景重复—导航条的背景颜色是渐变的) 四、背景练习&#xff08…

【数据结构】深度讲解栈、栈的应用举例、栈和递归的实现教你全面认识栈

目录一.栈1.栈的概念及结构2.栈的实现stack.hStack.c二.栈的应用举例1.数制转换2.有效的括号3.迷宫求解三.栈与递归的实现1.栈和递归2.迷宫问题递归实现3.汉诺塔栈实现一.栈 入栈出栈展示: 1.栈的概念及结构 栈:一种特殊的线性表,其只允许…

【Web开发】Python实现Web服务器(Ubuntu下安装Flask)

🍺基于Python的Web服务器系列相关文章编写如下🍺: 🎈【Web开发】Python实现Web服务器(Flask快速入门)🎈🎈【Web开发】Python实现Web服务器(Flask案例测试)&a…

【ESP32+freeRTOS学习笔记-(三)任务】

目录1、任务相关基本概念1.1 任务函数原型1.2 任务句柄TaskHandle_t 及任务控制块TCB_t1.3 任务状态1.4 优先级(Task Priorities)2 创建任务2.1 xTaskCreate2.2 xTaskCreateStatic()3 延迟函数使任务进入阻塞状态vTaskDelay()函数vTaskDelayUntil()函数4…

【C++初阶】vector的模拟实现

文章目录vector的介绍vector的模拟实现成员变量Member functionsconstructor(构造函数)destructor(析构函数)operatorIteratorsbeginendCapacitysizecapacityreserveresizeElement accessoperator[]Modifierspush_backpop_backins…

手办商城系统|Springboot+vue+ElementUI手办商城系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

C语言重点解剖预处理要点速记

1.宏定义字符串的时候一定要带上双引号。 2.程序的翻译,就是把文本代码翻译成二进制代码。分为4个阶段,即预处理,编译,汇编,链接。 3.预处理:头文件展开,去注释,宏替换&#xff0c…

基于Spring cloud + vue 的前后端分离的社团管理系统,数据库采用MYSQL,前端使用 VUE + element

背景 因学校没有成熟的社团管理系统,一为满足学校需求, 其次开源的社团管理项目,多为mvc ssm框架 很少有前后端分离的微服务框架,为了科技的发展, 更好学习解决高并发问题,也为了更好地掌握锤炼新技术&…

Web前端:广州蓝景实训

0基础也能学,5个月的课程时间,从小白到就业课程内容紧贴市场就业要求。广州蓝景前端实训课程,6年时间培养出过千名工程师,成功就业。今天就跟大家分享,蓝景学员的学习体验流程: 一、前端技术学习 1、授课…

3.Kafka

1.定义 1.1传统定义 Kafka是一个分布式的基于发布订阅模式的消息队列,主要应用于大数据的实时处理领域发布订阅:消息发布者不会直接将消息发送给订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息 1.2最新定义 …