public void CIE76ColorDifference(double l1, double a1, double b1, double l2, double a2, double b2, double expectedDeltaE) { // arrange var x = new LabColor(l1, a1, b1); var y = new LabColor(l2, a2, b2); // act var deltaE = new CIE76ColorDifference().ComputeDifference(x, y); // assert Assert.Equal(deltaE, expectedDeltaE, DoubleComparerLabPrecision); }
public void CIE76ColorDifference(double l1, double a1, double b1, double l2, double a2, double b2, double expectedDeltaE) { // arrange var x = new LabColor(l1, a1, b1); var y = new LabColor(l2, a2, b2); // act double deltaE = new CIE76ColorDifference().ComputeDifference(x, y); // assert Assert.That(deltaE, Is.EqualTo(expectedDeltaE).Using(DoubleComparerLabPrecision)); }
private bool Compare(Bitmap bitmap, int x, int y, Color color) { var difference = new CIE76ColorDifference(); var converter = new ColourfulConverter() { WhitePoint = Illuminants.D65 }; var rgbColor = bitmap.GetPixel(bitmap.Width - x, bitmap.Height - y); var labColor = converter.ToLab(new RGBColor(rgbColor)); var cmpColor = converter.ToLab(new RGBColor(color)); var diff = difference.ComputeDifference(labColor, cmpColor); return(Math.Abs(diff) < ColorDiffThreashold); }
public void ComputeDifference(double l1, double a1, double b1, double l2, double a2, double b2, double expectedDeltaE) { // arrange var x = new LabColor(in l1, in a1, in b1); var y = new LabColor(in l2, in a2, in b2); // act var deltaE = new CIE76ColorDifference().ComputeDifference(in x, in y); // assert Assert.Equal(expectedDeltaE, deltaE, DoubleComparerLabPrecision); }
private bool IsSameColorContains(uint[] colors, uint c) { var difference = new CIE76ColorDifference(); var converter = new ColourfulConverter() { WhitePoint = Illuminants.D65 }; var labColor = converter.ToLab(new RGBColor(Color.FromArgb((int)c))); foreach (var color in colors) { var l = converter.ToLab(new RGBColor(Color.FromArgb((int)color))); var diff = difference.ComputeDifference(labColor, l); if (Math.Abs(diff) < ColorDiffThreashold) { return(true); } } return(false); }
private PowDebuff[] GetPowDebuffs(Bitmap bitmap) { // 右下のアイコンは透過が少しあるため、ピクセル単位の色が完全一致しない。 // そのため、L*a*b色空間での色差が閾値以内かどうかで判定する。 var converter = new ColourfulConverter() { WhitePoint = Illuminants.D65 }; var powerBreakCmpLabColor1 = converter.ToLab(PowerBreakCmpColor1); var powerBreakCmpLabColor2 = converter.ToLab(PowerBreakCmpColor2); var difference = new CIE76ColorDifference(); for (int i = 0; i < MaxPowerDebuffCount; i++) { var x1 = bitmap.Width - 28 - (32 * i); var x2 = bitmap.Width - 34 - (32 * i); var y = bitmap.Height - 20; var c1 = converter.ToLab(new RGBColor(bitmap.GetPixel(x1, y))); var c2 = converter.ToLab(new RGBColor(bitmap.GetPixel(x2, y))); var diff1 = difference.ComputeDifference(powerBreakCmpLabColor1, c1); var diff2 = difference.ComputeDifference(powerBreakCmpLabColor2, c2); if (Math.Abs(diff1) < ColorDiffThreashold && Math.Abs(diff2) < ColorDiffThreashold) { return(new PowDebuff[] { PowerBreak }); } } return(new PowDebuff[0]); }
public void ComputingColorDifference() { // CIE Delta-E 1976 { var differenceCalculator = new CIE76ColorDifference(); var labColor1 = new LabColor(55, 80, 50); var labColor2 = new LabColor(18, 36, -60); var difference = differenceCalculator.ComputeDifference(in labColor1, in labColor2); // 124.1169 Assert.Equal(124.11688039908189, difference); } // CMC l:c 1984 { var differenceThreshold = CMCColorDifferenceThreshold.Acceptability; // or "Imperceptibility" var differenceCalculator = new CMCColorDifference(differenceThreshold); var labColor1 = new LabColor(55, 80, 50); var labColor2 = new LabColor(18, 36, -60); var difference = differenceCalculator.ComputeDifference(in labColor1, in labColor2); // 69.7388 Assert.Equal(69.7387994508022, difference); } // CIE Delta-E 1994 { var application = CIE94ColorDifferenceApplication.GraphicArts; // or "Textiles" var differenceCalculator = new CIE94ColorDifference(application); var labColor1 = new LabColor(55, 80, 50); var labColor2 = new LabColor(18, 36, -60); var difference = differenceCalculator.ComputeDifference(in labColor1, in labColor2); // 60.7882 Assert.Equal(60.78823549707133, difference); } // CIE Delta-E 2000 { var differenceCalculator = new CIEDE2000ColorDifference(); var labColor1 = new LabColor(55, 80, 50); var labColor2 = new LabColor(18, 36, -60); var difference = differenceCalculator.ComputeDifference(in labColor1, in labColor2); // 52.2320 Assert.Equal(52.23202852556586, difference); } // Delta Ez { var differenceCalculator = new JzCzhzDEzColorDifference(); var color1 = new JzCzhzColor(0.3, 0.4, 165); var color2 = new JzCzhzColor(0.8, 0.6, 25); var difference = differenceCalculator.ComputeDifference(in color1, in color2); // 1.0666 Assert.Equal(1.066630832433185, difference); } // Euclidean distance { // example for euclidean distance in the XYZ color space var differenceCalculator = new EuclideanDistanceColorDifference <XYZColor>(); var color1 = new XYZColor(0.5, 0.5, 0.5); var color2 = new XYZColor(0.2, 0.4, 0.6); var difference = differenceCalculator.ComputeDifference(in color1, in color2); // 0.3317 Assert.Equal(0.33166247903553997, difference); } }