如何将Photoshop的级别调整映射到Core Image滤镜?

7
我正在将几个Photoshop元素映射到CIFilter,唯一让我困扰的是这个Levels Adjustment(级别调整):

当前版本Photoshop的截图
哪个CI Filter(或其组合)能让我使用上述第一个示例中的16、1.73、239和39/245,或者第二个示例中的31、1.25、255和30/255。我认为这是一种阴影/黑白级别调整。任何帮助都将不胜感激。
1个回答

10
通过调整此页面的公式:http://http.developer.nvidia.com/GPUGems/gpugems_ch22.html,我相信您可以使用CIColorMatrixCIGammaAdjust和另一个CIColorMatrix的组合来完成此操作。
让我们分别称输入级别为inBlackinGammainWhite,输出级别为outBlackoutWhite。请注意,Photoshop颜色介于0到255之间,而CI颜色介于0到1之间,因此在将它们放入以下公式之前,您需要将Photoshop值(除了inGamma!)除以255。
输入映射为pixel = (inPixel-inBlack)/(inWhite-inBlack),这意味着您的第一个矩阵将是:
red = [1/(inWhite-inBlack) 0 0 0]
green = [0 1/(inWhite-inBlack) 0 0]
blue = [0 0 1/(inWhite-inBlack) 0]
alpha = [0 0 0 1]
bias = [-inBlack/(inWhite-inBlack), -inBlack/(inWhite-inBlack),-inBlack/(inWhite-inBlack), 0]

然后,您可以使用 CIGammaAdjustinGamma 数字进行伽马矫正(在我的计算中需要使用反比例的 1/inGamma,也可以尝试这样做!)。
最后,输出映射是像素 = gammaCorrectedPixel * (outWhite - outBlack) + outBlack,从而给出最终矩阵。
red = [(outWhite - outBlack) 0 0 0]
green = [0 (outWhite - outBlack) 0 0]
blue = [0 0 (outWhite - outBlack) 0]
alpha = [0 0 0 1]
bias = [outBlack outBlack outBlack 0]

我实际上没有使用CoreImage尝试过这个,但计算结果非常好!


你能解释一下这部分吗?pixel = gammaCorrectedPixel * (outWhite - outBlack) + outBlack - Eric
链接中的公式是 outPixel = (pow(((inPixel * 255.0) - inBlack) / (inWhite - inBlack), inGamma) * (outWhite - outBlack) + outBlack) / 255.0,所以这是在 pow 之外的部分(该公式被分解为一个矩阵乘法,在 pow 之前应用的一次矩阵运算, pow 本身作为伽马校正应用,然后是一个矩阵,用于处理 pow 之后发生的所有事情)。 - jakber
那么,inBlack = 31,inGamma = 1.25,inWhite = 255?那么,我们需要将这些值除以255吗? - Min Soe

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