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

이미지에서 빨간색 / 자홍색 (ish)이 아닌 픽셀을 강조하는 응용 프로그램에 대해 C ++을 사용하여 그것을 재현해야합니다 (퍼센트와 같은 구성 가능한 공차로).이 리소스는 내가 기대하는 동작을 보여주었습니다.
여전히 그것을 재현 할 수는 없었지만 실마리를 찾았습니다.
각 픽셀은 최대 2 개의 컨트롤, 하나의 첨가제 (RGB)와 하나의 빼기 (CMY)로 정의됩니다.
누군가 포토샵에서 "흑백"조정 레이어 뒤의 알고리즘을 설명 할 수 있습니까?

이미지에서 빨간색 / 자홍색 (ish)이 아닌 픽셀을 강조하는 응용 프로그램에 대해 C ++을 사용하여 그것을 재현해야합니다 (퍼센트와 같은 구성 가능한 공차로).이 리소스는 내가 기대하는 동작을 보여주었습니다.
여전히 그것을 재현 할 수는 없었지만 실마리를 찾았습니다.
각 픽셀은 최대 2 개의 컨트롤, 하나의 첨가제 (RGB)와 하나의 빼기 (CMY)로 정의됩니다.
답변:
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 리포지토리 에서 사용할 수 있습니다 .
각 (컬러) 이미지는 RGB 구성 요소로 구성됩니다. RED 구성 요소에서만 모든 픽셀에 상수 값을 추가하거나 줄이면 RED 탭을 오른쪽으로 이동하는 것과 동등한 효과가 표시되며 RED 구성 요소를 상수로 줄이면 반대 효과가 나타납니다.
마찬가지로 설명대로 각 구성 요소를 고정 된 값으로 증감시킬 수 있습니다. 모든 RGB 구성 요소를 동일한 값으로 늘리거나 줄이면 밝기가 변경되는 것과 같습니다 (기본적으로 흰색 색상을 추가 / 제거합니다).
청록색, 파랑 색, 자홍색은 CMYK 색상 공간에서의 이러한 변환에 해당합니다. (그러나이 색상 공간의 파란색은 청록색과 노란색의 혼합에 해당합니다. 약간 까다 롭습니다. 변형은 모두 동일합니다.
마지막 요소 색조 : {색조 및 채도}는 동일한 작업에 해당하지만 여기서는 이미지가 먼저 HSV 모델에서 변환 된 다음 HUE 및 채도가 독립적으로 추가 / 빼기됩니다.
다이얼 마커와 해당 숫자의 정확한 관계는 알지 못하지만 실용적인 가치를 시도하여 알아낼 수 있습니다.
dotProduct(color, vec3(0.2989, 0.5870, 0.1140)작업 일 수 있음). 3. 파란색은 모든 색 공간에서 "청록색과 노란색의 혼합에 해당"하지 않습니다.