web-dev-qa-db-ja.com

RGBを使用してピクセルの波長を取得するにはどうすればよいですか?

ピクセルの色を分類するプロジェクトがあります。それが赤、紫、オレンジ、または単にカラーホイールの任意の色であるかどうか。ピクセルには1600万以上の色の組み合わせがあることを私は知っています。しかし、色の波長を使用してプロジェクトを行うことが可能であると述べているWebページを読むことができました。 RGB値を使用して波長を計算する式を教えてください。ありがとう!

17
Amiel

純粋な色には波長があります(単一色のLEDには特定の波長があります)。赤、緑、青にはそれぞれ波長の範囲があります。ただし、RGBカラーを作成するときは、これらの波長を合計します。これにより、新しい波長は得られません。目は、1つの波長で構成される黄色と、赤と緑を追加する黄色を区別できません(目の動作だけです)。色彩理論を読むことをお勧めします

http://en.wikipedia.org/wiki/RGB_color_model

9
Matthias Wandel

モニターのRGBは、赤、緑、青の3つの独立したレベルにマッピングされるため、(ほとんどの場合)1つの知覚色の3つの異なる波長が存在します。

[〜#〜] but [〜#〜] RGBカラー値を同等のHSLに変換できる場合、波長に関してはH部分(色相)が支配的な色ですif彩度を無視する準備ができています(白さとして考えてください)。

これに基づいて、次のことができます概算 H値に基づく色の主波長。

赤色光の波長は約630〜740 nm、紫の波長は約380〜450nmです。

6
Pete Stensønes

波長の計算は少し注意が必要で、ゴブリンが述べたように、常に可能であるとは限りません(別の例は、等量の赤と青の光を混合して得られる色です。その紫には単一の波長がありません)。

ただし、名前で色を識別するだけの場合は、HSVモデルを使用することをお勧めします。 HSVは、色相(色相環の周りの色)、彩度(黒/灰色/白の色合いではなく、色の量)、および値(ピクセルの明るさまたは暗さ)です。この場合、色相はおそらくまさにあなたが望むものです。

.NET言語を使用している場合は、幸運です。 Color.GetHueメソッド を参照してください。これがすべての作業を行います。

それ以外の場合、詳細については ウィキペディアのHSV を参照してください。

本質的に、R、G、Bが0.0から1.0の範囲のフロートとして(たとえば0から255のintではなく)ある場合、次のようになります。

M = max(R, G, B)
m = min(R, G, B)
C = M-m

if M = m then H' is undefined (The pixel is some shade of grey)
if M = R then H' = (G-B)/C mod 6
if M = G then H' = (B-R)/C + 2
if M = B then H' = (R-G)/C + 4

RGBをHSVに変換するときは、H 'に60度を掛けますが、目的にはH'で十分です。 0から6(ほぼ)の範囲のフロートになります。 0は赤です(6も同様)。 1は黄色で、0から1までの値は赤と黄色の間で網掛けされています。したがって、0.5はオレンジになります。重要なランドマークは次のとおりです。

0 - Red
1 - Yellow
2 - Green
3 - Cyan
4 - Blue
5 - Purple
6 - Red (again)

お役に立てば幸いです。

5
Gavin Lock

http://en.wikipedia.org/wiki/Visible_spectrum

可能です。上記を参照。灰色の背景は明らかにそれを容易にします。あなたは自分でそのようなものを手に入れるかもしれません、そしてそれをさらに改善するかもしれません。しかし、それを正確に行うには、多額の費用がかかります。 Uには、比色分析の専門家、キャリブレーションされたモニター、および表示環境が必要です(ピクセルの主波長とは、キャリブレーションされた表示環境のキャリブレーションされたモニターで近似される単色波長を意味するため)。これはすべて数千ドルになります。ウィキペディアに示されている上記のリンクで行われた作業は、それほど正確ではないようですが、おそらくあなたが望むものです。

0
bob