Alpha mélangeant une image rouge, bleu et vert pour produire une image teintée à une valeur RVB?

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

Question

Fondamentalement, j'ai un contexte où je ne peux pas teinter programatiquement une image, bien que je puisse changer sa valeur alpha. Avec une certaine expérimentation, j'ai trouvé que je peux superposer une version rouge, bleue et verte de l'image, avec des valeurs alpha spécifiques, pour produire une large gamme de couleurs. Cependant, je me demande s'il est possible d'atteindre une véritable représentation RVB via cette méthode? Si c'est le cas, quelle est la formule pour convertir une valeur RVB en différentes valeurs alpha pour les couches rouges, bleues et vertes.

Était-ce utile?

La solution

L'équation de base de la combinaison alpha est:

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

Lorsque vous avez trois couches avec Alpha, vous combinez en fait 4 couches (la 4ème est noire), donc la couleur finale est:

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

À condition que vous ayez la même image sur chaque couche et Layer1 est le canal rouge (g1 = b1 = 0) et la couche2 est verte et la couche3 est bleue que vous obtenez:

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

Pour un pixel blanc, vous pouvez faire n'importe quelle couleur possible. Pour un pixel noir, vous ne pouvez rien faire d'autre que du noir. Pour tout autre pixel, vous êtes limité par les valeurs de R, G et B.

Supposons que vous vouliez réaliser (RD, GD, BD) à un pixel où la couleur actuelle est (R, G, B) alors vous devriez choisir:

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

Le problème est que l'alpha ne peut généralement pas être entre 0 et 1. Ainsi, par exemple, si rd> r, vous ne pouvez rien faire.

Vous pouvez faire mieux si vous pouvez contrôler la fonction de mélange (par exemple, dans Photoshop).

Autres conseils

Je ne pense pas que ce soit possible, si je vous comprends bien.

Si, pour un certain pixel, la valeur rouge de votre image est, par exemple, 0,5, vous pouvez combiner cela avec un alpha dans la gamme (typique) [0,1] pour former n'importe quelle valeur jusqu'à 0,5, mais vous ne pouvez pas Allez au-dessus, pour obtenir par exemple 0,6 environ comme valeur de sortie.

Si vous cherchez à créer 3 couches qui se sont mélangées ensemble à l'image d'origine, c'est tout à fait possible. Voici un lien vers un script Python qui appelle des fonctions dans Paint Shop Pro pour faire les parties dures.

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

Si vous avez besoin de plus de détails que cela, laissez un commentaire et j'essaierai de le remplir plus tard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top