好的,所以核心图像滤镜的温度和色调有两个输入,中性和中性。然而,我最大的问题是它们都是双分量向量,这意味着它们都有两个数字输入。我希望第一个从2500到10000.矢量将用于什么?
答案 0 :(得分:25)
执行温度和色调调整的基本目的是校正捕获图像的白平衡:考虑场景的环境照明并调整颜色,使图像看起来更像是在“白色”光下拍摄的(大约6500K)。
温度与图像的温暖或凉爽有关,通常定性为橙色或蓝色。
色调是指在相同温度下颜色偏向绿色或品红色。请注意,色调(定义如此)主要与色温无关。 (看看带有普朗克轨迹和等温线的CIE图,以发展你对此的直觉。这里有一个:http://en.wikipedia.org/wiki/File:Planckian-locus.png)。
因此,当您对执行白平衡调整感兴趣时(无论是使图像看起来更逼真,还是出于艺术目的),您必须提供四种不同的参数:初始图像的温度,初始图像的色调。初始图像中出现的白点,输出图像的所需色温,以及输出图像中应出现“中性”色调的色调偏移。图像的温度/色调组合是场景中的环境光和被成像材料的响应的函数,温度和色调都是有意义地表征捕获图像的白平衡所必需的。
这就是为什么CITemperatureAndTint
需要两个向量:它想要刚刚描述的两对(温度,色调)。
现在,如果您想创建一个用于控制白平衡的UI,您实际上不必让用户控制所有这四个值。相反,将第二个向量(TargetNeutral
)保持为常量(6500,0)并允许用户调整另一个向量(Neutral
)。通过这种布置,用户将选择感知的色温和原始图像的色调偏移。 (您可以选择保持Neutral
向量不变并允许用户调整Target Neutral
向量;这可能更适合用户想要艺术性地调整白平衡的上下文,但相关性所选值与结果图像之间的区别并不明显。)
答案 1 :(得分: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)
])