[论文阅读] ALM-HCS(高对比场景自适应对数映射)

文章: Adaptive Logarithmic Mapping for Displaying High Contrast Scenes

1. 论文目的

将高动态范围图像映射到机器可以显示的动态范围, 作者提出了几个要求:

The design of our tone mapping technique was guided by a few rules.

  1. It must provide consistent results despite the vast diversity of natural scenes and the possible radiance value inaccuracy found in HDR photographs.
  2. Additionally, it should be adaptable and extensible to address the current capabilities ofdisplaying methods and their future evolution.
  3. Tone mapping must capture the physical appearance of the scene, while avoiding the introduction of artifacts such as contrast reversal or black halos.
  4. 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.
  5. It must be fast for interactive and realtime applications while avoiding any trade-off between speed versus quality

总结起来就是:

  1. 具有普适性, 对所有图像都能适用, 而不是仅适用于某些特定的图像;
  2. 具有自适应性, 可以根据图像自身的情况调整参数;

2. 论文方法

论文方法归纳起来就是自适应对数变换(Adaptive Logarithmic Mapping) + gamma校正, 同时满足上述要求:

  1. 对于普适性, 论文中使用公式1, 将图像输出调整[0, 1], 再根据需要调整需要显示的动态范围(一般是[0,255]).

  1. 对于自适应性, 论文中使用对数变换 \(log_{base}(L_w+1)\) 来对图像的对比度进行调整, 其中, base 是根据图像自身的信息来进行调整的.

论文中的公式4就是上述过程的综合:

其中, Lw为图像中每个像素的亮度, Lwmax为图像中亮度最大值, Ldmax为显示最大值, 一般 Ldmax*0.01=1, 参数b对数函数的基底进行调整.

然后使用gamma校正来进一步调整图像. 因而论文方法步骤可以概括为:

  1. 自适应对数变换;
  2. 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(高对比场景自适应对数映射)的更多相关文章

  1. Tone Mapping算法系列二:一种自适应对数映射的高对比度图像显示技术及其速度优化。

    办公室今天停电,幸好本本还有电,同事们好多都去打麻将去了,话说麻将这东西玩起来也还是有味的,不过我感觉我是输了不舒服,赢了替输的人不舒服,所以干脆拜别麻坛四五年了,在办公室一个人整理下好久前的一片论文 ...

  2. 论文阅读 | Region Proposal by Guided Anchoring

    论文阅读 | Region Proposal by Guided Anchoring 相关链接 论文地址:https://arxiv.org/abs/1901.03278 概述 众所周知,anchor ...

  3. [论文阅读]阿里DIN深度兴趣网络之总体解读

    [论文阅读]阿里DIN深度兴趣网络之总体解读 目录 [论文阅读]阿里DIN深度兴趣网络之总体解读 0x00 摘要 0x01 论文概要 1.1 概括 1.2 文章信息 1.3 核心观点 1.4 名词解释 ...

  4. 深度学*点云语义分割:CVPR2019论文阅读

    深度学*点云语义分割:CVPR2019论文阅读 Point Cloud Oversegmentation with Graph-Structured Deep Metric Learning 摘要 本 ...

  5. 【医学图像】3D Deep Leaky Noisy-or Network 论文阅读(转)

    文章来源:https://blog.csdn.net/u013058162/article/details/80470426 3D Deep Leaky Noisy-or Network 论文阅读 原 ...

  6. 论文阅读:《Bag of Tricks for Efficient Text Classification》

    论文阅读:<Bag of Tricks for Efficient Text Classification> 2018-04-25 11:22:29 卓寿杰_SoulJoy 阅读数 954 ...

  7. 论文阅读:Adaptive NMS: Refining Pedestrian Detection in a Crowd

    论文阅读:Adaptive NMS: Refining Pedestrian Detection in a Crowd 2019年04月11日 23:08:02 Kivee123 阅读数 836   ...

  8. YOLO 论文阅读

    YOLO(You Only Look Once)是一个流行的目标检测方法,和Faster RCNN等state of the art方法比起来,主打检测速度快.截止到目前为止(2017年2月初),YO ...

  9. [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding

    [论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...

随机推荐

  1. buu 红帽杯easyre

    一.拖入ida静态分析 找到关键函数,然后 这步是可以得出前4个字符是flag,不知道为啥我这边的v15的内存地址为空,不然可以异或解出来的,ida日常抽风... 十次的base64加密,我用在线平台 ...

  2. ARTS第四周

    补第四周 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思考的技术文 ...

  3. Nginx PHP测试装

    Nginx yum -y install gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl open ...

  4. NTFS安全权限

    一.NTFS权限概述 1.通过设置NTFS权限,实现不同的用户访问不同的对象的权限 2.分配了真确的访问权限后,用户才能访问其资源 3.设置权限防止资源被篡改.删除 二.文件系统概述 文件系统即在外部 ...

  5. python -- 程序异常与调试(程序调试)

    一.程序调试 A.使用assert语句检测程序代码中的错误. assert 表达式[, 参数] 如果表达式为True,则继续往下运行:如果为False,则抛出一个AssertionError异常,并且 ...

  6. uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式

    前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...

  7. [源码解析] 深度学习分布式训练框架 horovod (19) --- kubeflow MPI-operator

    [源码解析] 深度学习分布式训练框架 horovod (19) --- kubeflow MPI-operator 目录 [源码解析] 深度学习分布式训练框架 horovod (19) --- kub ...

  8. ML - 常用数学符号

    关系运算符: ±:\pm ×:\times ÷:\div ∣:\mid ∤:\nmid ⋅:\cdot ∘:\circ ∗:\ast ⨀:\bigodot ⨂:\bigotimes ⨁:\bigopl ...

  9. 流畅的python-2

    一.python数据结构  ----------------> ()      []          {} List 列表[] 可变的 lst = [1,2,3,4] #改 lst[(元素下标 ...

  10. [SqlServer] 理解数据库中的数据页结构

    这边文章,我将会带你深入分析数据库中 数据页 的结构.通过这篇文章的学习,你将掌握如下知识点: 1. 查看一个 表/索引 占用了多少了页. 2. 查看某一页中存储了什么的数据. 3. 验证在数据库中用 ...