2009-11-05 15 views
27

私はRGB形式で約200色の配列を持っています。私は任意のRGBカラーを取り、最も似ている配列の色と一致するようにしようとするプログラムを書こうとしています。色を一致させるための最適なアルゴリズム。

人間の知覚に可能な限り近い「類似」の定義が必要です。

また、一致の正確さについていくつかの情報を示したいと思います。例えば、白黒:100%、わずかに異なる色相を有する同様の色については、-4%。

ニューラルネットワークを使用する必要がありますか?より簡単な選択肢はありますか?

+0

良い類似度関数であるかもしれないものについての提案についての質問です、またはそれはすぐに、配列に最も似た色(複数可)を見つけるためのアルゴリズムについてです、所与の色に比べて? – mjv

+0

最初にアルゴリズムを試す前に類似性の定義が必要な場合。私は "知覚的に似ている"と思っています。 –

答えて

34

CIE Lab color spaceに全ての色を変換し、その空間内で最も低いdeltaEと

deltaE = sqrt(deltaL^2 + deltaA^2 + deltaB^2) 

色の距離を計算するには、互いに最も知覚的に類似しています。

+0

ありがとう、それは私が必要とするものです。 –

+11

sqrtを行う必要はないことに注意してください。sqrtは増加関数です。したがって、このステップは余計です。 – Rooke

+2

ソートよりも何もしない場合、距離の2乗は距離自体と同じくらい良いです。 「どのように違うか」を比較したい場合は、それをそのままにしておきます。 – hobbs

4

いいえ、ここにニューラルネットワークは必要ありません!単にHSLカラー値ベクトル考えると、このようなベクトルの加重モジュラス関数を定義:

modulus = sqrt(a*H1*H1 + b*S1*S1 + c*L1*L1); 

where a,b,c are weights you should decide based on your visual definition of what 
creates a bigger difference in perceived color - a 1% change in Hue or a 1% 
change in Saturation 

は、私はあなたが= B = 0.5、C = 1最後に

、見つける使うことをお勧め(例えば5%)

+2

これは簡単な代替手段です。 HSLへの変換は、RGBからLabへの変換よりもずっと簡単です:) – hobbs

+0

これで最初に試してみます。 –

+0

Crimson、can yoそこにあなたのモジュラスの数学をチェックしますか?私はそれが正しいとは思わない。 'a *(H1 - H2)** 2 +'のようなものがほしいと思う? – hobbs

1

私はまた、ちょっと単純なものと同じようにleast squaresメソッドを指摘したいと思います。つまり、数の差を取って、それを正方形にし、これらの差の二乗を合計します。

0

私は物を探していましたが、私はこの小さな図書館を作ることにしました。

https://github.com/sebastienjouhans/c-sharp-colour-utilities

+0

あなた自身の仕事を促進する回答を投稿するときは、十分注意してください。実際にここで質問に答えて、バックアップと参照としてブログ/ソースのみを使用するようにしてください。現時点では、これはスパムとして警告される可能性があります。 – ChrisF

関連する問題