欢迎光临散文网 会员登陆 & 注册

图像间的超快速色彩传递(P0,前情提要)

2022-02-17 11:11 作者:闲予1217  | 我要投稿

颜色转移算法

我对颜色传递的实现(松散地)基于Reinhard等人(2001)的图像之间的颜色传递。

在本文中,Reinhard及其同事证明,通过分别利用L*a*b*颜色空间和每个L*、a*和b*通道的平均值和标准偏差,可以在两幅图像之间传递颜色。

算法如下:

  • 第1步:输入源图像和目标图像。源图像包含希望目标图像模拟的颜色空间。在本页顶部的图中,左边的日落图像是我的源,中间的图像是我的目标,右边的图像是应用于目标的源的颜色空间。

  • 第2步:将源图像和目标图像转换为L*a*b*颜色空间。L*a*b*颜色空间模拟感知一致性,其中颜色值的微小变化也应产生颜色重要性的相对相等变化。与标准RGB颜色空间相比,L*a*b*颜色空间在模拟人类如何解读颜色方面做得更好,正如你所看到的,它在颜色传递方面非常有效。

  • 步骤3:拆分源和目标的通道。

  • 步骤4:计算源图像和目标图像的每个L*a*b*通道的平均值和标准偏差。

  • 步骤5:从目标通道中减去目标图像的L*a*b*通道的平均值。

  • 第6步:通过目标的标准偏差除以源的标准偏差,再乘以目标通道,来缩放目标通道。

  • 第7步:为源添加L*a*b*通道的方式。

  • 第8步:剪裁[0255]范围之外的任何值。(注意:这一步不是原著的一部分。我之所以添加这一步,是因为OpenCV处理颜色空间转换的方式。如果要在不同的语言/库中实现此算法,您必须自己执行颜色空间转换,或者了解进行转换的库是如何工作的)。

  • 第9步:将频道重新合并在一起。

  • 第10步:从L*a*b*空间转换回RGB颜色空间。

我知道这似乎需要很多步骤,但事实并非如此,尤其是考虑到在使用Python、NumPy和OpenCV时,该算法的实现有多么简单。

如果现在看起来有点复杂,别担心。继续阅读,我会解释为算法提供动力的代码。

要求

我假设您的系统上安装了Python、OpenCV(带有Python绑定)和NumPy。


图像间的超快速色彩传递(P0,前情提要)的评论 (共 条)

分享到微博请遵守国家法律