색상을 비교하고 배열 내에서 가장 가까운 일치 항목을 식별하는 것은 그래픽 애플리케이션에서 일반적인 작업입니다. 이 기사에서는 이를 달성하기 위한 세 가지 방법을 살펴보겠습니다.
1. 색상만 비교:
채도와 명도는 무시하고 색상의 색상만 고려하는 방법입니다. 간단한 빼기를 이용하여 색상거리를 계산하고, 최소거리를 구하여 가장 가까운 색상을 결정합니다.
2. RGB 거리:
이 방법은 색상의 RGB 값 사이의 직접적인 거리를 측정합니다. 색차는 RGB 공간에서 유클리드 거리로 계산하고, 이 차이를 최소화하여 가장 가까운 색을 찾는다.
3. 가중치가 적용된 색상, 채도 및 밝기 비교:
이 방법은 색상, 채도 및 밝기를 가중치 방식으로 결합합니다. 인지된 밝기가 계산되고 채도와 밝기를 기준으로 색상 번호가 계산됩니다. 가장 가까운 색상은 색상 차이와 색상 거리의 가중치 합을 최소화하여 결정됩니다.
다음 방법의 구현은 다음과 같습니다.
// Hue-Only Comparison 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 Distance Comparison 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); } // Weighted Hue, Saturation, and Brightness Comparison 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); }
// Color brightness as perceived: float getBrightness(Color c) => (c.R * 0.299f + c.G * 0.587f + c.B * 0.114f) / 256f; // Distance between two hues: float getHueDistance(float hue1, float hue2) => Math.Abs(hue1 - hue2) > 180 ? 360 - Math.Abs(hue1 - hue2) : Math.Abs(hue1 - hue2); // Weighed by saturation and brightness: float ColorNum(Color c) => c.GetSaturation() * factorSat + getBrightness(c) * factorBri; // Distance in RGB space: int ColorDiff(Color c1, Color c2) => (int)Math.Sqrt((c1.R - c2.R) * (c1.R - c2.R) + (c1.G - c2.G) * (c1.G - c2.G) + (c1.B - c2.B) * (c1.B - c2.B));
선택 색상 거리 측정 기준은 특정 응용 프로그램에 따라 다릅니다. 색상이 주요 고려사항이라면 색상만 비교하는 것으로 충분합니다. 보다 일반적인 색상 매칭을 위해서는 RGB 거리나 가중치를 적용한 색상, 채도, 밝기 비교 방법을 사용하면 더욱 정확한 결과를 얻을 수 있습니다.
위 내용은 색상 배열에서 가장 가까운 색상을 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!