如何確定顏色數組中最接近的顏色
簡介
查找陣列中最最中最相似的顏色在各種應用中都是一種有用的技術。本題探討了三種測量色彩相似度並檢索最接近匹配的索引的方法。
方法
方法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中文網其他相關文章!