色の配列内で最も近い色を決定する方法
はじめに
配列内で最も類似した色を検出することは、さまざまなアプリケーションで役立つテクニックです。この質問では、色の類似性を測定し、最も近い一致のインデックスを取得する 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); }
ヘルパー関数
使用法
int indexInArray = closestColor1(clist.ToList(), someColor);
結論
方法の選択は、アプリケーションの特定の要件。色相ベースの比較の場合は、方法 1 で十分です。方法 2 は RGB 距離を測定し、方法 3 はすべての色のプロパティを考慮した加重距離の計算を提供します。
以上が異なる距離メトリックを使用して色配列内で最も近い色を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。