动态范围调整(SEF算法实现)

一、背景介绍

继续在整理对比度调整相关算法,发现一篇单帧动态范围提升的算法:Simulated Exposure Fusion,论文表现看起来很秀,这里尝试对它进行了下效果复现。

二、实现流程

1、基本原理

整体来说,大致可以分为两步:

a、将单帧输入图像拆分为多帧图像,每帧图像相对输入来说,只保留部分区域信息,并对这部分区域进行了动态范围拓展。

b、对生成的多帧图像进行图像融合,得到最终结果图像,具体细节可以参考资料:杞朹:曝光融合(Exposure Fusion)

由于融合部分复用了之前讲过的算法,因此我们这里重点只关注如何生成帧。

在生成帧上,也分为两种情况:

a、外部直接指定生成帧数量。

b、算法内部自适应计算生成帧数量。

2、输入信息

a、单帧图像输入,并将输入图转换到HSV空间,对V通道处理。

b、三个输入参数:alpha, beta, lambda。

其中lambda参考论文,可以直接设置为0.125。

3.1、图像拆分帧数(外部指定)

beta可以控制生成帧数量:比如beta为0.25,那么设置生成帧数量M=1/beta=4。

3.2、图像拆分帧数(自适应生成)

a、利用直方图统计信息,计算出来图像中值,根据图像中值来反映当前图像的整理亮暗层度。

b、在后面帧序列生成上,我们可以知道,每个帧序列的有效像素范围为:

因此,我们可以根据公式:

找到序列帧之间,不存在有效像素公共区域的最大可拆帧数量,作为当前可生成帧的最大序列数量M。

对应的伪代码实现为:

4、帧序列生成

a、根据公式:

对生成序列每一帧都进行简单亮度调整,得到调整后图像f。

b、对生成序列每一帧,根据公式计算一个参数:

c、当图像f像素值范围在:

之间的时候,像素值保持不变。

否则像素值为:

通过这种方式保证当前序列帧只关注原图像

范围内的图像信息,并且保证和范围之外的像素信息过度平滑,避免出现明显截断。

d、生成帧演示:每一帧序列可以用如下一条曲线表示实际包含的原图像素信息:

部分实际序列帧效果:

三、效果对比

左边为输入图,右边为结果图像:

四、复现代码

相关的matlab代码,可以参考:IPOL Journal · Simulated Exposure Fusion

我这边做了简单的c++版本复现:

ImageQualityEnhancement/ltm/sef at master · yulinghan/ImageQualityEnhancement · GitHub

相关推荐
鱼宵5 分钟前
LangChain4j RAG 流水线:手写问答全流程,给 AI 开卷考试
大数据·人工智能·机器学习·langchain4j
HIT_Weston6 分钟前
247、【AI】【模型部署】基座模型研究:RoPE 用在前向还是反向——训练、推理与 KV cache
人工智能
m4Rk_9 分钟前
【论文阅读】Agent 记忆机制(97):MCMA——让 Agent 学会如何抽象记忆,实现跨任务经验迁移
论文阅读·人工智能·学习·开源·github
song50110 分钟前
React Native for OpenHarmony 实战:三方库 react-native-popup-menu 的鸿蒙化适配指南
css·深度学习·react native·react.js·transformer·harmonyos
晓德12 分钟前
7、LLM 模型是怎么训练生成的?(4)指令微调
人工智能·学习·算法·信息安全
蝶依斓(湖南)全案整装14 分钟前
整装企业环保健康交付内容写作方法:空气健康、环保材料与检测标准的非空泛表达
大数据·人工智能
问天_观心17 分钟前
Mistral-7B QLoRA 实战(二):官方权重转换、4-bit NF4 加载与 Base Model 基线测试
人工智能·深度学习·学习·大模型·transformer
倔强的石头10617 分钟前
Gemini架构解析_多模态大模型的设计思路
人工智能·大模型
码农小旋风22 分钟前
OpenSpec:轻量级AI工程规范管理框架
人工智能
AOI小白新手上路24 分钟前
深度学习项目模板与机器学习软件工程(MLSE)实践笔记
深度学习·机器学习·软件工程