[论文阅读] ALM-HCS(高对比场景自适应对数映射)
[论文阅读] ALM-HCS(高对比场景自适应对数映射)
文章: Adaptive Logarithmic Mapping for Displaying High Contrast Scenes
1. 论文目的
将高动态范围图像映射到机器可以显示的动态范围, 作者提出了几个要求:
The design of our tone mapping technique was guided by a few rules.
- It must provide consistent results despite the vast diversity of natural scenes and the possible radiance value inaccuracy found in HDR photographs.
- Additionally, it should be adaptable and extensible to address the current capabilities ofdisplaying methods and their future evolution.
- Tone mapping must capture the physical appearance of the scene, while avoiding the introduction of artifacts such as contrast reversal or black halos.
- The overall brightness of the output image must be faithful to the context. It must be “user-friendly” i.e., automatic in most cases, with a few in- tuitive parameters which provide possibility for adjustments.
- It must be fast for interactive and realtime applications while avoiding any trade-off between speed versus quality
总结起来就是:
- 具有普适性, 对所有图像都能适用, 而不是仅适用于某些特定的图像;
- 具有自适应性, 可以根据图像自身的情况调整参数;
2. 论文方法
论文方法归纳起来就是自适应对数变换(Adaptive Logarithmic Mapping) + gamma校正, 同时满足上述要求:
- 对于普适性, 论文中使用公式1, 将图像输出调整[0, 1], 再根据需要调整需要显示的动态范围(一般是[0,255]).

- 对于自适应性, 论文中使用对数变换 \(log_{base}(L_w+1)\) 来对图像的对比度进行调整, 其中,
base是根据图像自身的信息来进行调整的.
论文中的公式4就是上述过程的综合:

其中, Lw为图像中每个像素的亮度, Lwmax为图像中亮度最大值, Ldmax为显示最大值, 一般 Ldmax*0.01=1, 参数b对数函数的基底进行调整.
然后使用gamma校正来进一步调整图像. 因而论文方法步骤可以概括为:
- 自适应对数变换;
- gamma校正;
3. 论文核心
3.1 场景亮度映射到图像亮度-缩放因子很关键
论文中使用了一个缩放因子来调整图像映射后的整体亮度, 根据论文中的说明, 公式1可以更改为:

其中, 参数 Lwa 是很关键的, 这个会影响到图像最终的亮度, 如下图所示为上述公式的在不同 Lwa 下的曲线:

图中, 最上边蓝色的曲线为 Lwa=1 的情况, 与公式1是完全一样的. 我们可以看到, 当 Lwa=1 时, 曲线斜率很大, 映射后像素的亮度值会增加很大, 会导致图像整体偏亮, 对比度降低, 所以必须要有这个缩放因子.
如下所示图像测试结果(从左到右依次为: 原图, lwa=1的图像, lwa=50的图像):

可以看到, 当Lwa=1 时, 图像亮度亮度过高, 对比度低.
3.2 自适应对数映射-基底很关键
为方便理解, 这里将公式4调整为如下公式:

其中, Ldmax*0.01=1 省略了, 然后利用文中的换底公式2(\(log_{base}(x)=log(x)/log(base)\)), 可以将上式变换成公式4.
从上述调整后的公式可以看到, 对数变换的基底 base 很重要, 下图为论文中给出的 log2(左图) 和 log10(右图) 的对比效果:

从图中可以看到:
- log2 时图像整体偏亮, 对比度更强, 如右上角的暗部区域细节增强较好, 但对于较亮的区域, 如几个窗户则过度增强了, 出现了饱和, 丢失了细节;
- log10时图像整体偏暗, 对比度要低一些, 如右上角的暗部区域细节没有得到很好的增强, 但对于较亮区域的细节则保持的很好, 如几个窗户的细节清晰;
因而, 如果使用固定的基底, 则适应所有图像, 不具备普适性, 所以基底很重要, 需要具有自适应性.
这里对自适应性说明一下:
- 当亮度
Lw越小, 公式中计算出来的基底base就越小, 对数变换 \(log_{base}(L_w+1)\) 的值就越大, 亮度增加的越多; - 当亮度
Lw越大, 公式中计算出来的基底base就越大, 对数变换 \(log_{base}(L_w+1)\) 的值就越小, 亮度增加的越少;
对于不同的亮度, 计算出来的基底在[2,10]内取值, 因而可以做到自适应.
3.3 gamma校正
在自适应对数变换后, 论文中还使用了gamma校正来进一步调整图像亮度, 原因应该就是论文中的自适应对数变换效果还不够好. 论文中使用的gamma变换为ITU-R BT.709的改进, 其公式如下所示:

下图所示为论文中方法实现的效果, gamma=2.2:

