如何确定颜色数组中最接近的颜色
简介
查找阵列中最相似的颜色在各种应用中都是一种有用的技术。本题探讨了三种测量颜色相似度并检索最接近匹配的索引的方法。
方法
方法 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); }
辅助函数
用法
int indexInArray = closestColor1(clist.ToList(), someColor);
结论
方法的选择取决于具体要求该应用程序。对于基于色调的比较,方法 1 就足够了。方法 2 测量 RGB 距离,而方法 3 提供考虑所有颜色属性的加权距离计算。
以上是如何使用不同的距离度量在颜色数组中查找最接近的颜色?的详细内容。更多信息请关注PHP中文网其他相关文章!