我将使用一组任意图像。其中一些可能需要一些颜色校正。
我打开了一张需要在 Photoshop 中校正的图像,并注意到直方图中的黄色有点高。我应用了自动颜色并改善了图像。
这是如何运作的 ?如何实施?我是否在直方图中寻找峰值并根据其他峰值对它们进行平均?
语言/语法应该无关紧要。
我将使用一组任意图像。其中一些可能需要一些颜色校正。
我打开了一张需要在 Photoshop 中校正的图像,并注意到直方图中的黄色有点高。我应用了自动颜色并改善了图像。
这是如何运作的 ?如何实施?我是否在直方图中寻找峰值并根据其他峰值对它们进行平均?
语言/语法应该无关紧要。
这并不容易,它确实需要实践和艺术,但这是理论。
Photoshop 和 Picasa 等工具可以一键自动进行颜色校正。它必须假设平均颜色分布应该是什么,并且它们可能在 Lab 颜色空间而不是您熟悉的 RGB 颜色空间中工作。由于该方法是启发式的,因此对于某些图像会出错。例如,如果你在一片明亮但被笼罩的森林中拍摄图像,环境光具有明显的绿色投射,你根本无法摇晃颜色以使白色物体变成白色,因为你必须太用力地推入红色,从而搞砸了,例如,一件绿色衬衫。同样,来自傍晚橙色太阳的图像偏向黄色,并且要纠正它过于强烈地推入蓝色。自动颜色模式中可能有停止值以避免过度补偿。
现在 Lab 色彩空间是一头奇怪的野兽,几乎有整本关于它的书。这是一个三通道空间,一个通道上有亮度(这很简单),通道与我们对颜色的看法几乎没有联系,以至于它们被简单地称为“a”和“b”。a 和 b 通道对所有色度数据(不是亮度的所有数据)进行编码,其维度大致可称为黄-蓝和绿-红。这是另一个奇怪之处,Lab 的色域远远大于我们的眼睛所能处理的范围(RGB 和 CMYK 都小于我们的视觉色域),从而产生了不可能的颜色,例如几乎没有亮度的深度饱和的红色。我们可以描述它,但随着亮度的降低,我们的感知会褪色(这就是为什么夜间给所有东西都呈现蓝灰色外观的原因)。
那么你将如何在算法上做到这一点?首先,您需要真正了解感知模型,将图像转换为感知空间,根据非常复杂的法线期望调整双轴分布,然后将结果投射回 RGB 空间以便进行渲染。是的,这可以在袖珍相机中实现,但它并不简单,并且经常需要提示(例如将预期色温设置为晴天或阴影、钨丝灯或荧光灯等)。缺少人工引导算法会更频繁地出错,并且如果不手动遮盖一些像绿色森林这样的色偏,就无法在整个图像上令人满意地完成。
tl;博士
简单的算法可能如下所示:
在直方图中查找最低 (a) 和最高点 (b),其中的值小于最高值的 1%。
调整亮度以居中直方图。将颜色值乘以 256/(a+b)
将对比度调整为从 0 到 255 的扩展直方图。将颜色值乘以 127/(bb-128),其中 bb 是 b 乘以亮度值。
这是一个非常简单的算法,但我认为这在许多程序中都会发生。此外,程序可能会对饱和做一些事情。