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); }
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>(); return(targetColorConverted.Get4dDistanceL2(queryCircleConverted, 0)); }
public override double Distance(ColorRgb queryCircle, Color3d targetColor, int distX, int distY) { LoadColorOccurences(); var l2dist = base.Distance(queryCircle, targetColor, distX, distY); return(l2dist * CalculateIdf(queryCircle)); }
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)); }
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"); } double colorDist = 0; for (int i = 0; i < circleColor.Spectrums.Length; i++) { var dist = circleColor.Spectrums[i] - pixelColor.Spectrums[i]; colorDist += dist * dist; } return(Math.Sqrt(colorDist)); }
public override unsafe Color3d[,] Preprocess(Bitmap bitmap) { var targetHeight = (int)(bitmap.Height / ((double)bitmap.Width / TargetWidth)); var smallBitmap = GetImageHiQualityResized(bitmap, TargetWidth, targetHeight); Color3d[,] img = new Color3d[TargetWidth, targetHeight]; for (int x = 0; x < TargetWidth; x++) { for (int y = 0; y < targetHeight; y++) { var pixel = smallBitmap.GetPixel(x, y); img[x, y] = new ColorType(); img[x, y].SetFromRgb(pixel.R, pixel.G, pixel.B); } } return(img); }
public abstract double Distance(Color3d circleColor, Color3d pixelColor, int distX, int distY);
public static void GetDoublev(uint pname, out Color3d data) { m_GetDoublev_6(pname, out data); if(m_debug) CheckError("GetDoublev"); }