文章: 有2篇相关的文章, 都为同一作者
其它相关资料:
本文算法核心还是直方图匹配, 但本文的新颖性主要体现在不同尺度的直方图渐进式局部重塑, 如下图所示:

首先来说下不同尺度, 通过如下所示来统计直方图, 不同的V即为不同的尺度.

如上图中, 不同长度的直方图即为不同V的直方图.
直方图中的一个峰值对应一个分布, 也对应图像中某一个区域. 局部重塑就是对直方图的每个峰进行调整, 如下所示, [a,b]为一个局部区域范围:


如上图中所示.
类似金字塔结构, 一个尺度的结果作为下一个尺度的初始值, 从而实现渐进式处理过程.
如下所示为算法的整体流程:

本文算法是在Lab颜色空间进行的, 对每个颜色空间分别单独处理, 下面仅介绍一个颜色通道的处理方法:
这里觉得算法的关键有2个地方: 一个是不同尺度的实现, 一个是渐进式局部重塑.
本文使用插值算法对最原始的直方图进行缩放从而实现不同的尺度, 而不是直接使用公式进行计算, 可能是以下几个原因:
文中使用双立方进行下采样, 最邻近方法进行上采样. 文中说插值方法对结果影响不大, 但这里有个问题, 就是上采样使用最近邻时, 对于某些尺度可能会出现很明显的锯齿现象.
如下图所示为渐进式重塑的一个示例

局部重塑是通过公式(10)-(12)实现的, 这里补充说明下:
尺度的个数 S m a x S_{max} Smax是通过如下公式进行计算的:
S m a x = ⌊ l o g 2 ( B B m i n ) ⌋ (7) S_{max} = \lfloor log_2(\frac{B}{B_{min}}) \rfloor \tag{7} Smax=⌊log2(BminB)⌋(7)
每个尺度里面中直方图bin的个数为 B k = B ∗ 2 k − S m a x B_k=B*2^{k-S_{max}} Bk=B∗2k−Smax:
通过设置尺度个数 k = r a t i o ∗ S m a x k=ratio*S_{max} k=ratio∗Smax就可以实现不用比例的重塑, 从而实现不同程度的颜色迁移控制, 如下所示:

如下所示都为HDR图像结果:

HDR和LDR结果:

文中对上述算法存在的问题进行了说明并提出了解决方法.
由于以下几个方面的原因, 可能导致最后的结果会出选局部伪影:
作者给出的解决方法是, 使用双边滤波进行局部细节处理:


如下所示为处理后结果对比:

有时候需要额外的控制来指定源图像(目标图像)哪些区域需要进行颜色迁移, 哪些区域不需要进行颜色迁移, 这是由于这些区域可能存在不正常的颜色迁移. 如下图所示的白虎变成了红色.

这些区域都属于消色(黑白灰三种颜色)区域, 本文提出了一种检测这种区域的方法, 在Lab颜色空间的a,b通道使用如下公式进行计算得到:

上图中d图为后处理后的图像, 白虎的颜色正常. 但文中对于怎么使用这个区域说的不够详细, 看的不是很明白.
使用matlab复现结果如下所示:

依次为源图像, 目标/参考图像, 结果