色の類似性をチェックするアルゴリズム


84

2つのRGBカラーを比較し、それらの類似性の値を生成するアルゴリズムを探しています(類似性は「平均的な人間の知覚に関して類似している」ことを意味します)。

何か案は?

編集

もう答えられないので、質問の編集として「解決策」を入れることにしました。

私は自分のアプリでトゥルーカラーの(非常に)小さなサブセットを使用することにしました。これにより、自分で色の比較を処理できるようになりました。私は約30色で作業し、それらの間のハードコードされた距離を使用します。

それはiPhoneアプリだったので、私はObjective-Cを使用しました。実装は、多かれ少なかれ、色間の距離を示す以下の表を表すマトリックスです。

ここに画像の説明を入力してください


R、G、Bの値を比較するだけでは不十分ですか?
BlackBear 2011年

@Kai:私は同じことを実装しようとしています。YUVのアプローチを採用しましたか、それとも別の種類の色空間と空間距離を選択しましたか?
タリアマ2012

3
@Thariama自分で色の比較を処理できるように、アプリにトゥルーカラーの(非常に)小さなサブセットを使用することにしました。私は約50色で作業し、それらの間のハードコードされた距離を使用します。しかし、2 ^ 24色を使用するときに私が読んで試し、テストしたすべての中で、YUVは最高の仕事をしました。
Kai Huppmann 2012

@カイ:あなたの決定とその理由を教えてくれてありがとう。つまり、RGBを使用し、50色を使用してヒストグラムを作成し、事前定義された距離を使用してアルゴリズムを高速化します。アルゴリズムを実装するためにどの言語を使用しましたか?
タリアマ2012

@Thariama元の質問の編集として入れてください。
Kai Huppmann 2012

回答:


57

ユークリッド空間でのRGB距離は、「平均的な人間の知覚とはあまり似ていません」

あなたはYUV色空間を使うことができます、それはこの要因を考慮に入れます:

|  Y' |      |  0.299    0.587    0.114   | | R |
|  U  |  =   | -0.14713 -0.28886  0.436   | | G |
|  V  |      |  0.615   -0.51499 -0.10001 | | B |

この目的のためにCIE色空間を使用することもできます。

編集:

YUV色空間は、簡単な式で計算できる安価な近似であることに言及します。しかし、それは知覚的に均一ではありません。知覚的に均一とは、色の値が同じ量変化すると、視覚的にほぼ同じ重要度の変化が生じることを意味します。より正確で厳密なメトリックが必要な場合は、CIELAB色空間または別の知覚的に均一な空間を確実に考慮する必要があります(変換の簡単な式がない場合でも)。


3
ありがとうございました!次に、Y'UV値のユークリッド空間距離を使用できますか?
Kai Huppmann 2011年

もちろんですが、他の距離を使用することもできます。
Ghassen Hamrouni 2011年

2
Y 'が輝度成分であるという理由だけで、UV成分間のユークリッド距離を計算したい場合があります。
ロス

17
YUVのユークリッド距離が人間の違いの認識を反映しているという主張の出典を誰かが引用できますか?
ビル

4
@Billではありません。ここの「結果」セクションを参照してください:compuphase.com/cmetric.htm
kritzikratzi

23

CIE94(DeltaE-1994)の使用をお勧めします。これは、人間の色覚を適切に表現していると言われています。コンピュータビジョン関連のアプリケーションでかなり使用してきましたが、結果にはかなり満足しています。

ただし、このような比較を実行するには、かなり計算コストがかかります。

  1. RGB to XYZ 両方の色
  2. XYZ to LAB 両方の色
  3. Diff = DeltaE94(LABColor1,LABColor2)

数式(擬似コード):


おかげで、CIELAB色空間を使用しているため、この方法を優先しました。
Sergey Voronezhskiy 2016年

「Hunter-Lab」のようにXYZからLABへ?
zuks 2016年

1
気にしないでください... Delta
E1994

15

ここに色の距離の主題に関する優れた記事があります:http//www.compuphase.com/cmetric.htm

リソースがなくなった場合、著者の結論は、2つのRGBカラー間の距離の最良の低コスト近似は、この式(Cコード)を使用して達成できるということです。

typedef struct {
   unsigned char r, g, b;
} RGB;

double ColourDistance(RGB e1, RGB e2)
{
  long rmean = ( (long)e1.r + (long)e2.r ) / 2;
  long r = (long)e1.r - (long)e2.r;
  long g = (long)e1.g - (long)e2.g;
  long b = (long)e1.b - (long)e2.b;
  return sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}

14

人間の知覚は、強度よりも彩度が弱いです。

たとえば、コマーシャルビデオでは、YCbCr / YPbPr色空間(Y'UVとも呼ばれます)は彩度情報の解像度を下げますが、輝度(Y)は保持します。4:2:0や4:2:2などのデジタルビデオ圧縮では、知覚が比較的弱いため、クロマビットレートが低下します。

輝度(Y)よりも優先度が高く、コロマよりも優先度が低い距離関数を計算できると思います。

また、低強度では、人間の視覚は実質的に白黒です。したがって、優先度関数は非線形であり、低輝度(Y)の場合、コロマにかける重みはますます少なくなります。

より科学的な公式:http//en.wikipedia.org/wiki/Color_difference


3

色覚はユークリッドではありません。どんな距離の公式も、同時に十分に良く、ひどいものになります。ユークリッド距離(RGB、HSV、Luv、Labなど)に基づく測定値は、同様の色に十分であり、青緑色に近いアクアを示します。ただし、閉じていない値の場合は任意になります。たとえば、赤は緑に近いですか、それとも青に近いですか?

チャールズポイントンのカラーFAQから

XYZおよびRGBシステムは、知覚の均一性を示すにはほど遠いです。XYZの適度に知覚的に均一な空間への変換を見つけることはCIEで10年以上を消費し、最終的に単一のシステムは合意できませんでした。


ありがとうございました。そして、それは素晴らしい、興味深いリンクです。私の目的では、赤が緑に近いか青に近いかを判断することはそれほど重要ではありませんが、ライトグレーがライトレッドよりも白に近いことを確認します。YUVがそれを実現することを願っています(まだわかりません)。
Kai Huppmann 2011年

-5

RGBキューブの色の類似性は、ユークリッド距離によって測定されます(ピタゴラスの公式を使用)。

編集:考え直してみると、これは他のほとんどの色空間にも当てはまるはずです。


6
いいえ、RGB空間のユークリッド距離は、人間の目が色の違いを認識する方法に対応していません。これが、Labのような色空間が作成された理由です。
ビル

番号。ユークリッド距離は、デカルト空間の距離を測定する1つの方法です。類似性ではなく距離を測定します!これで、ユークリッド距離と類似性が一致する別のベクトル空間(cieやyuvなど)を選択するか、別の測度を使用できます。しかし、rgb + euclideanは満足のいく結果をもたらしません。
kritzikratzi 2013年

私もこれを考えましたが、限られた数の色(たとえば、Adobe Flash、216のプリセットデフォルトパレット)で描画プログラムを開き、その数式をテストすると、すぐにがっかりし、黄色になります。明らかに茶色などが必要です
Dmitry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.