71

RGBカラーの一般的な混色は、絵画の混色とは大きく異なります。つまり、顔料の混色ではなく、光の混色です。

例えば:

Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)

(青+黄=緑である必要があります)

実際の色を混合するように機能する、混色の既知のアルゴリズムはありますか?


私のアプローチ

私はすでに以下を試しました:

両方の色をHSVに変換し、色相を混合し(彩度から計算された係数を掛けたもの)、彩度チャネルと値チャネルの単純な平均。次に、両方の色から平均輝度を計算し、この輝度に一致するように結果の色を調整しました。これは非常にうまく機能しましたが、色相の混合が間違っている場合がありました。例:

Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)

色相の値を360°シフトする必要がある場合があることがわかりました(色相の差が180°より大きい場合)。

Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)

しかし、このシフトもあまり良くありませんでした。例:

Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5°
Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°)
Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°

(色相179 +赤)と(色相181 +赤)は、2つの完全に異なる色になります。


次に、人間が色を知覚する方法に近くなるように設計されたCIEラボ色空間(Photoshopのように)を試しました。

対応する2つのチャネルごとに単純な平均を使用しましたが、結果は満足のいくものではありませんでした。たとえば、青(98、-16、93)と黄色(30、 68、-112)。これらの係数はPhotoshopから取得されました。

たぶん、平均とは違う操作をすればうまくいくかもしれませんが、どうなるかわかりません。


CMYKも機能しませんでした。結果は、RGBまたはLABの場合と同じです。


これらの色空間のいずれにおいても、些細な加法混色も減法混色も自然な結果をもたらさないようです。


実用的な実装

Krita –Painterlyミキサー

ラスターグラフィックエディターのKritaは、ある時点でより現実的な混色の実用的な実装を持っていました:http: //commit-digest.org/issues/2007-08-12/(Painterlyミキサープラグイン)

彼らは、それが顔料の振る舞いを説明するクベルカとムンクの方程式を使用して特別な技術を実装する最初の公開アプリケーションであると言います。

これがKritaの混色のビデオです:https ://www.youtube.com/watch?v = lyLPZDVdQiQ

FiftyThreeによる論文

FiftyThreeによって開発されたiOS用Paperアプリのカラーブレンディングに関する記事もあります。彼らは、彼らがその地域でどのように革新し実験するかを説明し、また、緑をもたらす青と黄色の混合のサンプルを提供します。ただし、実際のプロセスやアルゴリズムは実際には説明されていません。

引用:

「優れたブレンディングアルゴリズムを探すために、最初はRGB、HSV、HSL、次にCieLABとCieLUVなどのさまざまな色空間を補間しようとしました。結果は期待外れでした」とChen氏は言います。「赤と黄色はオレンジ、または赤と青は紫になるはずですが、使用する色空間に関係なく、これらの色に到達する方法はありません。工学的な公理があります。最も単純なことを実行してください。おそらくうまくいく可能性があります。まあ、私たちは今、可能な限り最も簡単なアプローチを試しましたが、彼らはリモートでさえ正しいとは感じませんでした。」

Kritaと同じように、PaperはKubelka-Munkモデルを実装しています。

[...] Kubelka-Munkモデルには、各RGB色の反射値と吸収値を含め、各色に少なくとも6つの値がありました。「画面上の色の外観は3次元で表現できますが、色の混合は実際には6次元空間で行われています」とFiftyThreeの共同創設者兼CEOであるGeorgPetschniggは説明します。Kubelka-Munkの論文により、チームは美的問題を数学的フレームワークに変換することができました。[...]

これらすべての情報から、Kubelka-Munkモデルに基づく実装は前進の道であり、現実にはるかに近い結果を提供する可能性があるようです。

複雑なプロセスのように見えますが、このようなものを実装する方法については、まだ多くの良い情報を見ていません。


関連する質問

これらの質問は、すべて同じものに関連するこの質問の後に投稿されました。

それらのどれも本当に答えを持っていません。


その他の関連リンクとリソース

4

7 に答える 7

29

「現実世界での色の混合」が実際にどのように機能するかについての正しい作業モデルがないため 正解は NOです。これは非常に複雑で条件付きであり、学校で習った単純な赤青黄とはまったく異なります (実際には、解決するにはすべての化学と多くの物理学と生物学が必要です)。

