Альфа -смешивание красного, синего и зеленого изображения, чтобы создать изображение, тонированное до какого -либо значения RGB?

StackOverflow https://stackoverflow.com/questions/2030471

Вопрос

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

Это было полезно?

Решение

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

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

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

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

При условии, что у вас есть одно и то же изображение на каждом слое, а слой1 - это красный канал (g1 = b1 = 0), а слой2 зеленый, а слой3 - синий, вы получаете:

(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,5, вы можете объединить это с альфа в (типичном) диапазоне [0,1], чтобы сформировать любое значение до 0,5, но вы не можете Поднимитесь выше, чтобы получить, например, 0,6 или около того в качестве выходного значения.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top