2012-12-07 21 views
6

Tôi đang lập bản đồ một số yếu tố photoshop để CIFilter, là người duy nhất tôi đang gặp rắc rối với là này Levels Adjustment:Làm thế nào tôi có thể ánh xạ điều chỉnh mức của Photoshop vào bộ lọc Hình ảnh lõi?

screen shot from current version of photoshop

nào CI Lọc (hoặc kết hợp các bộ lọc) sẽ hãy để tôi sử dụng 16, 1.73, 239 & 39/245 ở trên trong ví dụ đầu tiên hoặc 31, 1.25, 255 30/255 trong ví dụ thứ hai. Tôi tin rằng đây là một loại điều chỉnh mức độ bóng/đen và trắng.

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

8

Bằng cách điều chỉnh công thức từ trang này: http://http.developer.nvidia.com/GPUGems/gpugems_ch22.html, tôi tin rằng bạn có thể thực hiện việc này bằng cách kết hợp CIColorMatrix, CIGammaAdjust và một CIColorMatrix khác.

Hãy gọi các mức đầu vào inBlack, inGammainWhite tương ứng và mức đầu ra outBlackoutWhite. Lưu ý rằng màu của Photoshop nằm trong khoảng từ 0 đến 255 trong khi các màu CI nằm trong khoảng từ 0 đến 1, do đó bạn cần chia các giá trị Photoshop (trừ inGamma!) Trước 255 trước khi đưa chúng vào các công thức sau.

Các bản đồ đầu vào là pixel = (inPixel-inBlack)/(inWhite-inBlack), có nghĩa là ma trận đầu tiên của bạn sẽ được

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] 

Sau đó, bạn áp dụng hiệu chỉnh gamma sử dụng CIGammaAdjust và số inGamma (Tôi đã phải sử dụng nghịch đảo 1/inGamma khi thực hiện các tính toán của tôi, cố gắng mà quá!).

Cuối cùng ánh xạ ra là điểm ảnh = gammaCorrectedPixel * (outWhite - outBlack) + outBlack, cho bạn ma trận chính thức

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] 

tôi đã không thực sự cố gắng này sử dụng CoreImage, nhưng các tính toán làm việc ra độc đáo!

+0

bạn có thể giải thích phần này không? pixel = gammaCorrectedPixel * (outWhite - outBlack) + outBlack – Eric

+0

Công thức từ liên kết là 'outPixel = (pow ((inPixel * 255.0) - inBlack)/(inWhite - inBlack), inGamma) * (outWhite - outBlack) + outBlack)/255.0' do đó là phần bên ngoài của 'pow' (công thức được giải mã thành một phép nhân ma trận được áp dụng trước' pow', bản thân 'pow' được áp dụng như hiệu chỉnh gamma và sau đó là ma trận cho mọi thứ xảy ra sau' pow'). – jakber

+0

như vậy, inBlack = 31, inGamma = 1,25 và inWhite = 255? Sau đó, chúng ta phải chia các giá trị này cho 255? –