###前提・実現したいこと
javaで適当な色からHSV値取得してその色は赤,青,緑,それ以外の色の中から
どれかを判断するプログラムを作成しております。
java
1int C = ■; 2float[] hsv = new float[3]; 3Color.colorToHSV(C, hsv);
特定の色からHSV値を取得することはできたのですが、赤,青,緑それぞれのHSVの範囲を
考慮して判断することができません。また、H(色相)はほぼ固定の値で大丈夫だと思うのですが、
明るい色や暗い色の時を判断するときのS(彩度)とV(明度)の考慮の仕方がわかりません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
色の判断は人の主観によるところが大きく、また周囲との比較によるところもあり、一概に言えないと思います。
RGBとHSV・HSBの相互変換ツールのようなところで実験してみて、どの割合で判断すればいいか見てみるといいのではないでしょうか。
投稿2017/07/10 04:45
総合スコア20651
0
HSVを使う理由が見当たりません。
赤、青、緑にカテゴリ分けするのであれば、RGBの方がやりやすくないですか?
Hが0(赤)でも、SとVが255なら白になりますし、0なら黒になります。
その境界線を定義するのは感覚による所が大きくなります。
赤、青、緑にカテゴリ分けが目的ならば、まさに赤、青、緑が明確に数値化されたRGB以上に最適な色空間はないと思います。
SとVの閾値を設定して判別もできますが、おそらくRGBの各色の突出具合などを計算したほうが精度が高いと思います。
逆に、色相環を使いたい場合はRGBではなくHSVである必要があります。
やりたい事と、それがHSV色空間とマッチしているかを明確にした方がよいと思います。
投稿2017/07/10 03:38
編集2017/07/10 05:06総合スコア930
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/10 05:35
0
追記:pashango2さんの回答とコメントを拝見して「なるほど」と思ったので追記します。
HSVは以下のように白色光成分Wと一番強い光成分Vの比率がSaturationで白色光以外の2つの色だけが突出した部分hの2色の割合でHueが決まります。自分の回答は「目でみた色味の違い」ではなく「計算を単純化した大雑把な判定方法」でしかありません。
0.0................1.0 R |****|********** G |****| B |****|** <-W-><----h----> <------V------->
R,G,Bを直接用いて判定したとしても意味的に大雑把さに大した違いはなさそうに思います。「色空間上の特定の色と同じとみなせるか」といった判断ではどのような空間を使うにせよ基準の色との距離をなんらかの計算で求めて「近い」「遠い」を判断しますが、大雑把な計算ではなく「目で見る色味の違い」に配慮するなら、pashango2さんコメントにあるlab空間での色距離で判断するのが合理的に思えます。しかしそうまで厳密に考えるのではなく「大雑把」でよいならRGBやHSVで「適当に範囲を決めて」計算するというのでも「それはそれで一つの方法」だと思います。
「ほぼ赤」「ほぼ青」「ほぼ緑」「それ以外」のようなファジーな判定をしたいということかと思います。
S(彩度)とV(明度)の考慮の仕方がわかりません。
- 明度
色味を判定する前提なら明度はあまり関係しないと考えてよいと思います。もちろん0だと色相に意味がでないため「それ以外」という判断になると思います。「暗すぎて色をはっきり視認できない」ことを「ほぼ赤」とはいえないという考え方なら「明度がある一定値以上」という条件を付ければとりあえずよいと思います。
- 彩度
彩度が0.0ならグレースケールになるので色味はなく「それ以外」ということになるでしょう。0.0以外だったとしても「ピンク=白色光+赤」は「ほぼ赤」とはいえないという判断をするなら彩度が低すぎる場合は赤、青、緑のいずれかとは見做さないことになるでしょうから、明度と同様に「彩度がある一定値以上」という条件を付けることになると思います。
明度や彩度の閾値をどの程度に設定するかは応用(目的)次第と思います。
ライブラリを使用しない
ライブラリーを使用するかどうかの問題ではなく、目的に合った仕様をどう設定するかの問題だと思います。
投稿2017/07/10 03:52
編集2017/07/10 05:58総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。