Может кто-нибудь объяснить алгоритм, стоящий за корректирующим слоем «Черно-белый» в фотошопе?
Я должен воспроизвести его, используя C ++ для приложения, которое выделяет не красные / пурпурные (иш) пиксели изображения (с настраиваемым допуском в процентах), и этот ресурс показал ожидаемое поведение.
Все еще не мог воспроизвести это, но я нашел подсказку:
Каждый пиксель определяется максимум двумя элементами управления, одним аддитивным (RGB) и одним вычитающим (CMY).
Ответы:
Я прекрасно воспроизвел алгоритм в MATLAB (на основании ответа @ Ivan Kuckir ):
Обратите внимание, что преобразование из
vPhotoshopValues
вvCoeffValues
должно быть сделано какvCoeffValues = (vPhotoshopValues - 50) ./ 50
.Поскольку значения Photoshop находятся в [-200, 300] и должны быть линейно отображены в [-5, 5] с
50 -> 0
.Вот сравнение с фотошопом:
Максимальная ошибка меньше 1 в диапазоне [0, 255].
Полный код доступен в моем хранилище обработки сигналов StackExchange Q688 GitHub .
источник
Каждое (цветное) изображение состоит из компонентов RGB. Когда вы добавите (или уменьшите) постоянное значение ко всем пикселям только в КРАСНЫХ компонентах, вы увидите эффект, эквивалентный перемещению КРАСНОЙ вкладки вправо, и аналогичным образом уменьшение КРАСНОГО компонента на константу будет иметь обратный эффект.
Точно так же вы можете увеличивать / уменьшать каждый компонент на фиксированное значение, как описано. Если вы увеличите / уменьшите ВСЕ компоненты RGB на одно и то же значение, это будет эквивалентно изменению яркости (в основном вы добавляете / удаляете БЕЛЫЙ цвет).
Cyan, Blue, Magenta - соответствует такому преобразованию в цветовом пространстве CMYK. (Но я полагаю, что синий цвет в этом цветовом пространстве соответствует сочетанию голубого и желтого. Это немного сложнее. Трансформация практически одинакова для всех.
Последний элемент Tint: {Hue and Saturation} соответствует тем же операциям, но здесь изображения сначала преобразуются в модели HSV, а затем HUE и Saturation добавляются / вычитаются независимо.
Я не знаю точных отношений маркеров циферблата с соответствующими номерами, но что вы можете выяснить, попробовав практические значения.
источник
dotProduct(color, vec3(0.2989, 0.5870, 0.1140)
операция). 3. Синий не "соответствует смеси голубого и желтого" в любом цветовом пространстве.