2

RGB値があり、120色のコレクションからそのRGB値に最も近いものを見つけたいと思います。

私が収集したものから、このようなチェックを実装する最も正確な方法の1つは、CIE94式を使用することです。ただし、Rubyを使用してこれを実装するのに問題があります。

私がこれを行うことをどのように提案しますか?

          R1, G1, B1 = pixel.red, pixel.green, pixel.blue
          c = Colour.first
              R2, G2, B2 = (c.red * 256), (c.green * 256), (c.blue * 256)

              C1 = Math.sqrt((G1**)+(G2**))
              C2 = Math.sqrt((B1**)+(B2**))
              CAB = C1 - C2

              DA = G1 - G2
              DB = B1 - B2

              DH = Math.sqrt((DA** + DB** - CAB**))

              divergence = Math.sqrt( ((R1-R2)/2)** + (CAB/ (1+(0.048*C1)))** + ( DH / ( 1 + ( 0.014 * C1))** )

LCMSを使用するという回答の提案の1つに続いて、私が使用しているルビーライブラリのRMagick(Imagemagick)が実際にLCMSを取得していることに気付きました。これは、この機能の一部にアクセスできる可能性があることを意味します-「プリベーク」。RMagickを使用して上記を達成する方法を知っている人はいますか?

4

2 に答える 2

6

これは実際には、予想よりもはるかにトリッキーです多くの理由で。

主な問題は、RGB 空間がデバイスに依存する空間であることです。あるデバイスで同じように見える RGB 値は、別のデバイスでも同じように見える必要はありません。(これがありそうにないように思われる場合は、モニター ガンマに関する OS の想定が異なるため、mac / win / SGI 間で良好な色対応を得ることができないという大きな問題の歴史があります。)

2 つ目は、2 つの色の違いの認識が、周囲の色/表示環境に大きく依存することです。つまり、2 つの色は、暗い環境で暗い環境で見ると異なって見える場合がありますが、明るい環境で白い環境で見ると似ています。

これらの条件を念頭に置くと、Delta CIE 94 は色の類似性の適切な尺度です。

各色を RGB から XYZ に、次に Lab に変換して計算します。RGB から XYZ への変換はデバイスに依存します。 sRGBなどの単純な標準変換がいくつかありますが、実際のデバイスへの適用性には疑問があります。XYZ から Lab への変換は複雑で、ここで見つけることができます。参照白色点には、デバイスの白色点 (標準を使用している場合は sRGB) を使用します。

最後に、上記の式を使用して最終的な変換を行うことができます。

これはすべて比較的面倒なことなので、 LCMSなどの適切なカラー マネジメント ツールを呼び出したほうがよいかもしれません。

于 2012-09-26T08:13:04.750 に答える
0

これは、予想よりも少しトリッキーです。RGB → XYZ → LAB → LCH から変換する必要があり、その後でのみCIE94 式を適用できます。Chroma.js の実装を見て、必要な部分を Ruby に移植します。

https://github.com/gka/chroma.js

于 2012-09-25T22:39:47.217 に答える