7M4MONとある色と、とある色が似ているか判別する場合、2色の色空間上の距離を計算する必要があります。L*a*b*」の3種類が代表的らしいです。1677216色・ピクセル)の画像を、パレットを固定して減色し、パフォーマンスを比較してみました。(画像クリックで原寸となります。firefoxだと画像を開けないときがあるようです。aqua」の16色としました。赤、青、緑の色成分を3辺とし、その立方体での距離を求めます。プロパティで参照できます。計算する際は、プロパティはBYTE型なので、CInt(Byte)でパースしておきます。149秒なお、このページによると、RGBに適切な重み付けをすると少しは人間の感覚に近い色差になるようなので試してみました。B:0.114)計算時間に有意な差はありませんでした。色相(Hue)、彩度(Saturation・Chroma)、明度(Value・Lightness・Brightness)の三つの成分からなる色空間です。color.GetHue()/color.GetSaturation()/color.GetBrightness()メソッドにより簡単に各成分を取得できます。最初はこのページの方法でやってみたのですが、うまい具合に行きませんでした。HSV」とあり、極座標から変換した後に距離を求めるのが正解のようでした。上記の画像は白の領域がほとんど無く、別の画像では近似に違和感がありました。そこで、Wikipediaのページを参考にSとBの定義を変えてみました。策定したものらしいです。詳しい式はwikipediaなどに書いてありますが、VB.netのコードは下記ページに載っていました。reexre氏のコードは上手く変換できません。255で変な値に飛んでいってしまいますが、そもそもこの時点ですでに希望の値でないようでした。Tanner_H氏のコードで変換した結果が↓です。先に変換テーブルを作成しておくことにより、Lab色空間への変換を高速にすることが出来るようです。http://d.hatena.ne.jp/butyricacid/20080711/1215772093こちらページのコードをVB.netに移植したものを下記に示します。(作者のbutyricacid氏に公開の許可を頂きました。マッピングを同時に行う。Region結果は↓です。処理時間が49%減になりました。差はごく僅かなので、どちらを使ってもほぼ同じ結果が得られると思われます。いうことで、アプリを作ってみました。ダウンロードはこちら。ビーズ工作の役に立つと良いなぁ。