Beispiel #1
0
        //this is the core of the algorithm. the output image is computed in the HCL color space
        //using the gray scale visible image for Luminance and thermal image for Hue
        private unsafe void FuseLuminances()
        {
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65
            };

            var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                       ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb);
            int *dst = (int *)data.Scan0;

            for (int i = 0; i < visibles.Length; i++)
            {
                double luminance = visibles[i] * 100; //0..100
                double hue       = Math.Min(1, thermals[i] * hueGain);
                hue = 300 - (int)(hue * 300);         //0..300

                //compose HCL color
                var hclColor = new LChabColor(luminance, chroma, hue);

                //convert to RGB and put in bitmap
                Color color = converter.ToRGB(hclColor);
                *     dst++ = (color.R << 16) | (color.G << 8) | color.B;
            }
            bitmap.UnlockBits(data);
        }
Beispiel #2
0
        public static Vector4 SRGB(float r, float g, float b)
        {
            var converter = new ColourfulConverter();
            var srgb      = new RGBColor(r, g, b);
            var linear    = converter.ToLinearRGB(srgb);

            return(new Vector4((float)linear.R, (float)linear.G, (float)linear.B, 0));
        }
Beispiel #3
0
        private static LabColor ToLabColor(Color color)
        {
            var converter = new ColourfulConverter {
                TargetLabWhitePoint = Illuminants.D65
            };

            return(converter.ToLab(new RGBColor(color.R / 255.0, color.G / 255.0, color.B / 255.0)));
        }
Beispiel #4
0
        /// <summary>
        /// Color conversion
        /// The ColourfulConverter facade can convert from any of the supported color spaces to any other color space.
        /// It always performs the chromatic adaptation if the input and output color space white points are different.
        /// </summary>
        private void ColorConversion()
        {
            RGBColor input = new RGBColor(1, 0, 0);

            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D50
            };

            XYZColor output = converter.ToXYZ(input);
        } // end ColorConversion
Beispiel #5
0
        /// <summary>
        /// Chromatic adaptation
        /// The adaptation can be also performed alone (e.g. from CIELAB D50 to CIELAB D65).
        /// </summary>
        private void ChromaticAdaptation()
        {
            LabColor input = new LabColor(10, 20, 30, Illuminants.D50);

            var converter = new ColourfulConverter {
                TargetLabWhitePoint = Illuminants.D65
            };

            LabColor output = converter.Adapt(input);
        } // end ChromaticAdaptation
Beispiel #6
0
        public static LabColor Color2Lab(Color color)
        {
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D50, TargetRGBWorkingSpace = RGBWorkingSpaces.sRGB
            };
            RGBColor rgbColor = new RGBColor(color.r, color.g, color.b);
            LabColor output   = converter.ToLab(rgbColor);

            return(output);
        }
Beispiel #7
0
        } // end ColorConversion

        /// <summary>
        /// CIELAB color to RGB color 변환
        /// </summary>
        /// <param name="l">L(luminosity) - 명도축</param>
        /// <param name="a">a - 빨강(Red) / 초록(Green) 의 보색(a complementary color)축</param>
        /// <param name="b">b - 노랑(Yellow) / 파랑(Blue) 의 보색(a complementary color)축</param>
        /// <returns>colorful.net RGBColor 형 반환</returns>
        public LinearRGBColor LabToRGB(double l, double a, double b)
        {
            LabColor input = new LabColor(l, a, b);

            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D50
            };

            LinearRGBColor output = converter.ToLinearRGB(input);

            return(output);
        }
Beispiel #8
0
 public ColorCheckerCalculatorTest()
 {
     TestData   = ColorCheckerCalculatorData.GetData().ToArray();
     _converter = new ColourfulConverter
     {
         WhitePoint            = Illuminants.C,
         TargetRGBWorkingSpace = RGBWorkingSpaces.sRGB,
         TargetLabWhitePoint   = Illuminants.C,
         TargetLuvWhitePoint   = Illuminants.C,
         ChromaticAdaptation   = new VonKriesChromaticAdaptation()
     };
 }
