Photoshop'un “Siyah Beyaz” Ayarlama Katmanının Arkasındaki Algoritma Nedir?


11

Birisi photoshop'taki "Siyah Beyaz" ayar katmanının arkasındaki algoritmayı açıklayabilir mi?

Photoshop ekran görüntüsü

Ben bir görüntü (yüzde benzeri yapılandırılabilir tolerans ile) olmayan kırmızı / kırmızı (ish) piksel vurgulayan bir uygulama için C ++ kullanarak çoğaltmak zorunda ve bu kaynak beklediğim davranışı gösterdi.


Yine de çoğaltamadım, ama bir ipucu buldum:

Her piksel, bir aditif (RGB) ve bir eksiltici (CMY) olmak üzere en fazla iki kontrol tarafından tanımlanır.


Algoritmayı bulmaya hiç yaklaştınız mı? Ben de bunu anlamaya çalışıyorum.
pizza filmleri

Hayır, yapmadım: /
Blamoo

Yanıtlar:


4

Algoritmayı MATLAB'da mükemmel bir şekilde kopyaladım (@ Ivan Kuckir cevabına dayanarak ):

function [ mO ] = ApplyBlackWhiteFilter( mI, vCoeffValues )

FALSE   = 0;
TRUE    = 1;

OFF = 0;
ON  = 1;

numRows = size(mI, 1);
numCols = size(mI, 2);
dataClass = class(mI);

numCoeff    = size(vCoeffValues, 1);
hueRadius   = 1 / numCoeff;
vHueVal     = [0:(numCoeff - 1)] * hueRadius;

mHsl = ConvertRgbToHsl(mI);
mO = zeros(numRows, numCols, dataClass);

vCoeffValues = numCoeff * vCoeffValues;

for jj = 1:numCols
    for ii = 1:numRows
        hueVal = mHsl(ii, jj, 1);
        lumCoeff = 0;

        % For kk = 1 we're dealing with circular distance
        diffVal     = min(abs(vHueVal(1) - hueVal), abs(1 - hueVal));
        lumCoeff    = lumCoeff + (vCoeffValues(1) * max(0, hueRadius - diffVal));
        for kk = 2:numCoeff
            lumCoeff = lumCoeff + (vCoeffValues(kk) * max(0, hueRadius - abs(vHueVal(kk) - hueVal)));
        end

        mO(ii, jj) = mHsl(ii, jj, 3) * (1 + lumCoeff);
    end
end


end

Dönüşüm olmasına dikkat ediniz vPhotoshopValuesiçin vCoeffValuesolduğu gibi yapılmalıdır vCoeffValues = (vPhotoshopValues - 50) ./ 50.
Photoshop değerleri [-200, 300] içindeyken ve [-5, 5] ile doğrusal olarak eşlenmelidir 50 -> 0.

İşte Photoshop ile bir karşılaştırma:

resim açıklamasını buraya girin

Maksimum hata [0, 255] aralığında 1'den az.

Tam kodu StackExchange Sinyal İşleme Q688 GitHub Depomda bulabilirsiniz .


8

Her (renkli) görüntü RGB bileşenlerinden oluşur. yalnızca KIRMIZI bileşenlerde tüm piksellere sabit bir değer eklediğinizde (veya azalttığınızda), KIRMIZI sekmeyi sağa doğru hareket ettirmeye eşdeğer bir etki görürsünüz ve aynı şekilde KIRMIZI bileşeni bir sabitle azaltmanın ters etkisi olur.

Akıllıca olduğu gibi, her bir bileşeni açıklandığı gibi sabit bir değerle artırabilir / azaltabilirsiniz. TÜM RGB bileşenlerini aynı değerde artırır / azaltırsanız, bu parlaklıktaki değişime eşdeğer olacaktır (temelde BEYAZ renk ekliyorsunuz / çıkarıyorsunuz).

Camgöbeği, Mavi, Macenta - CMYK renk uzayındaki bu dönüşüme karşılık gelir. (Ama sanırım, bu renk uzayındaki mavi camgöbeği ve sarı karışımına karşılık geliyor. Yani bu biraz zor. Dönüşüm aslında herkes için aynı.

Son öğe Ton: {Ton ve Doygunluk} aynı işlemlere karşılık gelir, ancak burada görüntüler önce HSV modelinde dönüştürülür ve sonra HUE ve Doygunluk bağımsız olarak eklenir / çıkarılır.

Kadranın işaretleyicilerinin karşılık gelen numaralarla tam ilişkilerini bilmiyorum, ancak pratik değerleri deneyerek anlayabilirsiniz.


1
RGB ve CMY var, bu yüzden tek yapmanız gereken iki renk uzayından herhangi birine dönüştürmek ve istediğiniz kadar ayarlama yapabilirsiniz. Ayarlamayı bitirdikten sonra diğer üçlüyü güncellemeyi unutmayın.
Jonas

Bu cevabın yanlış ve eksik olduğuna inanıyorum. 1. PS uygulamasında, "mavi" kaydırıcıyı kaydırmak mavi-ish piksellerinin parlaklığını etkilemez ve "mavi" kaydırıcıyı kaydırmak mavi-ish piksellerinin parlaklığını etkilemez. Bu cevapta anlatılan bu yaklaşım böyle işlemez. 2. RGBCMY bileşenlerinin manipüle edilmesinden sonra, bunların gri tonlamaya nasıl dönüştürüldüğünü açıklamıyorsunuz (muhtemelen bir dotProduct(color, vec3(0.2989, 0.5870, 0.1140)işlem olmasına rağmen ). 3. Mavi, hiçbir renk uzayında "camgöbeği ve sarı karışımına karşılık gelmez".
Stefan Monov

4. Renk tonu işleminin gri tonlamaya dönüştürüldükten sonra gerçekleştirildiğinden ve bundan önce gerçekleştirilmediğinden bahsetmezsiniz.
Stefan Monov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.