ホームページ >バックエンド開発 >C++ >異なる距離メトリックを使用して色配列内で最も近い色を見つける方法

異なる距離メトリックを使用して色配列内で最も近い色を見つける方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-30 20:23:13213ブラウズ

How to Find the Closest Color in a Color Array Using Different Distance Metrics?

色の配列内で最も近い色を決定する方法

はじめに

配列内で最も類似した色を検出することは、さまざまなアプリケーションで役立つテクニックです。この質問では、色の類似性を測定し、最も近い一致のインデックスを取得する 3 つの方法について説明します。

方法

方法 1: 色相の比較

色相(色の濃淡)のみを考慮した場合、この方法は対象の色に最も近い色相を見つけます。彩度と明るさは無視されます。

int closestColor1(List<Color> colors, Color target)
{
    var hue1 = target.GetHue();
    var diffs = colors.Select(n => getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(n => n);
    return diffs.ToList().FindIndex(n => n == diffMin);
}

方法 2: RGB 空間距離

この方法では、ターゲット カラーと各色の RGB 値の差を直接測定します。配列。

int closestColor2(List<Color> colors, Color target)
{
    var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
    return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
}

方法 3: 重み付け距離

この方法では、色相、彩度、明度を組み込んで類似性を評価します。デフォルトでは、色相コンポーネントの重みが高くなります。

int closestColor3(List<Color> colors, Color target)
{
    float hue1 = target.GetHue();
    var num1 = ColorNum(target);
    var diffs = colors.Select(n => Math.Abs(ColorNum(n) - num1) +
                                   getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(x => x);
    return diffs.ToList().FindIndex(n => n == diffMin);
}

ヘルパー関数

  • getBrightness: 知覚される色を計算します。
  • getHueDistance: 2 つの色の色相の違いを決定します。
  • ColorNum: 彩度と明るさの成分を重み付けします。
  • ColorDiff: を計算します。 RGB 色空間距離。

使用法

int indexInArray = closestColor1(clist.ToList(), someColor);

結論

方法の選択は、アプリケーションの特定の要件。色相ベースの比較の場合は、方法 1 で十分です。方法 2 は RGB 距離を測定し、方法 3 はすべての色のプロパティを考慮した加重距離の計算を提供します。

以上が異なる距離メトリックを使用して色配列内で最も近い色を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。