Photoshop의 "흑백"조정 레이어 뒤에 알고리즘은 무엇입니까?


11

누군가 포토샵에서 "흑백"조정 레이어 뒤의 알고리즘을 설명 할 수 있습니까?

포토샵 스크린 샷

이미지에서 빨간색 / 자홍색 (ish)이 아닌 픽셀을 강조하는 응용 프로그램에 대해 C ++을 사용하여 그것을 재현해야합니다 (퍼센트와 같은 구성 가능한 공차로).이 리소스는 내가 기대하는 동작을 보여주었습니다.


여전히 그것을 재현 할 수는 없었지만 실마리를 찾았습니다.

각 픽셀은 최대 2 개의 컨트롤, 하나의 첨가제 (RGB)와 하나의 빼기 (CMY)로 정의됩니다.


알고리즘을 알아내는 데 더 가까워 졌습니까? 나는 이것을 알아 내려고 노력하고있다.
피자 필름

아니, 난
안했어

답변:


4

MATLAB에서 알고리즘을 완벽하게 복제했습니다 (@ Ivan Kuckir 답변 기준).

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

에서 vPhotoshopValues로 변환 vCoeffValues은로 수행해야합니다 vCoeffValues = (vPhotoshopValues - 50) ./ 50.
Photoshop 값이 [-200, 300]에 있고를 사용하여 [-5, 5]에 선형으로 매핑해야합니다 50 -> 0.

Photoshop과 비교 한 내용은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

최대 오류는 [0, 255] 범위에서 1보다 작습니다.

전체 코드는 내 StackExchange 신호 처리 Q688 GitHub 리포지토리 에서 사용할 수 있습니다 .


8

각 (컬러) 이미지는 RGB 구성 요소로 구성됩니다. RED 구성 요소에서만 모든 픽셀에 상수 값을 추가하거나 줄이면 RED 탭을 오른쪽으로 이동하는 것과 동등한 효과가 표시되며 RED 구성 요소를 상수로 줄이면 반대 효과가 나타납니다.

마찬가지로 설명대로 각 구성 요소를 고정 된 값으로 증감시킬 수 있습니다. 모든 RGB 구성 요소를 동일한 값으로 늘리거나 줄이면 밝기가 변경되는 것과 같습니다 (기본적으로 흰색 색상을 추가 / 제거합니다).

청록색, 파랑 색, 자홍색은 CMYK 색상 공간에서의 이러한 변환에 해당합니다. (그러나이 색상 공간의 파란색은 청록색과 노란색의 혼합에 해당합니다. 약간 까다 롭습니다. 변형은 모두 동일합니다.

마지막 요소 색조 : {색조 및 채도}는 동일한 작업에 해당하지만 여기서는 이미지가 먼저 HSV 모델에서 변환 된 다음 HUE 및 채도가 독립적으로 추가 / 빼기됩니다.

다이얼 마커와 해당 숫자의 정확한 관계는 알지 못하지만 실용적인 가치를 시도하여 알아낼 수 있습니다.


1
RGB 및 CMY가 있으므로 두 색상 공간 중 하나로 변환하기 만하면 원하는만큼 조정할 수 있습니다. 조정이 완료되면 다른 삼중 항을 업데이트하는 것을 잊지 마십시오.
Jonas

나는이 대답이 부정확하고 불완전하다고 생각합니다. 1. PS 구현에서 "파란색"슬라이더를 슬라이드해도 청록색 픽셀의 밝기에는 영향을 미치지 않으며 "시안 색"슬라이더를 슬라이드해도 파란색 픽셀의 밝기에는 영향을 미치지 않습니다. 이 답변에 설명 된이 접근법은 그렇게 작동하지 않습니다. 2. RGBCMY 구성 요소를 조작 한 후 어떻게 그레이 스케일로 변환하는지 설명하지 않습니다 (아마도 dotProduct(color, vec3(0.2989, 0.5870, 0.1140)작업 일 수 있음). 3. 파란색은 모든 색 공간에서 "청록색과 노란색의 혼합에 해당"하지 않습니다.
Stefan Monov

4. 색조 작업은 그레이 스케일로 변환 한 후에 수행되며 그 이전에는 수행되지 않습니다.
Stefan Monov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.