Смешивание двух цветовых векторов RGB для получения результатов

Я пытаюсь смешать два исходных вектора RGB, чтобы создать третий "результирующий вектор", который представляет собой интуитивное сочетание первых двух.

В идеале я мог бы эмулировать "реальные характеристики смешивания краски", но для простоты я пытаюсь найти метод, в котором результат выглядит интуитивно похожим на то, что вы получили бы от объединения двух исходных rgb.

минимально, эти характеристики:
КРАСНЫЙ + ЧЕРНЫЙ = ТЕМНЫЙ КРАСНЫЙ
RED + WHITE = LIGHT RED

оптимально, также с реальными характеристиками краски:
RED + BLUE = PURPLE
RED + YELLOW = ORANGE
(и т.д.)

-

В настоящее время я делаю это "ленивым путем", добавляя два исходных вектора RGB/255, а затем нормализуя (и умножая на 255). Итак, используя это: [Red = < 1,0,0 > * 255] + [Blue = < 0,0,1 > * 255] дает Magenta = < 1,0,1 > /sqrt (2) * 255, хотя другие цвета менее интуитивные или даже видимые... Мне нужен лучший метод! Пожалуйста, помогите: -)

Ответы

Ответ 1

Это то, что вы предложили так же, как средневзвешенный?

Average R = w1*R1 + w2*R2 + w3*R3 + ... + wn*Rn

Average G = w1*G1 + w2*G2 + w3*G3 + ... + wn*Gn

Average B = w1*B1 + w2*B2 + w3*B3 + ... + wn*Bn

w - весовые доли, а их сумма равна 1.

R1 является красной составляющей первого цвета для смешивания, например.

Итак, если вы хотите равномерно смешивать два цвета, это будет:

Average R = 0.5*R1 + 0.5*R2

Average G = 0.5*G1 + 0.5*G2

Average B = 0.5*B1 + 0.5*B2

Что касается сопоставления полученного цвета с именованным цветом ( "темно-красный" ), возможно, просто выполните таблицу поиска и выберите ближайший из них?

Ответ 2

Проблема в том, что вы пытаетесь связать две разные цветовые теории. RGB - аддитивная теория цвета (цветной свет испускается из источника). В этом случае больше спектра, который вы добавляете в микс, тем ближе к белому.

Для "смешивания красок" вам нужно эмулировать субтрактивную теорию цвета, которая определяет способ смешения отраженных цветов. (т.е. отраженный свет, такой как краски, различные поверхности и т.д.). Здесь обзор.

JavaScript на на этой странице - это ключ к тому, как вы можете продолжить преобразование RGB в CMYK.

Ответ 3

Смешивание цветов RGB для имитации субтрактивной цветовой смеси (то есть смеси, подобной краске) ​​может быть выполнено путем преобразования значений RGB в кривые спектрального отражения, а затем выполнения смеси там. Этот вопрос очень похож на другой, fooobar.com/questions/111217/..., где решение обсуждается более подробно.

Ответ 4

Я думаю, вы действительно должны определить, что такое "+" в вашей цветовой гамме.

В соответствии с вашими требованиями я перевел их в оцененные шестнадцатеричные цветовые коды, (представление rgb можно легко вывести).

RED     + BLACK   = DARK RED  
#ff0000 + #000000 = #800000
RED     + WHITE   = LIGHT RED
#ff0000 + #ffffff = #ff8080

optimally, also with real paint characteristics:
RED     + BLUE    = PURPLE
#ff0000 + #0000ff = #800080
RED     + YELLOW  = ORANGE
#ff0000 + #ffff00 = #ff8000

Я не вижу определенного шаблона, в котором вы можете разработать некоторые формулы для достижения этого.

Методы Джона и Нилса, вероятно, приблизится к цветам, но, вероятно, не к точным значениям. Я предлагаю вам попробовать.

EDIT:
Обновлены неверные цветовые коды. Ну, теперь это стало намного больше.