How can a color definition look so different in RGB and CMYK colors spaces?

413 Views Asked by At

How can a color definition look so different in RGB and CMYK colors spaces? (on my screen)

e.g. this Pantone color : https://www.pantone.com/color-finder/Purple-C

the CMYK: http://www.wolframalpha.com/input/?i=cmyk+40+90+0+0
and RGB: http://www.wolframalpha.com/input/?i=rgb+187+41+187

look very different.

Is this due to my screen not rendering colors properly?

If that is the case, it doesn't explain why every color converter I try, converts RGB 187 41 187 into CMYK 0 0.7807 0 0.2667?

Is there any way to find CMYK 40 90 0 0 if given RGB 187 41 187?
Was that done programmatically or by some designers eye?

Thanks for clearing this out for me

2

There are 2 best solutions below

0
On

Purple is a difficult colour (visually). Printers (and photocamera sensors) sucks on such colour.

But you assume that "PANTONE Purple C" is on sRGB and CMYK gamuts. This is often not true, many Pantone colours are more vivid that we can display on normal (sRGB) screen or print (on CMYK printer).

So I assume that both values (RGB and CMYK) are the nearest points to true Purple C, on the respective gamut. But if you transform one to the other, you just get the correspondence of the "fake purple C".

Additionally, Pantone colours are spot colours, so there is no one to one relation between Pantone and RGB. A Pantone colour could have a RGB value (maybe in sRGB, maybe Adobe RGB or DCI-P3 or CIE RGB or Rec.2020 or...), but a RGB value had not so many information to tell you how a colour will seems under different lights.

Note: I'm not Pantone licensee, so I cannot verify the theory (really I have some Pantone licenses, because I owe few XRite devices, but ...).

1
On

I think it is safe to assume that the RGB values are encoded using the sRGB colourspace, as a demonstration I will use the Purple C Lab values from e-paint.co.uk which are measured with a spectrometer for the CIE 1964 10 Degree Standard Observer: (47.52, 68.9, -42.48) and converting them to sRGB:

import numpy as np

import colour
from colour.plotting import *

# Purple C
Lab = (47.52, 68.9, -42.48)
XYZ = colour.Lab_to_XYZ(
    Lab, colour.ILLUMINANTS['CIE 1964 10 Degree Standard Observer']['D65'])
sRGB = colour.XYZ_to_sRGB(
    XYZ,
    colour.ILLUMINANTS['CIE 1964 10 Degree Standard Observer']['D65'],
    apply_encoding_cctf=False)

print(colour.oetf_sRGB(sRGB) * 255)

RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1931(
    sRGB[np.newaxis, ...],
    cmfs='CIE 1964 10 Degree Standard Observer',
    scatter_parameters={
        'linewidths': 1,
        'edgecolors': 'black'
    })

[ 187.74670223 49.84515552 185.6083605 ]

compared to

187 41 187

Those measured values are not extremely far from the official RGB values, you could attribute that to measurement procedure, sample age and quality, etc.. You could compute Delta E on them but the point is that they seem to be trustworthy, especially given that they are within sRGB gamut as you can assess from this plot:

Purple C

The CMYK values are very different and seemingly clipped in the blue channel. I unfortunately have no good explanation for it but given you don't know anything about the underlying encoding I would not trust those values and would only rely on the RGB ones. Interestingly, running the 0 0.7807 0 0.2667 CMYK values in this conversion tool will yield Purple C.

Please keep in mind that ideally those colour values are valid for the CIE 1964 10 Degree Standard Observer but we are currently looking at them using the sRGB colourspace mainly used with the CIE 1931 2 Degree Standard Observer so you will alway have discrepancies.

To quote Pantone themselves:

On screen digital color simulations do not match the physical Pantone Color Standards. Refer to Pantone Color publications to obtain actual physical color standards.

It does not answer your question but will hopefully still be helpful.