問題は、3 次元の世界で距離のようなものが必要なことですが、その RGB 表現はまったく直感的ではありません。「近い」色は「遠い」色とは大きく異なる場合があります。
たとえば、グレーの 2 つの色合い c1 : (120,120,120) と c2 : (150,150,150) を例にとると、今度は c3 : (160,140,140) を取ります。これは c1 よりも c2 に近いですが、紫であり、目には暗いグレーがはるかに近くなります。紫より灰色に。
hsv を使用することをお勧めします。色は、「ベース」カラー (色相)、彩度、および強度によって定義されます。色相が近い色は、実際に非常に近い色です。非常に異なる色相を持つ色は互いに関連していません (expl : yellow と green ) が、(非常に) 低い彩度と (非常に) 低い強度で近くに見える場合があります。
(夜はすべての色が同じです。)
色相は 6 つのブロックに分割されているため、 cyl = Math.floor( hue / 6 ) は類似性評価の最初のステップを提供します: 円柱の同じ部分 -> かなり近い場合。それらが同じシリンダーに属していない場合でも、(h2-h1) が小さい場合は (1/6) と比較して、(かなり) 近い可能性があります。(h2-h1) > 1/6 の場合、色が違いすぎる可能性があります。
次に、(s,v) を使用してより正確にすることができます。彩度が低い/非常に低い、および/または強度が低い場合、色はより近くなります。
差分値として何を取得したいかがわかるまで、rgb と hsv の両方をサポートするカラー ピッカーを試してみてください。ただし、「真の」類似度を測定することはできないことに注意してください。
ここに rgb --> hsv javascript コンバーターがあります: http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c