2011-06-19 5 views
6

私には空の画像と雲の画像とない画像があります。RGBカラーは基本的に青色であると私はどのように伝えることができますか? in c#

一部は晴れの青い空ですが、一部は部分的に曇り、一部は白く灰色の曇りがあります。

特定のRGB値が多少青色であると判断するにはどうすればよいですか?

青の色合いは「青」 - 薄青、濃紺、紺、空色 - これらはすべて青です。

イメージの色を16に減らしたいとします。次に、ホワイト、シルバー、グレー、ブルー、およびその他のすべてのヒストグラムを作成します。

青や銀、白や灰色などのRGB値をどのように知ることができますか?

+4

C#の色を比較するのは簡単です。 「基本的に青であるもの」を決定することは難しい部分です。 – Jim

答えて

0

16色それぞれのRGB値を持つテーブルを作成し、各ピクセルRGB値をテーブルの各値と比較することもできます。 比較するには、R1-R2 G1-G2 B1-B2のような減算を行い、その差を合計し、それほど差がない色に変換します。

関連質問:赤と緑の値が同じに近い、および青色値は、赤色と緑色の値よりも大きい場合、色は青の範囲であることを行っている場合Compare RGB colors in c#

+0

明らかに色を比較する標準的な方法があります。それはデルタEと呼ばれ、この質問をチェックします。http://stackoverflow.com/questions/3968179/compare-rgb-colors-in-c – zad

+0

ありがとう、私はデルタEと私が見つけたものを参照してください - 歓声 – Chris

2

。 3つの値がほぼ同じ場合は、グレーのバージョンがあります。最大値に近ければ、色は白く見えます。それよりもはるかに正確であることは不可能です。色の選択を見て、どの領域があなたに "青く見えますか"を理解する必要があります。

+0

ありがとうございます - 私は画像を見ていて、今あなたが話している傾向を見ることができます。あなたが私に返事を取った時を感謝します。歓声 – Chris

+0

"不可能"?別の色空間を使用します。つまり、RGBの代わりに色の色相を使用します。不可能から遠い。 –

+0

@Ed S.:色合いを見れば、物事は楽になりますが、それはOPにとっては良い提案です(そのための+1)が、色相の範囲はOPにとって「基本的に青い」を表していますか?質問がより正確ではないので、単に「正確にすることは不可能」と言いました。あなたが与えた答えは、私が行ったよりも、問題を解決することに本当に近いことはありません。具体的には、OPは、「青」と「白」、「銀」、「灰色」と区別するために、彩度と価値が作用するようにしています。あなたがRGBかHSVかを問わず、あなたはまだ3つのすべてのコンポーネントを見ています。 – Caleb

13

RGBは、この種の作業に最適な色空間ではありません。 HSV (also known as HSB)などの色空間は、特定の色に対してより直感的で説明的なモデルを提供します。

したがって、指定した色の色相を使用することができます。 System.Drawing.Color構造体を扱う場合は、GetHue()メソッドを使用して、色相値を度で返します。以下のような色相ホイールがあると、あなたが受け入れる青の値の上限と下限の閾値(度)を定義することができます。

Hue Wheel

画像処理や一般的な色の理論は、些細な被験者から遠く離れています。私はあなたの要件を満たす最も簡単な方法を見つけることをお勧めします。これはあなたにとっては十分かもしれないし、そうでないかもしれない。そうでなければ、多分私のために少し質問を絞り込むことができます。

また、実際に黒、白、または灰色を処理していないことを確認するために、明るさと彩度のコンポーネントにはまだしきい値が必要であることがわかります。

+0

私はPhotoshopのコピーを持っており、c#Color.GetBrightness()とColor.GetSaturationと比較して、Photoshop HSBカラーピッカーダイアログとは異なる値を得ています。私はPhotoshopからc#HSBへの変換ルーチンを見つける必要があると思います – Chris

関連する問題