2012-01-26 14 views
2

光色と塗装の間にミスマッチがあるとしてYELLOW:物理学者は、三原色は、赤、緑及び青であることを言うだろうが、画家が赤色与えます、青色、黄色を原色とする。 実際に、水彩画で絵を描くときは、赤、緑、青の黄色を混ぜることはできません。オレンジを混ぜる代わりに、茶色にしかならないでしょう。紙の上だろう与えられた二つのRGBの色から、私は組み合わせ色のRGBコードを計算したいのですが、私は色は水彩画のようにブレンドしたいと思います。ここでは 計算RGBコード、赤、青、原色

は私がやろうとしているものです。

  • #1 FF0000 +#0000FF =#880088((FF + 00)/ 2 = 88、(00 + 00)/ 2 = 00、(00 + FF:私は通常、次のようになり、計算を理解できるように#1 FF8800((FF + FF)/ 2 = FF、(00 + FF)/ 2 = 88、=#1 FF0000 +#1 FFFF00
  • )それが必要として(紫色与える= 88)/ 2)ので、赤と青= 00(00 + 00)/ 2)ので、赤と黄色は(

)それが必要として、オレンジ色を与える青色と黄色とを混合する場合しかし、結果は灰色である。

  • # 0000FF +#FFFF00 =#888888((00 + FF)/ 2 = 88、(00 + FF)/ 2 = 88、(FF + 00)/ 2 = 88)=グレー