ただし、単純な答えは次のとおりです。はい、加算混合ではなく減算混合を使用します。

私たちが小学校で学んだ混色は、減法混色の一形態である顔料の組み合わせに基づいています (非常に単純化して)。つまり、一緒に追加する色が多いほど、各顔料が少し多くの光を差し引くため、暗くなります.

一方、ほとんどすべてのコンピューターのカラースキームは、光波の組み合わせに基づいているという点で (非常に単純化して)加算的であるため、各色が少しずつ光を追加するため、より明るくなります。

RGB+ スキームは、米国のほとんどの小学校で学んだ減法スキーム (RBY-) を加法的に補完するものです。ただし、それらは正確には一致せず、それらの間で変換するのは難しい場合があります (現在調査中...)


OK、RGB の加法的な組み合わせから減法的な組み合わせに切り替えたいだけの場合は、次の逆ベイザン型の式を使用して 2 つの色を組み合わせることができます。

NewColor.R = (Color1.R * Color2.R)/255
NewColor.G = (Color1.G * Color2.G)/255
NewColor.B = (Color1.B * Color2.B)/255

クロマチック極の違い (G から Y へ、次に G へ戻る) を調整するのは非常に困難です...


これにより、例の問題で黒が生成されることが指摘されており、技術的にはこれは真の減算システムでは正しいですが、より希釈/減算システムが必要な場合は、代わりにこれを試すことができます。

NewColor.R = 255 - SQRT(((255-Color1.R)^2 + (255-Color2.R)^2)/2)
NewColor.G = 255 - SQRT(((255-Color1.G)^2 + (255-Color2.G)^2)/2)
NewColor.B = 255 - SQRT(((255-Color1.B)^2 + (255-Color2.B)^2)/2)

これにより、黒ではなく濃い灰色が生成されます。しかし、黄色またはそれに近いものを得るには、配色の極配置の問題を修正する必要があります。

于 2009-08-29T13:47:35.213 に答える
5

色を組み合わせるには、次の2つの異なる可能性があります。

  1. アディティブミキシング(RGBなど)

  2. サブトラクティブミキシング(CMYKなど)

したがって、減法混色では、結果は期待どおりですが、青はなく、代わりにシアンがあります。

黄色+シアン=緑

一般に、減法混色は白から「取り除く」(フィルタリング)だけですが、加法混色は黒から加算されます。(減法混色の基本色は加法混色とは逆です:赤->シアン;緑->マゼンタ;青->黄色)

したがって、フィルターを適用する白い画面から始める場合:

min(白(255,255,255)、黄(255,255,0)、シアン(0,255,255))=緑(0,255,0)

于 2009-08-29T13:33:39.537 に答える
2

krita で現実的な方法で色を混合するコードがあります: https://projects.kde.org/projects/calligra/repository/revisions/master/show/krita/plugins/extensions/painterlyframework

光源ファイルを含むコードは GPLv2+ であることに注意してください。RGB から波長に変換し、合成を行い、元に戻すことができます。

于 2012-04-21T06:22:18.437 に答える
1

色相を組み合わせる際の問題は、2つの角度を足し合わせて2で割ることによってそれを行うことだと思います。お気づきのように、結果はしばしば意味がありません。角度を単位円上のデカルト座標に変換し、それらを平均して、結果の点の角度を見つける(大きさを無視する)方がよいと思います。

于 2011-12-21T18:40:37.880 に答える
1

RGB カラーの減法混色を行う 1 つの方法は、最初に RGB カラーを分光反射率曲線に変換することです。変換は非常に簡単です。変換が完了すると、反射率曲線の真の減算混合を実行し、結果を RGB に戻すことができます。別の同様の質問があります: stackoverflow.com/questions/10254022/で、このプロセスについて詳しく説明しています。

于 2015-04-30T12:03:26.093 に答える
0

この実装で、加法、従属、およびその他の混合アルゴリズムを確認してください。

完全に機能する(Javaで記述されている)ので、混合する必要のある色をテストして、ニーズに合うかどうかを確認できます。

他の回答が指摘しているように、サブストラクティブCMYKアルゴリズムでは、+黄色(正確にはシアン+黄色)は緑です。自分で見る

于 2013-01-30T04:45:45.143 に答える