上图依次为原图, 自适应对数变换, 自适应对数变换+gamma校正, 可以看到, 自适应对数变化的效果还不够好, 需要使用gamma校正来进一步提高图像效果.
4. 核心参数说明
4.1 缩放因子lwa
论文中使用场景亮度均值 Lwa 作为景亮度到图像亮度的缩放因子, 这是由于图像显示的整体亮度由场景的整体亮度决定的, 从3.1中的曲线图可以看到, 处理后图像的亮度与 lwa 成反相关:
lwa越小, 处理后图像越亮提升越多lwa越大, 处理后图像越亮提升越少
上面的关系可以这么来解释: Lwa 越小, 场景亮度越低, 亮度需要提高的就越多; Lwa 越大, 场景亮度越高, 亮度需要提升的就越少. 如下图所示为不同 Lwa 的效果, b固定为0.85, 依次为50, 100, 150:

从图中可以看到, 图像的亮度是依次降低的. 同时从3.1中的曲线图可以看到, Lwa 越大, 变换曲线越接近于直线, 起到的作用也就越低.
4.2 偏置参数b
来看看参数b对图像亮度的影响, 如下图所示为公式4在不同参数b的情况:

从上图可以看到, b的情况与lwa情况有点类似, 都与图像亮度成反相关:
- b越小, 斜率越大, 处理后图像亮度提升越多
- b越大, 斜率越小, 处理后图像亮度提升越少
但b不能小于0.7. 从上图可以看到, 当b<0.7是, 曲线不是单调函数, 且最终结果会大于1, 这样处理后的图像有副作用, 如图像太亮, 且不能保持图像中像素的相对大小. 论文中作者推荐b=0.85.
如下图所示为不同b的效果, lwa固定为亮度均值, 依次为0.5, 0.7, 0.9:

从上图可以看到, 当b=0.5时, 处理后图像并没有太亮, 且也没有出现副作用, 可能是由于lwa影响了b的效果.
4.3 lwa 与 b关系
从公式4中可以看到, 并没有lwa, 这里对公式改写如下:

下图为更改后, 不同参数的情况(b=0.5, 0.6, 0.7, 0.8, 0.9, 1.0):


从图中可以看到, lwa的效果比b的效果要明显些. 为了保持处理后的图像亮度的稳定性, 作者使用了如下公式来调整lwa:

对于公式4, b越小, 处理后图像越亮, 使用上述公式后, lwa越大, 图像亮度越小, b使图像亮度增加, lwa使图像亮度降低, 二者相互抵消. 如下图所示:

从图中可以看到, 图像亮度基本是恒定的, 但效果不是很理想, 因而还需要后续进行gamma校正处理.
4.4 最大数对数基底
如公式4中, 对最大数取对数时, 使用基底为10, 至于为什么取10, 论文中给出的解释是:
In the denominator decimal logarithm is used since the maximum luminance value in the scene is always re-sampled to decimal logarithm by the bias function.
而真正的原因应该是自适应 base 的取值为[2,10], 最大数对数基底要取这个里面的最大值, 否则得到最大数就被放大, 会压缩图像的亮度. 如下所示为基底为2的情况:

从图中可以看到, 当最大值对数取基底为2时, 处理后图像亮度没有达到最大值1, 图像亮度被压缩.
4.5 参数设置小结
对于上述分析, 这里总结下:
- 缩放因子lwa: 取图像亮度均值, 对处理后图像亮度影响较大, 对于较暗图像, 处理效果不是太理想, 需结合gamma校正;
- 参数b: 配合lwa使用, 对处理后图像亮度影响没有lwa大;
- 最大数对数基底: 需取base取值范围内的最大值, 否则图像亮度会被压缩;
- gamma校正: gamma值, 目前仅测试了gamma=2.2, 根据图像亮度进行调整(需研究方法)效果应该会更好;
5. 最终实现
5.1 效果
使用参数为: lwa=亮度均值, b=[0.5, 0.7, 0.9], gamma=2.2, 最大数对数为log10, 最终效果如下(从左到右依次为: 原图, b=0.5, b=0.7, b=0.9):

