2012-12-07 69 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? –