Общее смешение цветов RGB сильно отличается от смешения цветов для картин,
это смешивание света вместо смешивания пигментов.
Например:
Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)
(должен быть синий + желтый = зеленый)
Есть ли какой-нибудь известный алгоритм смешивания цветов, который работает как смешивание реальных цветов?
Мой подход
Я уже пробовал следующее:
Преобразование обоих цветов в HSV и оттенков смешения (умноженное на коэффициент, рассчитанный по насыщенности),
и простое среднее для каналов насыщенности и значения. Затем я вычислил среднюю яркость из обоих
цвета и скорректировать полученный цвет, чтобы соответствовать этой яркости.
Это работало довольно хорошо, но смешивание оттенков иногда было неправильным, т.е. g.:
Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)
Я понял, что иногда мне нужно сместить значение оттенка на 360 ° (когда разница между
оттенки больше 180 °).
Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)
Но это смещение тоже было не очень хорошим, например ::1010 *
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). Эти коэффициенты
были взяты из фотошопа.
Может быть, если бы я использовал какую-то операцию, отличную от средней, она могла бы работать, но
Я не знаю что.
CMYK тоже не работал , результаты такие же, как в RGB или LAB.
Кажется, что ни тривиальная добавка, ни вычитающее смешение цветов в любом из этих цветовых пространств не дают естественных результатов.
Рабочие реализации
Krita & ndash; Малярный миксер
Редактор растровой графики Krita в какой-то момент работал с более реалистичным смешиванием цветов: http://commit -digest.org / Issues / 2007-08-12 / (Плагин микшера Painterly)
Говорят, что это первое общедоступное приложение, в котором реализована специальная технология с использованием уравнений Кубелки и Мунка, описывающих поведение пигментов.
Вот видео смешивания цветов Krita: https://www.youtube.com/watch?v=lyLPZDVdQiQ
Бумага от FiftyThree
Также есть статья о смешивании цветов в приложении Paper для iOS , разработанном FiftyThree . Они описывают, как они вводят новшества и экспериментируют в этой области, а также предлагают образцы смешивания синего и желтого, что приводит к зеленому. Тем не менее, фактический процесс или алгоритм на самом деле не описаны там.
Цитирование:
«В поисках хорошего алгоритма наложения мы сначала попытались интерполировать различные цветовые пространства: RGB, HSV и HSL, затем CieLAB и CieLUV. Результаты оказались неутешительными», - говорит Чен. «Мы знаем, что красный и желтый должны давать оранжевый, или что красный и синий должен становиться фиолетовым, но нет никакого способа получить эти цвета, независимо от того, какое цветовое пространство вы используете. Есть инженерная аксиома: сделайте самую простую вещь, которая может сработать. Ну, теперь мы попробовали самые простые подходы, и они не чувствовали себя даже отдаленно правыми. "
Кажется, что так же, как Krita, Paper реализует модель Kubelka-Munk:
[...] модель Кубелки-Мунка имела как минимум шесть значений для каждого цвета, включая значения отражения и поглощения для каждого из цветов RGB. «В то время как появление цвета на экране можно описать в трех измерениях, на самом деле смешивание цвета происходит в шестимерном пространстве», - объясняет Георг Петшниг, соучредитель и генеральный директор FiftyThree. Газета «Кубелка-Мунк» позволила команде перевести эстетическую задачу в математическую структуру. [...]
Из всей этой информации кажется, что реализация на основе модели Кубелки-Мунка могла бы стать шагом вперед и предложить результаты, которые намного ближе к реальности.
Несмотря на то, что это выглядит как сложный процесс, я еще не видел много хорошей информации о том, как реализовать что-то подобное.
Смежные вопросы
Эти вопросы были опубликованы после этого, все они касаются одного и того же.
Ни у кого из них нет ответа.
Другие ссылки и ресурсы