Beispiel #9
0
        internal static PixelFarm.TempContext <ColourfulConverter> BorrowColourfulConverter(
            out ColourfulConverter conveter)
        {
            if (!PixelFarm.Temp <ColourfulConverter> .IsInit())
            {
                PixelFarm.Temp <ColourfulConverter> .SetNewHandler(
                    () => new ColourfulConverter(),
                    p => { });//when relese back
            }

            return(PixelFarm.Temp <ColourfulConverter> .Borrow(out conveter));
        }
Beispiel #10
0
        public void Convert_XYZ_to_xyY(double xyzX, double xyzY, double xyzZ, double x, double y, double Y)
        {
            // arrange
            var input     = new XYZColor(xyzX, xyzY, xyzZ);
            var converter = new ColourfulConverter();

            // act
            xyYColor output = converter.ToxyY(input);

            // assert
            Assert.That(output.x, Is.EqualTo(x).Using(DoubleComparer));
            Assert.That(output.y, Is.EqualTo(y).Using(DoubleComparer));
            Assert.That(output.Luminance, Is.EqualTo(Y).Using(DoubleComparer));
        }
Beispiel #11
0
        public void Convert_xyY_to_XYZ(double xyzX, double xyzY, double xyzZ, double x, double y, double Y)
        {
            // arrange
            var input     = new xyYColor(x, y, Y);
            var converter = new ColourfulConverter();

            // act
            XYZColor output = converter.ToXYZ(input);

            // assert
            Assert.That(output.X, Is.EqualTo(xyzX).Using(DoubleComparer));
            Assert.That(output.Y, Is.EqualTo(xyzY).Using(DoubleComparer));
            Assert.That(output.Z, Is.EqualTo(xyzZ).Using(DoubleComparer));
        }
Beispiel #12
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);
        }
Beispiel #13
0
        public static Color Lab2Color(LabColor color)
        {
            Color output    = new Color();
            var   converter = new ColourfulConverter {
                WhitePoint = Illuminants.D50, TargetRGBWorkingSpace = RGBWorkingSpaces.sRGB
            };
            RGBColor rgbColor = converter.ToRGB(color);

            output.r = (float)rgbColor.R;
            output.g = (float)rgbColor.G;
            output.b = (float)rgbColor.B;
            output.a = 1.0f;
            return(output);
        }
        public void Convert_xyY_to_XYZ(double xyzX, double xyzY, double xyzZ, double x, double y, double Y)
        {
            // arrange
            var input     = new xyYColor(x, y, Y);
            var converter = new ColourfulConverter();

            // act
            var output = converter.ToXYZ(input);

            // assert
            Assert.Equal(output.X, xyzX, DoubleComparer);
            Assert.Equal(output.Y, xyzY, DoubleComparer);
            Assert.Equal(output.Z, xyzZ, DoubleComparer);
        }
        public void Convert_XYZ_to_xyY(double xyzX, double xyzY, double xyzZ, double x, double y, double Y)
        {
            // arrange
            var input     = new XYZColor(xyzX, xyzY, xyzZ);
            var converter = new ColourfulConverter();

            // act
            var output = converter.ToxyY(input);

            // assert
            Assert.Equal(output.x, x, DoubleComparer);
            Assert.Equal(output.y, y, DoubleComparer);
            Assert.Equal(output.Luminance, Y, DoubleComparer);
        }
        public void Convert_XYZ_as_vector_to_XYZ(double x, double y, double z)
        {
            // arrange
            IColorVector input = new XYZColor(x, y, z);

            var converter = new ColourfulConverter();

            // act
            var output = converter.ToXYZ(input);

            // assert
            Assert.Equal(output.X, x, DoubleComparer);
            Assert.Equal(output.Y, y, DoubleComparer);
            Assert.Equal(output.Z, z, DoubleComparer);
        }
Beispiel #17
0
        public void Convert_XYZ_as_vector_to_XYZ(double x, double y, double z)
        {
            // arrange
            IColorVector input = new XYZColor(x, y, z);

            var converter = new ColourfulConverter();

            // act
            XYZColor output = converter.ToXYZ(input);

            // assert
            Assert.That(output.X, Is.EqualTo(x).Using(DoubleComparer));
            Assert.That(output.Y, Is.EqualTo(y).Using(DoubleComparer));
            Assert.That(output.Z, Is.EqualTo(z).Using(DoubleComparer));
        }
