图像间的超快速色彩传递(P2)
例子
抓住这个example.py文件和运行示例,只需从GitHub项目页面获取代码。
GitHub项目页面:https://github.com/jrosebr1/color_transfer
你已经在这篇文章的顶部看到了海滩的例子,但让我们再看看:
执行此脚本后,您应该会看到以下结果:

请注意日落照片中的橙色和红色是如何在白天转移到海洋照片中的。
令人惊叹的但让我们尝试一些不同的东西:

在这里你可以看到,在左边我们有一张森林地区的照片——大部分是与植被有关的绿色,以及与树皮有关的深棕色。
然后在中间我们有一个不祥的雷云-但让它变得更加不祥!
如果你曾经经历过严重的雷暴或龙卷风,你可能已经注意到,在暴风雨之前,天空变成了一片诡异的绿色阴影。
如右图所示,我们通过将森林区域的颜色空间映射到云层,成功地模拟了这种不祥的绿色天空。
很酷吧?
还有一个例子:

在这里,我结合了两件我最喜欢的东西:秋叶(左)和世纪中期的现代建筑,在这个例子中,弗兰克·劳埃德·赖特的《瀑布》(中)。
瀑布的中间照片展示了一些令人惊叹的世纪中期建筑,但如果我想给它一个“秋天”风格的效果呢?
你猜对了——把秋天图像的颜色空间转移到瀑布上!正如你在右边看到的,结果非常棒。
改进算法的方法
虽然Reinhard等人的算法速度极快,但有一个特别的缺点——它依赖于全局颜色统计,因此具有类似像素强度值的大区域会显著影响平均值(以及整体颜色转移)。
为了解决这个问题,我们可以考虑两种解决方案:
选项1:在您想要模拟颜色的较小感兴趣区域(ROI)中计算源图像的平均值和标准偏差,而不是使用整个图像。采用这种方法将使你的平均值和标准偏差更好地代表你想要使用的颜色空间。
选项2:第二种方法是对两幅图像应用k均值。可以在L*a*b*颜色空间中对每个图像的像素强度进行聚类,然后使用欧几里德距离确定两个图像之间最相似的质心。然后,只计算这些区域内的统计数据。同样,这将使你的平均值和标准差产生更“局部”的影响,并有助于缓解全球统计数据的过度代表性问题。当然,缺点是这种方法的速度要慢得多,因为您现在添加了一个昂贵的集群步骤。