Общее смешивание цветов RGB сильно отличается от смешивания цветов для картин, это смешивание света вместо смешивания пигментов.
Например:
Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)
(Это должен быть синий + желтый = зеленый)
Есть ли какой-либо известный алгоритм смешивания цветов, который работает как смешивание реальных цветов?
Мой подход
Я уже пробовал следующее:
Преобразование обоих цветов в HSV и смешивание оттенков (умноженное на коэффициент, вычисленный из насыщения) и простое среднее для каналов насыщения и значений. Затем я вычислил среднюю яркость от обоих цвета и отрегулировал полученный цвет в соответствии с этой яркостью. Это работало довольно хорошо, но смешивание оттенков иногда было неправильным, например. г:.
Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)
Я выяснил, что иногда мне нужно сдвинуть значение оттенка на 360 ° (когда разница между оттенки больше 180 °).
Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)
Но это смещение было не очень хорошим, например:
Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5°
Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°)
Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°
(Оттенок 179 + Красный) и (Оттенок 181 + Красный) приводит к двум совершенно другим цветам.
Затем Я попробовал цветовое пространство CIE Lab (как в Photoshop), которое предназначено для того, чтобы быть ближе к тому, как люди воспринимают цвета.
Я использовал простое среднее для каждого соответствующего двух каналов, но результаты не удовлетворяли, например, я получил розовый (64, 26, -9,5) из синего (98, -16, 93) и желтый (30, 68, -112). Эти коэффициенты были взяты из Photoshop.
Возможно, если бы я использовал какую-то другую операцию, чем среднюю, она могла бы работать, но Я не знаю, что.
CMYK не работает тоже, результаты похожи на RGB или LAB.
Кажется, что ни тривиальное добавочное, ни субтрактивное смешивание цветов в любом из этих цветовых пространств не дает естественных результатов.
Рабочие реализации
Krita – Малярный смеситель
Растровый графический редактор В какой-то момент в Krita была реализована более реалистичная цветопередача: http://commit-digest.org/issues/2007-08-12/ (плагин для плавного микшера)
Говорят, что это первое публичное приложение, которое реализует специальную технологию с использованием уравнений Кубельки и Мунк, описывающих поведение пигментов.
Здесь видео с смешиванием цветов Krita: https://www.youtube.com/watch?v=lyLPZDVdQiQ
Бумага FiftyThree
Там также статья о смешении цветов в приложении "Бумага для iOS" , разработанном FiftyThree. Они описывают, как они внедряют инновации и экспериментируют в этом районе, а также предлагают образцы смешивания синего и желтого цветов, что приводит к зеленому. Однако фактический процесс или алгоритм здесь не описаны.
Цитирование:
"В поисках хорошего алгоритма смешивания мы сначала попытались интерполировать различные цветовые пространства: RGB, HSV и HSL, затем CieLAB и CieLUV. Результаты были разочаровывающими", - говорит Чэнь. "Мы знаем, что красный и желтый должны обладать оранжевым или красный и синий должны быть фиолетовыми, но нет никакого способа достичь этих цветов независимо от того, какое цветовое пространство вы используете. Там есть техническая аксиома: сделайте простейшую вещь, которая возможно, сработает. Ну, теперь мы попробовали самые простые подходы, и они не чувствовали себя даже отдаленно".
Кажется, что так же, как Крита, Бумага реализует модель Кубельки-Мунк:
[...] модель Kubelka-Munk имела по меньшей мере шесть значений для каждого цвета, включая значения отражения и поглощения для каждого из цветов RGB. "В то время как появление цвета на экране может быть описано в трех измерениях, смешивание цвета происходит фактически в шестимерном пространстве", - объясняет Георг Петернигг, соучредитель и исполнительный директор FiftyThree. Документ Кубельки-Мунк позволил команде перевести эстетическую проблему в математическую основу. [...]
Из всей этой информации кажется, что реализация , основанная на модели Kubelka-Munk, может быть способом продвижения вперед и предложить результаты, которые намного ближе к реальности.
Несмотря на то, что это выглядит сложным процессом, я еще не видел много хорошей информации о том, как реализовать что-то вроде этого.
Связанные вопросы
Эти вопросы были опубликованы после того, как все было связано с одним и тем же.
Ни один из них не имеет ответа.
- Расчет смешанного цвета в RGB
- Алгоритм поиска цвета между двумя другими - в цветовом пространстве окрашенных цветов
- Внедрение Kubelka-Munk как Krita для смешивания цветов, таких как краска
Другие связанные ссылки и ресурсы
- Поиск Kubelka-Munk в Twitter
- Смешивание красок (!! Con 2016) от Diana Liao
- Paint Inspired Color Mixing and Compositing for Visualization (Н. Госсетт, Б. Чен)