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));
        }
Exemple #3
0
        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);
        }
Exemple #4
0
    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);
        }
Exemple #6
0
        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);
        }
    }