RGB表現から色の光周波数を取得することは可能ですか? 反対のプロセスを見つけました [1] が、この方法で可能かどうかはわかりません。
4 に答える
私の知る限り、複数の波長を組み合わせて同じ色を与えることができるため、直接的な答えはありませんよね? したがって、純粋な色にマッピングされる波長があり、それらの組み合わせにより、他の多くの同じ色が得られます。そして、同じ色を与えることができるいくつかの組み合わせがあります。これは干渉によるものです。したがって、基本的には1対多のマッピングを求めています。
あなたの質問に答えるには:決まった公式はありません。逆の式は範囲を与えます。それはそれが得ることができる最高のものです。
多分Javascript - Sort rgb valuesが役に立ちます。
しかし問題は、波長スペクトルが次のように見えることです
また、RGB を HSL に変換できますが、HSL スペクトルは次のようになります。
そして、波長スペクトルがピンクなどのすべての色を持っているわけではないため、問題があります。
ピンクは自然界に存在せず、光のスペクトルの両極端の色の組み合わせだからだと思います。しかし、私たちはRGBでそれを持っています.
リンクが参照している C プログラムを見ると、81 の異なる周波数に対して color_match 値があります。これらは、リンクの図 3 の端にあるラベル付きの周波数のようです。したがって、RGB 情報が 1 つの周波数の純粋な光であることがわかっている場合は、これらの値のそれぞれについて RGB 情報を計算し、どれが最もよく一致するかを確認できます。おそらく、明るさが一致するようにいずれかをスケーリングした後です。
もちろん、問題は、RGB 値が異なる周波数の光の混合物からのものである可能性があることです。この場合、図 3 の内側からのポイントが得られます。外側の値のいずれにも近づきません (したがって、少なくとも問題があることがわかります)。それを生成した可能性のある周波数の多数の可能なセットになります。これらは、ダイアグラムの外側にあるポイントの加重平均に対応し、平均化して内側にポイントを生成します。
- RGB から XYZ への変換
- XYZ から Yxy への変換
- xy の主波長を計算する
- 頻度を計算する