Beispiel #18
0
        public void Convert_Lab_to_XYZ(double l, double a, double b, double x, double y, double z)
        {
            // arrange
            var input     = new LabColor(l, a, b, Illuminants.D65);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65, TargetLabWhitePoint = Illuminants.D65
            };

            // act
            XYZColor output = converter.ToXYZ(input);

            // assert
            Assert.That(output.X, Is.EqualTo(x).Using(DoubleComparerXYZPrecision));
            Assert.That(output.Y, Is.EqualTo(y).Using(DoubleComparerXYZPrecision));
            Assert.That(output.Z, Is.EqualTo(z).Using(DoubleComparerXYZPrecision));
        }
        public void Convert_sRGB_to_XYZ_D65(double r, double g, double b, double x, double y, double z)
        {
            // arrange
            var input     = new RGBColor(r, g, b);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65
            };

            // act
            XYZColor output = converter.ToXYZ(input);

            // assert
            Assert.That(output.X, Is.EqualTo(x).Using(DoubleComparer));
            Assert.That(output.Y, Is.EqualTo(y).Using(DoubleComparer));
            Assert.That(output.Z, Is.EqualTo(z).Using(DoubleComparer));
        }
        public void Convert_XYZ_to_Luv(double x, double y, double z, double l, double u, double v)
        {
            // arrange
            var input     = new XYZColor(x, y, z);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65, TargetLuvWhitePoint = Illuminants.D65
            };

            // act
            LuvColor output = converter.ToLuv(input);

            // assert
            Assert.That(output.L, Is.EqualTo(l).Using(DoubleComparerLuvPrecision));
            Assert.That(output.u, Is.EqualTo(u).Using(DoubleComparerLuvPrecision));
            Assert.That(output.v, Is.EqualTo(v).Using(DoubleComparerLuvPrecision));
        }
        public void Convert_XYZ_to_Lab(double x, double y, double z, double l, double a, double b)
        {
            // arrange
            var input     = new XYZColor(x, y, z);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65, TargetLabWhitePoint = Illuminants.D65
            };

            // act
            var output = converter.ToLab(input);

            // assert
            Assert.Equal(output.L, l, DoubleComparerLabPrecision);
            Assert.Equal(output.a, a, DoubleComparerLabPrecision);
            Assert.Equal(output.b, b, DoubleComparerLabPrecision);
        }
Beispiel #22
0
        private Color[] GetNColorsForBarGraph(int n)
        {
            var converter = new ColourfulConverter();
            var start     = (L : 65, a : 65, b : -15);
            var end       = (L : 25, a : -40, b : -35);
            var delta     = (L : end.L - start.L, a : end.a - start.a, b : end.b - start.b);
            var colors    = Enumerable.Range(0, n)
                            .Select(x => (double)x / (n - 1))
                            .Select(x => (L: start.L + delta.L * x, a: start.a + delta.a * x, b: start.b + delta.b * x))
                            .Select(x => new LabColor(x.L, x.a, x.b))
                            .Select(x => converter.ToRGB(x).ToColor())
                            .Reverse()
                            .ToArray();

            return(colors);
        }
