文章: [Illuminant Aware Gamut-Based Color Transfer], [python代码]
本文目的是提出一种新的颜色迁移算法, 可以感知光源变化的全色域颜色迁移方法.
图像是由摄像机对光谱场景内容和场景照度的敏感性所产生的综合信号; 场景照明可以对图像的整体RGB值产生显著影响, 引入明显的颜色投射, 可以给图像一个非常不同的外观.
颜色迁移问题与颜色恒定和白平衡问题有相似之处, 因而在处理过程需要考虑场景照明.
总结本文影响颜色迁移算法效果的原因, 主要有2个:
本文针对上述问题提出了解决方法, 因而本文的核心为白平衡和全色域匹配.
本文使用的方法是 Improving Color Constancy by Photometric Edge Weighting 文中的方法, 这里没有详细研究, 有兴趣的可以查看原文.
下图所示为白平衡的影响, 没有看懂 … , 文中的解释是, 只有正确的白平衡设置,每个斑块的白色斑块直方图收敛于给定的6个相干峰值.
对于本文算法, 使用白点进行归一化后, 从(0,0,0)到(1,1,1)构成的向量可以表示灰色的深浅, 这有2个好处:
文中使用如下公式来进行匹配:
I o = T I s + μ t (7) I_o = T I_s + \mu_t \tag{7} Io=TIs+μt(7)
式中, I s I_s Is 是去除均值后的. 这里关键是是求出T. 由于已经去除了均值, 中心已经移到了(0,0,0), 这里T就只涉及到缩放和旋转了, 如下所示:
本文利用凸包的体积进行优化, 即使输出图像的色域在目标图像的色域内, 并尽可能扩大输出图像的色域, 如下所示:
式中, C H s CH_s CHs 和 C H t CH_t CHt 分别为源图像和目标图像的凸包, V ( ∗ ) V(*) V(∗) 为计算凸包的体积, ⊕表示凸包的并集, T表示对源图像凸包的缩放和旋转, 如下所示为一个示例:
由于式6是一个非凸函数, 需要用蛮力搜索来寻找全局最优, 本文利用Matlab的fminunc优化工具箱中的准牛顿方法获得了一个近似解.
本文算法, 相比其它算法效果还是不错的, 如下所示:
从本文算法描述上看, 算法还比较简单, 但从算法实现上看(python代码戳这里)还是挺发杂的:
下面是使用matlab复现的结果(参考了python代码):
上图为有白平衡结果, 下图为无白平衡结果. 可以看到, 无白平衡结果比有白平衡结果要偏亮一些, 其他倒是没有太大区别, 可能测试图像不多. 这里是否可以去除白平衡提高算法速度!!!