首页 >后端开发 >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?

如何确定颜色数组中最接近的颜色

简介

查找阵列中最相似的颜色在各种应用中都是一种有用的技术。本题探讨了三种测量颜色相似度并检索最接近匹配的索引的方法。

方法

方法 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