Yahoo Groups archive

Digital BW, The Print

Index last updated: 2026-04-28 22:56 UTC

Message

Re: ICC v. Transfer Function in Epson driver

2005-10-20 by Roy Harrington

--- In DigitalBlackandWhiteThePrint@yahoogroups.com, Steve Kale <stevekale@b...> 
wrote:
>
> For what it's worth, here are the areas I would like to understand a bit
> more on this stuff.  Some of these things hark back to core subjects like to
> what should we linearise etc.  I feel like I am quite close to getting to a
> level of understanding I would be happy with but I haven't closed the last
> few loops.  Any help appreciated.
> 
> 1.  I'd like to understand better the relationship between L* and XYZ_Y.  I
> have trouble thinking in cubed roots!  I thought for a minute that XYZ_Y
> followed the shape of the human perceived luminance curve but a couple of
> sample observations show that's not the case.  I'm sure that with a little
> thought I'll get there.
> 
> 2.  I'd like to better understand the actual implementation of the BPC and
> white point scaling, ie understand specifically rather than generically how
> it is implemented.  We start with, at least with a RIP, printer greyscale
> that is linear with respect to L* - how does the scaling actually affect the
> shape of this? Both in terms of L* and XYZ_Y. I hope I can take this up with
> Roy.
> 
> 3.  I'd like to understand why linearisation is best done with respect to L*
> and not XYZ_Y which is where the scaling is done.  This obviously requires
> the first item to be understood.  I would guess it has something to do with
> the linearity of L* as a concept and ease of interpolation but then on that
> I am just guessing.
> 

Linearization and scaling are pretty different issues.  I think there are good 
reasons for thinking in different units for each.  An example may help to
see the issues.

----------------

Scaling with respect to Y (and X and Z too) is probably one of the most basic 
operations.  If you consider how we see the scaling wrt Y happens all the
time.  Y is a measure of how much light or how many photons are reflected
from a surface.  Y=1 means every photon is reflected, Y=0 means no photons
are reflected and Y=0.5 half the photons are reflected.  Imagine a piece of
white paper (idealized Y=1) with a gray patch (Y=0.5).  That's a one-stop
density -- half the light is absorbed.

You look at the paper under a light, your eye is recording the photons being
reflected from the two areas of the paper.  We perceive half the photons from the
patch and call it gray.  Now move the paper closer to the light.  More photons
hit the paper and more are reflected.  In fact if 20% more hit the paper, 20%
more are reflected from all the areas.  But the relationship of the white to the
gray is still the same -- half the protons hitting the gray are absorbed.

What's really happening here?  Our eyes are seeing more photons but are
automatically scaling everything wrt to the illumination or the brightest white.
Put on some sunglasses, this reduces the number of photons again by some
percentage.  Have the iris of the eye or the aperture of a lens vary.   Again
we are linearly scaling the absolute number of photons but the relative 
relationships are remain the same.  Linear scaling of photons is exactly the
same math as linear scaling of Y.   A piece of paper with Y=0.8 and Y=0.4
with more illumination will reflect exactly the same number of photons as the
paper with Y=1 and Y=0.5.   Of course you'd need to make sure the eyes and
brain had no other points of reference about the more illumination.

This is all more of a plausibility argument than proof but I think it shows a
way to think about this that is easier to grasp.

------------------

Linearization on the other hand is a more arbitrary issue and more of a
implementation detail.  With just 256 possible gray values in a 8 bit file it
makes sense to be careful to use them is the most efficient way.  Since we
specifically care about "seeing" images making the 256 values separated
according to human perception makes sense.  The L* function was designed
for linear perception.  Exponential functions such as gamma do a pretty
good job too and historically have been used a lot since they are mathematically
simpler, but with computers that's a non-issue.

There's also one other side effect of using L* that is a potential benefit.  When
we measure a stepwedge and get series of Lab values, what about the values
between patches?  Say we have measurements for 50 and 55, what would
51,52,53,54 be?   Linear interpolation is the easiest and most straigthtforward
method and is also the best method if L* linearization is used.

-------------------

Black Point Compensation (BPC) is a bit more vague in my mind.  It is not a
feature of ICC profiles per se -- not mentioned at all.  The only document
is the Adobe bpc paper.   It clearly uses the Y = DECODE(L) function for scaling
but it is a little vague on the details.  I've used this to mimic (sort of) the approach
taken at the white end but this doesn't jive with the Y scaling arguments above.
This falls into the perceptual rendering of ICC which is specially stated as 
implementation dependent.  But the good news seems to be that we're all
doing it the same way.

Roy

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.