首頁 >後端開發 >C++ >如何使用不同的距離測量在顏色數組中找到最接近的顏色?

如何使用不同的距離測量在顏色數組中找到最接近的顏色?

Linda Hamilton
Linda Hamilton原創
2024-12-30 20:23:13215瀏覽

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

如何確定顏色數組中最接近的顏色

簡介

查找陣列中最最中最相似的顏色在各種應用中都是一種有用的技術。本題探討了三種測量色彩相似度並檢索最接近匹配的索引的方法。

方法

方法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);
}

方法二: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:決定兩種顏色之間的色調差異。
  • ColorNum:權衡飽和度和亮度成分。
  • ColorDiff:計算 RGB顏色空間

用法

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

結論

方法的選擇取決於該應用程式。對於基於色調的比較,方法 1 就足夠了。方法 2 測量 RGB 距離,而方法 3 提供考慮所有顏色屬性的加權距離計算。

以上是如何使用不同的距離測量在顏色數組中找到最接近的顏色?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn