2012-12-07 37 views
6

我映射数的Photoshop元素CIFilter,我在使用麻烦的只有一个是此水平的调整:如何将Photoshop的水平调整映射到核心图像过滤器?

screen shot from current version of photoshop

哪个CI筛选(或过滤器组合)将让我在第一个例子中使用上面的16,1.73,239,& 39/245,或者在第二个例子中使用31,1.25,25 30/255。我相信这是一种阴影/黑白平衡调整。

任何帮助表示赞赏。

回答

8

通过改编此页的公式:http://http.developer.nvidia.com/GPUGems/gpugems_ch22.html,我相信你可以使用CIColorMatrixCIGammaAdjust和另一个CIColorMatrix的组合来完成此操作。

我们称之为输入电平inBlack,分别inGammainWhite和输出电平outBlackoutWhite。需要注意的是Photoshop颜色是0和255之间,而CI颜色是0和1之间,所以你需要通过255将它们放入下列公式之前划分的Photoshop值(除inGamma!)。

输入映射为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真正试过,但计算工作出很好!

+0

你能解释一下这个部分?像素= gammaCorrectedPixel *(outWhite - outBlack)+ outBlack – Eric

+0

从链路的公式是'outPixel的=(POW(((inPixel * 255.0) - inBlack)/(inWhite - inBlack),inGamma)*(outWhite - outBlack)+ outBlack )/ 255.0'所以这是'pow'的外侧的部分(式解构成'pow'之前施加一个矩阵乘法时,'pow'本身用作伽马校正,然后适用于所有的矩阵之后发生的' pow')。 – jakber

+0

so,inBlack = 31,inGamma = 1.25,inWhite = 255?那么,我们必须将这些值除以255? –