ペイントされた色空間内の他の 2 つの色の間で色を見つけるためのアルゴリズム
ペイントを使用する場合、異なる色相を混合すると、デジタルとは異なるバリエーションが作成されます。 RGB カラーモデルの領域。物理的なペイントの世界では、色は放出されるのではなく吸収または反射され、独特の混合結果が得られます。
吸収の概念
ペイントの吸収は、混合工程。たとえば、「青」の塗料は赤と緑の波長を吸収し、結果として青い光だけを反射します。同様に、黄色の絵の具は青色の波長を吸収し、黄色の光だけを反射します。
絵の具の色の混合における課題
理論的には、黄色と青の絵の具を組み合わせると黒または濁った灰色が生成されるはずです。 。ただし、塗料中の不純物などの実際的な制限により、濁った緑色の色合いになることがよくあります。青と黄色を混合して満足のいく緑の色を作成することは、ペイントにおける一般的な課題です。
HLS カラースペースでのカラー補間
ペイントの混合を物理的にエミュレートすることは実現できない場合がありますが、 HSL (色相、彩度、明度) 色空間を使用して、色を補間して目的の色相を実現することができます。 HSL は色をその固有のプロパティの観点から表現するため、操作やブレンドが容易になります。
Python の実装
次の Python コードは、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.))
例使用法
>>> average_colors((255,255,0),(0,0,255)) (0, 255, 111) >>> average_colors((255,255,0),(0,255,255)) (0, 255, 0)
注: この実装はペイント混合プロセスを再現しませんが、知覚的に心地よい色の補間を提供します。
以上が与えられた 2 つのペイント色の間の中間色をアルゴリズム的に見つけるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。