人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでの色の扱いについてです。
やりたいことは、Aの色(たとえば#B97640)とBの色(たとえば#660066)が「似た色かどうか」を判定したいです。

それぞれをhexdecなどでRGBに変換し、数値の差を求めたりしてみたのですが、なかなか似た色かどうかを判定できません。

最終的に作りたいのは、Color extract(http://www.phpclasses.org/browse/package/3370.html)
というclassを使って画像内で最も使用されている色を抽出し、任意に指定した色のカテゴリ(赤、青、黄などの基本色)へ自動的に振り分けるようなものです。

なにか良い方法をご存知でしたらお教えいただけると助かります。

●質問者: indiana
●カテゴリ:インターネット ウェブ制作
✍キーワード:Class COLOR PHP RGB カテゴリ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● zzz_1980
●27ポイント

RGB表色系(色空間)から均等色空間の実装のひとつである、CIELAB表色系へ変換の上、

CIE L*a*b*色空間上での距離(差分の二乗和)を求める。

sRGBからCIELABへの変換(javaでの実装例)

◎質問者からの返答

すみません。javaはまったくわからないもので・・・

PHPでの例をお教えいただけると助かります。


2 ● Quphondi
●27ポイント

RGBではなく、HSVで比較するのはいかがでしょうか。

HSV色空間

http://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93


RGBはコンピュータや電子回路にとって処理しやすい色空間ですが、人間の感覚とは異なります。なので「同じ色」という人間の感覚の比較をするには不向きな色空間です。


比してHSVは色相(Hue)、彩度(Saturation)、明度(Value)という人間の感覚に近い色空間です。そのうち、色相(Hue) が近い値であれば近似色です。


上記のWikipediaにも出ていますがRGBとHSVの変換は容易です。下記URLにRGBをHSVに変換するPHPコードがあるのでご参考になると思います。

PHPとMySQLを用いてカラー情報から画像を検索するプログラムを作成しました(ソース付き)

http://d.hatena.ne.jp/haru-komugi/20071114/1195024883

◎質問者からの返答

ありがとうございます。

なるほどHSVなら近似値が求めやすいんですね。

抽出をDBで行うというのは頭にありませんでした。

大変勉強になります。

【追記】

RGBでの比較やHSVでの比較でいろいろと試してみましたが、

やはり完全に似た色を抽出するのは難しいようで、全く似てない色も抽出されることがあります。

(たとえば「#404040(やや薄い黒)」は「#000000(黒)」より「#660066(紫)」に近いと判定される)

QuphondiさんのアプリケーションはRGBのみで比較されているようですが、うまく抽出されているようですね・・・

他に良いアイデアやサンプルをお持ちの方はいませんでしょうか。


3 ● tysmk
●26ポイント

>たとえば「#404040(やや薄い黒)」は「#000000(黒)」より「#660066(紫)」に近いと判定される

試してみましたがそのような結果にはならないようですが

// #404040

array(3) {

["h"]=>

int(0)

["s"]=>

int(0)

["v"]=>

string(2) "40"

}

// #000000

array(3) {

["h"]=>

int(0)

["s"]=>

int(0)

["v"]=>

string(2) "00"

}

// #660066

array(3) {

["h"]=>

int(300)

["s"]=>

int(1)

["v"]=>

string(2) "66"

}

◎質問者からの返答

検証ありがとうございます。

HSVで判定した場合はうまくいく色もあるのですが、RGBでないと「近い」と判断しにくい場合もあるようです。

このあたりは一長一短のようで・・・。

RGBとHSVを組み合わせれば、ある程度絞れるかもしれないと思い模索中です。

念のためもう少し回答を受け付けてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