RgbValues getRgbValues(final TristimulusValues tristimulusValues) {
        final float varX = tristimulusValues.x / 100f; // X = From 0 to ref_X
        final float varY = tristimulusValues.y / 100f; // Y = From 0 to ref_Y
        final float varZ = tristimulusValues.z / 100f; // Z = From 0 to ref_Y

        float varR = varX * 3.2406f + varY * -1.5372f + varZ * -0.4986f;
        float varG = varX * -0.9689f + varY * 1.8758f + varZ * 0.0415f;
        float varB = varX * 0.0557f + varY * -0.2040f + varZ * 1.0570f;

        if (varR > 0.0031308) {
            varR = 1.055f * (float) Math.pow(varR, 1 / 2.4) - 0.055f;
        } else {
            varR = 12.92f * varR;
        }
        if (varG > 0.0031308) {
            varG = 1.055f * (float) Math.pow(varG, 1 / 2.4) - 0.055f;
        } else {
            varG = 12.92f * varG;
        }

        if (varB > 0.0031308) {
            varB = 1.055f * (float) Math.pow(varB, 1 / 2.4) - 0.055f;
        } else {
            varB = 12.92f * varB;
        }

        // var_R = ((var_R + 0.16561039f) / (3.0152583f + 0.16561039f));
        // var_G = ((var_G + 0.06561642f) / (3.0239854f + 0.06561642f));
        // var_B = ((var_B + 0.19393992f) / (3.1043448f + 0.19393992f));

        final RgbValues values = new RgbValues();
        values.r = (int) (varR * 255f);
        values.g = (int) (varG * 255f);
        values.b = (int) (varB * 255f);
        return values;
    }
Receives a triplet tristimulus values (CIE XYZ) and then does a CIELAB-CIEXYZ conversion (consult Wikipedia link for formula), where the CIELAB values
are used to calculate the tristimulus values of the reference white point.

@param tristimulusValues the XYZ tristimulus values
@return RGB values
@see <a href="https://en.wikipedia.org/wiki/CIELAB_color_space">CIELAB color space</a>
src/main/java/org/apache/commons/imaging/formats/tiff/photometricinterpreters/PhotometricInterpreterLogLuv.java