5.2 代码
作者开源了代码, 详见这里: http://resources.mpi-inf.mpg.de/tmo/logmap/. 这里使用matlab实现了, 代码如下:
img_path = './src/test.jpg';
rgb = imread(img_path);
alm = alm_hcs(rgb);
alm_g = double(alm) / 255;
alm_g = gamma_function(alm_g, 2.2);
alm_g = uint8(alm_g * 255);
impair = cat(2, rgb, alm, alm_g);
imshow(impair)
function [alm] = alm_hcs(rgb, b, lwa)
rgb = double(rgb);
% RGB转XYZ
xyz = colorConvert(rgb, 'rgb2xyz');
Y = xyz(:,:,2);
lwa = lwa / (1 + b - 0.85) ^ 5;
Y = Y / lwa;
lwmax = max(Y(:));
bias_p = log(b)/log(0.5);
div = log10(lwmax + 1);
base = 2 + power(Y / lwmax, bias_p) * 8;
Y_new = log(Y + 1) ./ log(base) / div;
% 同比例处理X,Z通道
scalefactor = Y_new ./ Y / lwa * 255;
scalefactor(Y == 0) = 0;
scalefactor = cat(3, scalefactor, scalefactor, scalefactor);
alm = scalefactor .* xyz;
alm = max(min(alm, 255), 0);
% XYZ转RGB
alm = colorConvert(alm, 'xyz2rgb');
alm = uint8(alm);
end
唯一觉得美中不足是, 论文使用的是全局映射, 没有考虑局部信息来进一步增加对比度.
[论文阅读] ALM-HCS(高对比场景自适应对数映射)的更多相关文章
- Tone Mapping算法系列二:一种自适应对数映射的高对比度图像显示技术及其速度优化。
办公室今天停电,幸好本本还有电,同事们好多都去打麻将去了,话说麻将这东西玩起来也还是有味的,不过我感觉我是输了不舒服,赢了替输的人不舒服,所以干脆拜别麻坛四五年了,在办公室一个人整理下好久前的一片论文 ...
- 论文阅读 | Region Proposal by Guided Anchoring
论文阅读 | Region Proposal by Guided Anchoring 相关链接 论文地址:https://arxiv.org/abs/1901.03278 概述 众所周知,anchor ...
- [论文阅读]阿里DIN深度兴趣网络之总体解读
[论文阅读]阿里DIN深度兴趣网络之总体解读 目录 [论文阅读]阿里DIN深度兴趣网络之总体解读 0x00 摘要 0x01 论文概要 1.1 概括 1.2 文章信息 1.3 核心观点 1.4 名词解释 ...
- 深度学*点云语义分割:CVPR2019论文阅读
深度学*点云语义分割:CVPR2019论文阅读 Point Cloud Oversegmentation with Graph-Structured Deep Metric Learning 摘要 本 ...
- 【医学图像】3D Deep Leaky Noisy-or Network 论文阅读(转)
文章来源:https://blog.csdn.net/u013058162/article/details/80470426 3D Deep Leaky Noisy-or Network 论文阅读 原 ...
- 论文阅读:《Bag of Tricks for Efficient Text Classification》
论文阅读:<Bag of Tricks for Efficient Text Classification> 2018-04-25 11:22:29 卓寿杰_SoulJoy 阅读数 954 ...
- 论文阅读:Adaptive NMS: Refining Pedestrian Detection in a Crowd
论文阅读:Adaptive NMS: Refining Pedestrian Detection in a Crowd 2019年04月11日 23:08:02 Kivee123 阅读数 836 ...
- YOLO 论文阅读
YOLO(You Only Look Once)是一个流行的目标检测方法,和Faster RCNN等state of the art方法比起来,主打检测速度快.截止到目前为止(2017年2月初),YO ...
- [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding
[论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...
随机推荐
- YAOI Round #5 题解
前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/13 Div.2 : http://47.110.12.131:9016/contest/12 D ...
- 6.Java方法
一.什么是方法 方法:要去做某件事情,而采取的一些解决办法( Java 中的方法是完成某些事情的) System.out.println(); //类(系统类) 对象(标准输出对象) 方法(print ...
- 家庭账本开发day10
系统的增删改查基本功能完成,进行业务流程完整测试.完善相关功能,编写搜索 功能,通过日期,类型等关键字进行搜索,对搜索到的数据表格完成重载 // 监听搜索操作 form.on('subm ...
- 答读者问(1):非模式物种找marker;如何根据marker定义细胞类型
下午花了两个小时回答读者的疑问,觉得可以记录下来,也许能帮到一部分人. 第一位读者做的是非模式物种的单细胞. 一开始以为是想问我非模式物种的marker基因在哪儿找,读者朋友也提到了blast 研究的 ...
- Hive——简介
Hive--简介 Hive 是基于 Hadoop 构建的一套数据仓库分析系统,它提供了丰富的 SQL 查询方式来分析存储在 Hadoop 分布式文件系统中的数据, 可以将结构化的数据文件映射为一张数据 ...
- Python基础之动态添加属性,方法,动态类,静态类
## 动态添加属性class Person: def __init__(self,name): self.name = name# 1.通过对象.属性名称来操作p = Person('KTModel' ...
- 微信小程序云开发-云存储-上传单张照片到云存储并显示到页面上
一.wxml文件 页面上写上传图片的按钮,按钮绑定chooseImg. <button bindtap="chooseImg" type="primary" ...
- [考试总结]noip模拟12
菜 今天总体来说 菜爆了,打了 \(3\) 个暴力,没有一个是正解,并且每一个分数都低得要命... 主要还是太菜了... 第一题开题发现和昨天 \(T3\) 一样,然而因为还没学可持久化数据结构就咕掉 ...
- 第二篇 -- Qt Designer界面介绍
1. Qt Designer创建界面 2. Qt Designer全局
- Springboot中mybatis执行逻辑源码分析
Springboot中mybatis执行逻辑源码分析 在上一篇springboot整合mybatis源码分析已经讲了我们的Mapper接口,userMapper是通过MapperProxy实现的一个动 ...