CITemperatureAndTint为什么有向量输入?

9

好的,所以核心图像滤镜温度和色调有两个输入:中性和目标中性。然而,我的最大问题是它们都是双组分向量,这意味着每个都具有两个数值输入。我预期第一个输入应该是从2500到10000。那么这个向量是什么?

2个回答

30
执行温度和色调调整的基本目的是纠正捕获图像的白平衡:考虑场景的环境照明并调整颜色,使图像看起来更像是在“白”光(大约6500K)下拍摄的。 温度与图像的温暖或冷淡有关,并且通常以橙色或蓝色为特征进行定性描述。 色调指的是在相同温度下颜色向绿色或品红色偏移的程度。请注意,色调(如此定义)在很大程度上独立于色温。(查看带有普朗克轨迹和等温线的CIE图表,以培养您的直觉。这里有一个:http://en.wikipedia.org/wiki/File:Planckian-locus.png)。
当你有兴趣进行白平衡调整时(无论是为了使图像更真实还是出于艺术目的),你需要提供四个不同的参数:初始图像的温度,白点在初始图像中显示的色调,输出图像所需的色温,以及"中性"色调在输出图像中应该呈现出多少色调偏移。图像的温度/色调组合是场景中环境光和被成像物料的响应的函数,并且温度和色调都是必要的,以便有意义地表征捕获图像的白平衡。
这就是为什么CITemperatureAndTint需要两个向量:它想要上述两对(温度,色调)。
现在,如果您想为控制白平衡创建一个UI界面,实际上您不必让用户控制这四个值中的所有值。相反,将第二个向量(TargetNeutral)保持不变(6500, 0),并允许用户调整其他向量(Neutral)。通过这种安排,用户将选择原始图像的感知色温和色调偏移量。(您也可以选择保持Neutral向量不变,并允许用户微调Target Neutral向量;这可能更适用于用户希望艺术性地调整白平衡的情况,但所选值与结果图像之间的相关性不太明显)。

4
非常感谢您清晰的解释。苹果公司在他们的文档中也应该更加详细地说明。 - akaru
这些值的范围是什么?我对图像处理还很陌生,想知道这些滤镜的作用范围。有关于“温度”和“色调”所测量的任何文档吗? - Benjamin Mayo
5
温度用开尔文(Kelvin)单位来测量,代表了黑体辐射源模型下的光源“温度”。“滤镜”可以使其范围从2000到正无穷,但10000是一个更有用的上限。色调是一个无单位的值,范围约为-100(很绿)到+100(很品红)。超出此范围的值是允许的,但会导致非常严重的失真。 - warrenm

0

@warrenm非常详细地说了,我会将代码添加到需要直接使用它的人那里!

温度:

var value: CGFloat = 0  // Min: -3000, Max: 3000

return image.applyingFilter("CITemperatureAndTint", parameters: [
             "inputNeutral": CIVector.init(x: value + 6500, y: 0),
             "inputTargetNeutral": CIVector.init(x: 6500, y: 0)
         ])

颜色:

var value: CGFloat = 0  // Min: -100, Max: 100

return image.applyingFilter("CITemperatureAndTint", parameters: [
            "inputNeutral": CIVector.init(x: 6500, y: value),
            "inputTargetNeutral": CIVector.init(x: 6500, y: 0)
        ])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接