public static ColorCieLab convertDin99oLabToCieLab(final double l99o, final double a99o, final double b99o) {
        final double kE = 1.0; // brightness factor, 1.0 for CIE reference conditions
        final double kCH = 1.0; // chroma and hue factor, 1.0 for CIE reference conditions
        final double fac1 = 100.0 / Math.log(139.0 / 100.0); // L99 scaling factor = 303.67100547050995
        final double ang = Math.toRadians(26.0);

        final double l = (Math.exp(l99o * kE / fac1) - 1.0) / 0.0039;

        final double h99ef = Math.atan2(b99o, a99o); // arctan in four quadrants

        final double heofo = h99ef - ang; // backwards hue rotation

        final double c99 = Math.sqrt(a99o * a99o + b99o * b99o); // DIN99 chroma
        final double g = (Math.exp(0.0435 * kE * kCH * c99) - 1.0) / 0.075; // factor for chroma decompression and viewing conditions
        final double e = g * Math.cos(heofo);
        final double f = g * Math.sin(heofo);

        final double a = e * Math.cos(ang) - f / 0.83 * Math.sin(ang); // rotation by 26 degrees
        final double b = e * Math.sin(ang) + f / 0.83 * Math.cos(ang); // rotation by 26 degrees

        return new ColorCieLab(l, a, b);
    }
DIN99o.

@param l99o lightness of color.
@param a99o position between red and green.
@param b99o position between yellow and blue.
@return DIN99o colors converted to CIELab color space.
@see <a href=
     "https://de.wikipedia.org/w/index.php?title=Diskussion:DIN99-Farbraum">https://de.wikipedia.org/w/index.php?title=Diskussion:DIN99-Farbraum</a>
src/main/java/org/apache/commons/imaging/color/ColorConversions.java