[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gimp-developer
Subject:    Re: [Gimp-developer] Adapted and unadapted sRGB luminance values
From:       Michael Henning <drawoc () darkrefraction ! com>
Date:       2013-09-29 16:12:37
Message-ID: CAAgWFh1FQ7u10GppGTTJGLBBYWXqeVd4SLzMs5FdNLNmGrntGw () mail ! gmail ! com
[Download RAW message or body]

Sorry for the delay in replying; I wanted to take the time to properly
look at everything you've said.

Yes, Elle, you're right. I take what I said back; we should be using
the adapted values.

If anyone is still doubting this, you can try playing around with this
demo program I created:
http://ix.io/8ho

It creates lcms profiles for the babl RGB and Y formats, and then uses
lcms to convert from RGB to Y.

Here's the output:
(R, G, B) -> Y
(1.000000, 0.000000, 0.000000) -> 0.222492
(0.000000, 1.000000, 0.000000) -> 0.716902
(0.000000, 0.000000, 1.000000) -> 0.060606
(0.500000, 0.500000, 0.500000) -> 0.500000

On Mon, Sep 23, 2013 at 5:46 PM, Elle Stone <l.elle.stone@gmail.com> wrote:
> A technically correct luminance-based conversion to black and white is
> done using this formula:
>
> L = R*Yr + G*Yg + B*Yb
>
> where R, G, and B are the image RGB values for any given pixel and Yr,
> Yg, and Yb are the Y values from the image's actual ICC profile. If
> the profile white point isn't D50, the Y values are always adapted Y
> values. The image must be in a linear gamma version of the color
> space.
>
> So far I'm repeating what I've already said. Below are concrete
> examples showing that using the **un**adapted sRGB Y values results in
> the wrong Luminance values:
>
> Consider an image with a color block of the sRGB "reddest possible
> red" 16-bit integer color: (65535, 0, 0).
>
> Convert the sRGB image to a different ICC profile using relative
> colorimetric intent and the RGB values will change but the **meaning**
> of the RGB values will be the same. In other words, the new RGB values
> will point to the same XYZ coordinates as the previous sRGB RGB values
> pointed to. Here are some examples:
>
> According to the argyllcms xicclu utility, sRGB values (65535, 0, 0)
> are the same as XYZ (0.435837, 0.222366, 0.013916).
>
> Convert the sRGB image to WideGamut:
> Widegamut RGB values (38832, 6228, 766) are the same as XYZ (0.435838
> 0.222362 0.013910)
>
> Convert the sRGB image to ProPhoto:
> ProPhoto RGB values (34671, 6442, 1105) are the same as XYZ (0.435843
> 0.222371 0.013910)
>
> Convert the sRGB image to the Identity profile:
> Identity RGB values (29623 14573 1106) are the same as XYZ (0.435837
> 0.222370 0.013921)
>
> Notice that for each profile's equivalent-to-sRGB-reddedst-red,  the
> XYZ "Y" value is almost identical to the sRGB ADAPTED Y value. The
> color's coordinates in XYZ space don't change upon converting the
> image from one color space to another using relative colorimetric
> intent (unless there is gamut clipping, but then only the clipped
> values are affected; I didn't mention black point compensation because
> for working spaces with 0 black points, using or not using blackpoint
> compensation makes no difference, and if it does, there' a problem in
> the code).
>
> The "Y" in a color's equivalent XYZ values  **is** a color's
> Luminance. If your method of calculating Luminance gives something
> other than the color's "Y" value in XYZ space, your method of
> calculating Luminance is wrong.
>
> Back to the formula for calculating Luminance:
>
> sRGB-unadapted: 65535 * 0.21265600 + 0 * 0.71515800 + 0 * 0.07218600 = 13936.4
>
> sRGB-adapted: 65535 * 0.22236633 + 0 * 0.71704102 + 0 * 0.06059265 = 14572.8
>
> WideGamut: 38832 * 0.25871277 + 6228 * 0.72470093 + 766 * 0.01658630 = 14572.5
>
> ProPhoto: 34671 * 0.28804016 + 6442 * 0.71195984 + 1105 * 0.00000000 = 14573.1
>
> Identity: 29623 * 0.00000000 + 14573 * 1.00000000 + 1106 * 0.00000000 = 14573.0
>
> In the above equations, the RGB values for the color of red specified
> by the reddest possible sRGB red were determined by eye droppering a
> red color block after doing the appropriate ICC profile conversions.
> As you can see, the "Luminance" value calculated by the UNadapted sRGB
> "Y" values is out of line with the other four calculated values.
> Notice that 14573/65535 is 0.22237, the ADAPTED red Y value for sRGB.
> If you did the same calculations for bluest sRGB blue and greenest
> sRGB green, you'd get the ADAPTED sRGB blue and green Y values.
>
> The actual eye droppered grayscale values for my four color test image
> (reddest sRGB red, bluest sRGB blue, and greenest sRGB green against
> an 18% gray background), after converting to black and white using
> Luminance, are as follows (ICC profile conversions done at 32-bit
> floating point, which is how I did the conversions, are more accurate
> than working with 16-bit values as given above):
>
> Profile         WtPt                      Red block   Green block    Blue
> block   18% Gray
> sRGB D65-unadapted   13936             46868             4731             12094
> sRGB D65-adapted       14573             46991             3971
>       12094
> WideGamut D50            14573              46991            3971
>          12094
> ProPhoto D50                14573              46991            3971
>             12094
> Identity D50                     14573              46991
> 3971               12094
>
> The 18% gray value is the same for all five conversions because the
> ONLY thing that determines the value of a neutral patch in an RGB
> image is the profile's TRC. And a technically correct Luminance
> conversion must always be done in a linear gamma color space.
>
> For neutral R=G=B starting "color image" values like 18% gray, correct
> OR incorrect Y values gives the same black and white R=G=B value after
> the Luminance conversion (it's always the same RGB values as before
> the conversion). But the more saturated the color is, the more wrong
> the results are using the UNadapted Y values.
>
> A technically correct Luminance conversion to black and white should
> give the same resulting black and white image ***regardless*** of the
> RGB working space the image happens to be in (this is not true of most
> methods of converting an image to black and white).
>
> Your incorrect use of the unadapted "Y" values makes the Luminance
> conversion dependent on the image profile's white point. But Luminance
> is determined by the value of Y in the color's XYZ coordinates. And
> those coordinates are determined using the adapted Y values from the
> actual image ICC profile. Those values don't change just because you
> converted the image from one color space to another, as long as you
> use relative colorimetric intent to do the conversion.
>
> The **un**adapted sRGB Luminance values for red, blue and green are
> different from the adapted values because the unadapted values use the
> wrong "Y" values. The Luminance values calculated using the unadapted
> "Y" values don't correspond to the equivalent "Y" value in XYZ space
> for the color before the conversion to black and white.
>
> You can download the test image and the four ICC profiles from this web page:
> http://ninedegreesbelow.com/photography/luminance-black-white.html
>
> Elle
_______________________________________________
gimp-developer-list mailing list
List address:    gimp-developer-list@gnome.org
List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic