public override double Distance(Color3d circleColor, Color3d pixelColor, int distX, int distY) { if (circleColor.GetType() != pixelColor.GetType()) { throw new Exception("Can't compare colors in different color spaces"); } var circleColorRgb = circleColor.ConvertTo <ColorRgb>(); var pixelColorRgb = pixelColor.ConvertTo <ColorRgb>(); var mineCircleColor = new ColorMine.ColorSpaces.Rgb { R = circleColorRgb.R, G = circleColorRgb.G, B = circleColorRgb.B }; var minePixelColor = new ColorMine.ColorSpaces.Rgb { R = pixelColorRgb.R, G = pixelColorRgb.G, B = pixelColorRgb.B }; var ciede2000diff = mineCircleColor.Compare(minePixelColor, new ColorMine.ColorSpaces.Comparisons.CieDe2000Comparison()); int distFromPoint = (int)Math.Sqrt(distX * distX + distY * distY); return(ciede2000diff + distFromPoint); }
public override double Distance(ColorRgb queryCircle, Color3d targetColor, int distX, int distY) { var queryCircleConverted = queryCircle.ConvertTo <ColorType>(); var targetColorConverted = targetColor.ConvertTo <ColorType>(); return(targetColorConverted.Get4dDistanceL2(queryCircleConverted, 0)); }
private double CalculateIdf(Color3d color3d, int clusterMaxDiffInOneColor = 30) { var color = color3d.ConvertTo <ColorRgb>(); int minR = Math.Max(color.R - clusterMaxDiffInOneColor, 0); int minG = Math.Max(color.G - clusterMaxDiffInOneColor, 0); int minB = Math.Max(color.B - clusterMaxDiffInOneColor, 0); int maxR = Math.Min(color.R + clusterMaxDiffInOneColor, 255); int maxG = Math.Min(color.G + clusterMaxDiffInOneColor, 255); int maxB = Math.Min(color.B + clusterMaxDiffInOneColor, 255); int totalOfThisColor = 1; for (int r = minR; r < maxR; r++) { for (int g = minG; g < maxG; g++) { for (int b = minB; b < maxB; b++) { totalOfThisColor += colorOccurences[r, g, b]; } } } return(Math.Log(totalPixelsInDataset / (double)totalOfThisColor)); }
public override double Distance(ColorRgb queryCircle, Color3d targetColor, int distX, int distY) { var queryCircleConverted = queryCircle.ConvertTo <ColorType>(); var targetColorConverted = targetColor.ConvertTo <ColorType>(); var distFromPoint = (int)Math.Sqrt(distX * distX + distY * distY); return(targetColorConverted.Get4dDistanceL2(queryCircleConverted, distFromPoint)); }
public override double Distance(ColorRgb queryCircle, Color3d targetColor, int distX, int distY) { var queryCircleConverted = queryCircle.ConvertTo <ColorType>(); var targetColorConverted = targetColor.ConvertTo <ColorType>(); var dist = distX * distX + distY * distY; for (int i = 0; i < queryCircle.Spectrums.Length; i++) { var spectDiff = targetColorConverted.Spectrums[i] - queryCircleConverted.Spectrums[i]; dist += spectDiff * spectDiff; } return(Math.Sqrt(dist)); }