緑色になることを期待しています(#008800)、色を混ぜると灰色になることはありません。

だから私の質問は、どのように私は一種の主な色として黄色と緑色に交換することができますされ、そしてどのように私は、むしろ明るい色のものより塗料の法則に従う混合色を計算することができますか?

+1

「RGB値の加算カラーミキシングのアルゴリズム」(http://stackoverflow.com/questions/726549/algorithm-for-add-color-mixing-for-rgb-values)を見てきましたか? "[実際の色を混ぜるように機能するカラーミキシングのアルゴリズムはありますか?](http://stackoverflow.com/questions/1351442/is-there-an-algorithm-for-color-mixing-that-works-like-ミキシング - リアル - カラー) "? – kmote

答えて

1

赤、青、黄色の塗料を混ぜると、黒ではなく暗い茶色になります。それは、「赤、青、黄」が本当に正確な原色ではないからです。シアン、マゼンタ、イエローはCMYK(Kは黒)で動作する理由です。

それでは、あなたが実際に求めていることはany of these linksはあなたを助けることになる場合にはCMYK、RGBに色を変換する方法です。

+0

RGBは光の原色とみなされ、http://en.wikipedia.org/wiki/Additive_colorです。 CMYKは、http://en.wikipedia.org/wiki/Subtractive_colorである塗料の原色とみなされます。この違いを理解することで、モデル間で変換が必要な理由と時期を理解するのに役立ちます。 – dkamins

+0

染料の色は、一般に減法的な色の規則に従います(例えば、シアンとマゼンタを混合すると青が得られ、青と黄を混ぜるとかなり暗くなります)が、塗料の色が近くに来ません。黄色の塗料を緑色でない青色(シアンではない)と混ぜると、結果は一般的に緑色になります。ダイカラーが予測可能に相互作用する能力がある場合を除いて、減法混色の色の規則を遵守することは疑わしいかもしれません。 – supercat

0

シアン、マゼンタ、イエローは赤、黄、青は中世の規則です。

は、どうやらそれは簡単なスイッチではない、と私は数学の途中で眠りに落ちたが、ここでは一つの方法です。

RYB RGB Conversion

5

これを行います単純な物理モデルはありません、画家の色は光で非常に精巧な相互作用を有します。幸いにも私たちは物理的な世界をモデル化することに限定されないコンピュータを持っています - 私たちは彼らが望む任意のことをすることができます!

最初のステップは、必要な色相分布を持つカラーホイールを赤、黄、青で120度単位で作成することです。ウェブには多くの例があります。ここでは完全に飽和した色しか持たないため、完全なRGB色域を生成するために使用することができます。ホイールの色は完全に任意です。私は赤と黄の中間点が赤すぎるので、オレンジ(60°)を255,160,0に設定しました。240°の代わりに純粋な青(0,0,255)を240°の代わりに250°に移動しました。青はより良く見えます。あなたが一緒にあなたが不明瞭な茶色がかった灰色を得る赤、黄、青の等量を混ぜるとき、私の子供の頃の実験を思い出し

RYB hue color wheel

。私はあなたがカラーホイールの中央で見ることができる適切な色を選択しました。コードの中で私は愛称でそれを「泥」と呼んでいます。

赤、黄、青以上の色が必要な場合は、白と黒を混ぜる必要があります。たとえば、赤と白を混ぜてピンクにし、オレンジ(黄+赤)を黒と混ぜてブラウンにします。

変換は、絶対値ではなく比率で行われます。実際のペイントと同様に、赤色100部と黄色100部との間に、赤色1部と黄色1部の混合に違いはありません。

コードはPythonで提供されていますが、他の言語に変換するのは難しくありません。最も難しいのは、色相角を作るために赤、黄、青を追加することです。私はベクトル加算を使用し、atan2で角度に戻って変換します。ほとんどすべては線形補間(lerp)で行われます。

# elementary_colors.py 
from math import degrees, radians, atan2, sin, cos 

red = (255, 0, 0) 
orange = (255, 160, 0) 
yellow = (255, 255, 0) 
green = (0, 255, 0) 
cyan = (0, 255, 255) 
blue = (0, 0, 255) 
magenta = (255, 0, 255) 
white = (255, 255, 255) 
black = (0, 0, 0) 
mud = (94, 81, 74) 

colorwheel = [(0, red), (60, orange), (120, yellow), (180, green), 
       (215, cyan), (250, blue), (330, magenta), (360, red)] 

red_x, red_y = cos(radians(0)), sin(radians(0)) 
yellow_x, yellow_y = cos(radians(120)), sin(radians(120)) 
blue_x, blue_y = cos(radians(240)), sin(radians(240)) 

def lerp(left, right, left_part, total): 
    if total == 0: 
     return left 
    ratio = float(left_part)/total 
    return [l * ratio + r * (1.0 - ratio) for l,r in zip(left, right)] 

def hue_to_rgb(deg): 
    deg = deg % 360 
    previous_angle, previous_color = colorwheel[0] 
    for angle, color in colorwheel: 
     if deg <= angle: 
      return lerp(previous_color, color, angle - deg, angle - previous_angle) 
     previous_angle = angle 
     previous_color = color 

def int_rgb(rgb): 
    return tuple(int(c * 255.99/255) for c in rgb) 

def rybwk_to_rgb(r, y, b, w, k): 
    if r == 0 and y == 0 and b == 0: 
     rgb = white 
    else: 
     hue = degrees(atan2(r * red_y + y * yellow_y + b * blue_y, 
          r * red_x + y * yellow_x + b * blue_x)) 
     rgb = hue_to_rgb(hue) 
     rgb = lerp(mud, rgb, min(r, y, b), max(r, y, b)) 
    gray = lerp(white, black, w, w+k) 
    rgb = lerp(rgb, gray, r+y+b, r+y+b+w+k) 
    return int_rgb(rgb) 
1

私は私の理解では、あなたの目標は、(RGB色空間に記述されている)色を混合することであるなど、RGBまたはRYBまたはCMYか、離れ原色の概念から

をバックアップ示唆塗料がどのように混合するかをシミュレートする方法で、すなわち減算的に混合する。 RGBからCMYまたはCMYKへの変換は生産性にはなりません。なぜなら、CMY空間ではそれほど簡単ではない減法混色計算を扱わなければならないからです。

代わりに、RGBカラーを分光反射率曲線に変換することをお勧めします。変換はかなりシンプルで、いったん完了すると、反射カーブの真の減算混合を行い、その結果をRGBに戻すことができます。

もう1つ同様の質問があります。https://stackoverflow.com/questions/10254022/このプロセスについて詳しく説明します。

+0

リンクのみの回答は避けてください。たぶん答えのスニペットまたは2つを含むかもしれない – ntzm

+1

ありがとう@natzim、私は詳細で私の答えを改訂しました。 –

関連する問題