我正在尝试以编程方式更改白点/白平衡。这就是我想要完成的事情:
- 从图像中选择一个(随机)像素
- 获取该像素的颜色
- 转换图像,使该颜色的所有像素都转换为白色,并将所有其他颜色转换为匹配
我已经完成了前两个步骤,但第三步并没有真正解决。
起初我认为,根据Apples文档CIWhitePointAdjust应该是完全可以完成的事情,但是,虽然它确实改变了图像,但它并没有按照我希望/期望的方式进行。
然后似乎CIColorMatrix应该是能够帮助我改变颜色的东西,但是我(现在仍然)却厌倦了用那些讨厌的向量输入的东西。 我已经尝试了几乎所有的东西(所有矢量上的相同RGB值,每个矢量上的相应值(R代表R等),1 - 对应值,1 +对应值,1 /对应值.RGB值和不同(1 - x) ,1 + x,1 / x)。
我也遇到CITemperatureAndTint,根据Apples文档也应该有所帮助,但我还没想出如何从RGB转换为温度和色调。我已经看到了关于从RGB转换到Temperatur的算法和公式,但没有关于色调的内容。我会继续尝试这一点。
非常感谢任何帮助!
答案 0 :(得分:5)
经过大量的实验和数学训练后,我终于让我的应用程序几乎按照我想要的方式工作了
如果其他人发现自己面临类似的问题,那么这就是我所做的
我最终使用 CITemperatureAndTint 过滤器,根据所选像素RGB值和用户可提供的色调值计算开尔文中的颜色。
到达Kelvins I:
- 首先使用D65光源(即日光)将RGB转换为XYZ
- 然后从XYZ转换为Yxy。这两次转换均使用EasyRGB中的算法进行
- 然后我使用我在论文here中找到的McCamry公式计算了Yxy中的Kelvins。
这些步骤将图像放在球场但不完全存在,所以我为用户添加了UISlider
以提供从-100到100的色调值。
选择一个应该是白色的点并从色调比例的正面选择值(我手机上的所有图像往往更黄),现在可以将图像转换为(更多)中性色。 Yey!
我将计算出的温度和用户选择的色调作为inputNeutral
矢量值提供
6500(D65日光),0为inputTargetNeutral
向量值 CITTemperatureAndTint 过滤器。