4

我正在尝试以编程方式更改白点/白平衡。这就是我想要完成的:
- 从图像中选择一个(随机)像素
- 获取该像素的颜色
- 转换图像,以便该颜色的所有像素都将转换为白色,并且所有其他颜色都将转换为匹配

我已经完成了前两个步骤,但第三步并没有真正奏效。

起初,我认为,根据 Apple 的文档CIWhitePointAdjust应该可以完全做到这一点,但是,尽管它确实改变了图像,但它并没有做我想要/期望它做的事情。

然后似乎CIColorMatrix应该可以帮助我改变颜色,但我(现在仍然)不知道用那些讨厌的向量输入什么。我已经尝试了几乎所有的东西(所有向量上的 RGB 值相同,每个向量上的对应值(R 表示 R 等),1 - 对应值,1 + 对应值,1/对应值。RGB 值和不同的(1 - x , 1 + x, 1 / x)。

我也遇到过CITemperatureAndTint,根据 Apples 文档也应该有所帮助,但我还没有弄清楚如何从 RGB 转换为温度和色调。我已经看到了关于从 RGB 转换为 Temperatur 的算法和公式,但没有看到关于色调的内容。不过,我将继续对此进行一些试验。

非常感谢任何帮助!

4

1 回答 1

6

经过大量的实验和数学运算,我终于让我的应用程序几乎可以按照我想要的方式工作。
如果其他人会发现自己面临类似的问题,那么这就是我所做的。
我最终使用CITemperatureAndTint过滤器提供开尔文颜色,该颜色是根据所选像素 RGB 值和用户提供的色调值计算得出的。
要达到 Kelvins I:
- 首先使用 D65 光源(即日光)将 RGB 转换为 XYZ。
- 然后从 XYZ 转换为 Yxy。这两种转换都是使用从EasyRGB中找到的算法进行的。- 然后我使用我在这里
的一篇论文中找到的 McCamry 公式从 Yxy 计算开尔文。

这些步骤得到了大致上的图像,但并不完全在那里,所以我添加了一个UISlider供用户提供从 -100 到 100 的色调值。

通过选择一个应该是白色的点并从色调刻度的正侧选择值(我手机上的所有图像都倾向于更黄),现在可以将图像转换为(更多)中性色。耶!

我提供了计算出的温度和用户选择的色调作为inputNeutral矢量值。
6500(D65 日光)和 0 作为CITTemperatureAndTint过滤器的inputTargetNeutral向量值。

于 2013-04-12T13:11:40.683 回答