Преобразование между цветовыми пространствами RGB и RYB - PullRequest
9 голосов
/ 09 февраля 2011

В настоящее время я пытаюсь преобразовать цвета между цветовым пространством RGB (красный, зеленый, синий) и цветовым пространством RYB (красный, желтый, синий) и обратно.

Основываясь на деталях в следующей статье, я могу преобразовать RYB в RGB с помощью трилинейной интерполяции - где параметрические веса (s, t, u) - это цвета RYB, а вершины кубаявляются трехмерными точками в пространстве RGB.

Краска, вдохновленная смешиванием цветов и композицией для визуализации - Госсет и Чен - Раздел 2.1 - Детали реализации

Мои трудности заключаются в обращении преобразованияпроцесс.

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

О передаче стиля рисования фотографическим изображениям с помощью внимания к цветовому контрасту - Сяоянь Чжан;Констебль, М .;Ин Хе;

Прежде чем я углублюсь в этом вопросе с помощью уравнений, кто-нибудь видел или решил это на таком языке, как Java / C / C ++ / C #?

Мой текущий подход состоит в том, чтобы взять прямые уравнения трилинейной интерполяции (RYB в RGB), расширить и переставить, чтобы обеспечить 3 одновременных уравнения для 3 неизвестных (параметрические весовые коэффициенты: s, t и u), а затем выработатькак найти корни, используя метод Ньютона-Рафсона.Я иду об этом в правильном направлении?

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

Большое спасибо за ваше время,

Бен

Ответы [ 3 ]

3 голосов
/ 19 февраля 2011

Мне удалось решить это в конце.

Возьмите уравнения для трилинейной интерполяции: wikipedia

Подставьте первые уравнения в последнее, разверните исобрать коэффициенты для: Xd, Yd, Zd, XdYd, XdZd, YdZd, ZdYdZd и константы.

Затем найдите частичное дифференцирование уравнения в каждом из 3-х измерений, каждое по Xd, Yd и Zd.Используйте эти новые уравнения для заполнения матрицы Якобиана (3x3), а затем используйте метод Ньютона для решения в программном обеспечении.

Метод Ньютона-Рафсона

2 голосов
/ 04 мая 2012

Вот категория на UIColor, которая делает то же самое, возвращая элементы между RGB, RYB и CMYK.Кроме того, вы можете смешивать любое количество цветов в соответствующем цветовом пространстве (они, конечно, по-разному смешиваются).

https://github.com/ddelruss/UIColor-Mixing

Наслаждайтесь,

Дэмиен

1 голос
/ 25 ноября 2013

Я нашел эту реализацию JavaScript преобразования RYB-> RGB на основе кубических сплайнов.Вот мой порт Lua (все значения лежат в интервале 0-1):

local ryb2rgb = function( R, Y, B ) 
  local R, Y, B = R*R*(3-R-R), Y*Y*(3-Y-Y), B*B*(3-B-B)
  return 1.0 + B * ( R * (0.337 + Y * -0.137) + (-0.837 + Y * -0.163) ),
    1.0 + B * ( -0.627 + Y * 0.287) + R * (-1.0 + Y * (0.5 + B * -0.693) - B * (-0.627) ),
    1.0 + B * (-0.4 + Y * 0.6) - Y + R * ( -1.0 + B * (0.9 + Y * -1.1) + Y )
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...