Beispiel #23
0
        public void Convert_XYZ_to_Lab(double x, double y, double z, double l, double a, double b)
        {
            // arrange
            var input     = new XYZColor(x, y, z);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65, TargetLabWhitePoint = Illuminants.D65
            };

            // act
            LabColor output = converter.ToLab(input);

            // assert
            Assert.That(output.L, Is.EqualTo(l).Using(DoubleComparerLabPrecision));
            Assert.That(output.a, Is.EqualTo(a).Using(DoubleComparerLabPrecision));
            Assert.That(output.b, Is.EqualTo(b).Using(DoubleComparerLabPrecision));
        }
        public void Convert_XYZ_to_Luv(double x, double y, double z, double l, double u, double v)
        {
            // arrange
            var input     = new XYZColor(x, y, z);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65, TargetLuvWhitePoint = Illuminants.D65
            };

            // act
            var output = converter.ToLuv(input);

            // assert
            Assert.Equal(output.L, l, DoubleComparerLuvPrecision);
            Assert.Equal(output.u, u, DoubleComparerLuvPrecision);
            Assert.Equal(output.v, v, DoubleComparerLuvPrecision);
        }
        public void Convert_Lab_to_XYZ(double l, double a, double b, double x, double y, double z)
        {
            // arrange
            var input     = new LabColor(l, a, b, Illuminants.D65);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65, TargetLabWhitePoint = Illuminants.D65
            };

            // act
            var output = converter.ToXYZ(input);

            // assert
            Assert.Equal(output.X, x, DoubleComparerXYZPrecision);
            Assert.Equal(output.Y, y, DoubleComparerXYZPrecision);
            Assert.Equal(output.Z, z, DoubleComparerXYZPrecision);
        }
        public void Convert_sRGB_to_XYZ_D50(double r, double g, double b, double x, double y, double z)
        {
            // arrange
            var input     = new RGBColor(r, g, b);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D50
            };

            // act
            var output = converter.ToXYZ(input);

            // assert
            Assert.Equal(output.X, x, DoubleComparer);
            Assert.Equal(output.Y, y, DoubleComparer);
            Assert.Equal(output.Z, z, DoubleComparer);
        }
        public void Convert_XYZ_D65_to_sRGB(double x, double y, double z, double r, double g, double b)
        {
            // arange
            var input     = new XYZColor(x, y, z);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65, TargetRGBWorkingSpace = RGBWorkingSpaces.sRGB
            };

            // act
            RGBColor output = converter.ToRGB(input);

            // assert
            Assert.That(output.WorkingSpace, Is.EqualTo(RGBColor.DefaultWorkingSpace));
            Assert.That(output.R, Is.EqualTo(r).Using(DoubleComparer));
            Assert.That(output.G, Is.EqualTo(g).Using(DoubleComparer));
            Assert.That(output.B, Is.EqualTo(b).Using(DoubleComparer));
        }
        public void Convert_XYZ_D65_to_sRGB(double x, double y, double z, double r, double g, double b)
        {
            // arange
            var input     = new XYZColor(x, y, z);
            var converter = new ColourfulConverter {
                WhitePoint = Illuminants.D65, TargetRGBWorkingSpace = RGBWorkingSpaces.sRGB
            };

            // act
            var output = converter.ToRGB(input);

            // assert
            Assert.Equal(output.WorkingSpace, RGBColor.DefaultWorkingSpace);
            Assert.Equal(output.R, r, DoubleComparer);
            Assert.Equal(output.G, g, DoubleComparer);
            Assert.Equal(output.B, b, DoubleComparer);
        }
        public void Adapt_LChab_D50_To_D65(double l1, double c1, double h1, double l2, double c2, double h2)
        {
            // arrange
            var input          = new LChabColor(l1, c1, h1, Illuminants.D50);
            var expectedOutput = new LChabColor(l2, c2, h2);
            var converter      = new ColourfulConverter {
                TargetLabWhitePoint = Illuminants.D65
            };

            // action
            LChabColor output = converter.Adapt(input);

            // assert
            Assert.That(output.L, Is.EqualTo(expectedOutput.L).Using(DoubleRoundingComparer));
            Assert.That(output.C, Is.EqualTo(expectedOutput.C).Using(DoubleRoundingComparer));
            Assert.That(output.h, Is.EqualTo(expectedOutput.h).Using(DoubleRoundingComparer));
        }
        public void Adapt_Lab_D65_To_D50(double l1, double a1, double b1, double l2, double a2, double b2)
        {
            // arrange
            var input          = new LabColor(l1, a1, b1, Illuminants.D65);
            var expectedOutput = new LabColor(l2, a2, b2);
            var converter      = new ColourfulConverter {
                TargetLabWhitePoint = Illuminants.D50
            };

            // action
            LabColor output = converter.Adapt(input);

            // assert
            Assert.That(output.L, Is.EqualTo(expectedOutput.L).Using(DoublePrecisionComparer));
            Assert.That(output.a, Is.EqualTo(expectedOutput.a).Using(DoublePrecisionComparer));
            Assert.That(output.b, Is.EqualTo(expectedOutput.b).Using(DoublePrecisionComparer));
        }