Algorithme pour trouver la couleur entre deux autres dans un espace colorimétrique peint
Lors de l'utilisation de peinture, le mélange de différentes teintes crée des variations qui diffèrent du numérique domaine des modèles de couleurs RVB. Dans le monde des peintures physiques, les couleurs sont absorbées ou réfléchies plutôt qu'émises, conduisant à des résultats de mélange uniques.
Concept d'absorption
L'absorption de la peinture joue un rôle crucial dans le processus de mélange. La peinture « bleue », par exemple, absorbe les longueurs d’onde rouges et vertes, ce qui ne reflète que la lumière bleue. De même, la peinture jaune absorbe les longueurs d'onde bleues, réfléchissant uniquement la lumière jaune.
Les défis du mélange de couleurs de peinture
En théorie, la combinaison de peintures jaunes et bleues devrait produire du noir ou du gris boueux. . Cependant, des limitations pratiques, telles que les impuretés présentes dans la peinture, entraînent souvent une teinte vert boueux. Créer une couleur verte satisfaisante en mélangeant le bleu et le jaune est un défi courant en peinture.
Interpolation des couleurs dans l'espace colorimétrique HLS
Bien que l'émulation physique du mélange de peinture puisse ne pas être réalisable, il est possible d'interpoler les couleurs pour obtenir les teintes souhaitées en utilisant l'espace colorimétrique HSL (Teinte, Saturation, Luminosité). HSL représente les couleurs en termes de propriétés innées, ce qui facilite leur manipulation et leur mélange.
Implémentation Python
Le code Python suivant illustre la moyenne des couleurs dans l'espace colorimétrique HLS :
from colorsys import rgb_to_hls, hls_to_rgb from math import sin, cos, atan2, pi def average_colors(rgb1, rgb2): # Convert RGB values to HLS h1, l1, s1 = rgb_to_hls(rgb1[0]/255., rgb1[1]/255., rgb1[2]/255.) h2, l2, s2 = rgb_to_hls(rgb2[0]/255., rgb2[1]/255., rgb2[2]/255.) # Calculate average saturation and lightness s = 0.5 * (s1 + s2) l = 0.5 * (l1 + l2) # Calculate average hue (considering hue wrapping) x = cos(2*pi*h1) + cos(2*pi*h2) y = sin(2*pi*h1) + sin(2*pi*h2) if x != 0.0 or y != 0.0: h = atan2(y, x) / (2*pi) else: h = 0.0 s = 0.0 # Convert HLS back to RGB r, g, b = hls_to_rgb(h, l, s) return (int(r*255.), int(g*255.), int(b*255.))
Exemple Utilisation
>>> average_colors((255,255,0),(0,0,255)) (0, 255, 111) >>> average_colors((255,255,0),(0,255,255)) (0, 255, 0)
Remarque : Cette implémentation ne reproduit pas le processus de mélange de peinture mais fournit une interpolation de couleurs agréable à percevoir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!