색상 개체를 비교하고 색상 배열에서 가장 가까운 일치를 결정하는 방법
색상 거리를 이해하는 것은 색상 선택과 같은 작업에 매우 중요할 수 있습니다. 그리고 이미지 처리. 색거리에 대한 명확한 정의는 없지만 여러 가지 방법으로 측정할 수 있습니다.
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); } float getHueDistance(float hue1, float hue2) { float d = Math.Abs(hue1 - hue2); return d > 180 ? 360 - d : d; }
2. 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); } int ColorDiff(Color c1, Color c2) { return (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)); }
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); } float ColorNum(Color c) { return c.GetSaturation() * factorSat + getBrightness(c) * factorBri; } float getBrightness(Color c) { return (c.R * 0.299f + c.G * 0.587f + c.B *0.114f) / 256f; }
이러한 방법을 사용하려면 색상 배열을 List
최적의 방법 선택은 특정 애플리케이션과 가장 관련성이 높은 색상 측면에 따라 다릅니다.
위 내용은 배열에서 가장 가까운 색상 일치를 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!