Альфа-смешение красного, синего и зеленого изображения для получения изображения, окрашенного в любое значение RGB? - PullRequest
1 голос
/ 08 января 2010

По сути, у меня есть контекст, в котором я не могу программно подкрасить изображение, хотя я могу изменить его альфа-значение.Проведя некоторые эксперименты, я обнаружил, что могу наложить красную, синюю и зеленую версию изображения с определенными значениями альфа, чтобы получить широкий диапазон цветов.Тем не менее, мне интересно, возможно ли достичь истинного представления RGB с помощью этого метода?Если да, то какова формула для преобразования значения RGB в различные альфа-значения для красного, синего и зеленого слоев.

Ответы [ 3 ]

3 голосов
/ 08 января 2010

Основное «уравнение» альфа-комбинации:

alpha * (R1,G1,B1) + (1-alpha) * (R2,G2,B2)

Когда у вас есть три слоя с альфа-каналом, вы фактически комбинируете 4 слоя (четвертый - черный), поэтому окончательный цвет:

alpha1 * (R1,G1,B1) + (1-alpha1) * ( 
   alpha2 * (R2,G2,B2) + (1-alpha2) * (
      alpha3 * (R3,G3,B3) + (1-alpha2) * (0,0,0) ) )

При условии, что у вас есть одно и то же изображение на каждом слое, а layer1 - красный канал (G1 = B1 = 0), layer2 - зеленый и layer3 - синий, вы получаете:

(alpha1 * R, (1-alpha1)*alpha2 * G, (1-alpha1)*(1-alpha2)*alpha3 * B)

Для белого пикселя вы можете сделать любой возможный цвет. Для черного пикселя вы не можете сделать ничего, кроме черного. Для любого другого пикселя вы ограничены значениями R, G и B.

Скажем, вы хотите достичь (Rd, Gd, Bd) в пикселе, где текущий цвет (R, G, B), тогда вам нужно будет выбрать:

alpha1 = Rd/R
alpha2 = Gd/(G*(1-alpha1))
alpha3 = Bd/(B*(1-alpha1)*(1-alpha2))

Проблема в том, что альфа обычно может быть только между 0 и 1. Так, например, если Rd> R, вы ничего не можете сделать.

Вы можете добиться большего успеха, если сможете управлять функцией наложения (например, в Photoshop).

0 голосов
/ 09 января 2010

Если вы хотите создать 3 слоя, которые смешиваются вместе в дополнение к исходному изображению, это вполне возможно. Вот ссылка на скрипт Python, который вызывает функции в Paint Shop Pro для выполнения сложных задач.

http://pixelnook.home.comcast.net/~pixelnook/SplitToRGB.htm

Если вам нужно больше подробностей, оставьте комментарий, и я постараюсь заполнить его позже.

0 голосов
/ 08 января 2010

Не думаю, что это возможно, если я вас правильно понимаю.

Если для определенного пикселя значение красного цвета вашего изображения составляет, скажем, 0,5, вы можете объединить его с альфа-каналом в (типичном) диапазоне [0,1], чтобы получить любое значение вплоть до 0,5 включительно, но вы не может идти выше, чтобы получить, например, 0,6 или около того в качестве выходного значения.

...