What a camera does

A contrast control is three controls

A tone curve is a function of one number at a time and knows nothing about hue. Applied to each channel separately it rotates a hue circle by up to seventeen degrees, raises chroma by a factor of 1.27 at ordinary strength, and lifts lightness — so a photographer who moves a contrast slider has moved three things and the interface names one of them. All three scale with the curve's strength, monotonically, and the hue rotation depends on which hue it is.

Assumes One step has no choice, A blown highlight turns and Brighter looks more colourful.

A tone curve is the simplest object in a raw converter. It takes one number between nought and one and returns another, it is monotone, and it is drawn in every piece of imaging software as a line in a square — the shape an encoding uses for the same reason. It has no idea what a colour is.

A hue circle through a per-channel curve. 28 colours on a circle of constant lightness 55 and chroma 38, each put through the tone curve one channel at a time and read back. The curve is a function of a single number and has no idea what hue is, and it rotates the circle by up to 4.4 degrees — largest at hue 260 — while raising chroma by a factor of 1.27 and lightness by about 1 units.
Fig. 1 A circle of constant lightness and chroma, put through the tone curve one channel at a time and read back. The curve knows nothing about hue and moves it anyway.

The claim

A tone curve applied to each channel separately is three operations, and the interface names one of them.

  • It rotates hue by up to 4.4 degrees at a mid lightness and 17.0 at a light one, and the rotation changes sign four times around the circle.
  • It raises chroma by a factor of 1.27 at ordinary strength, rising to 1.34 at the strongest setting measured.
  • It raises lightness by 0.95 units at a mid lightness, which is the effect the control is actually named after.
  • All three scale monotonically with the curve’s strength, from a hue rotation of 0.7 degrees and a chroma gain of 1.04 at the gentlest setting to 5.7 degrees and 1.34 at the strongest.
  • Priced separately the three come to 3.44, 0.90 and 0.65 colour differences, so the largest is the one with no label, and none of the three is separable from the others without abandoning what a tone curve is.

Why a per-channel function moves hue

Hue, in any of the spaces anybody uses, is a ratio between channels. A colour’s a* and b* are differences between compressed channel values, and its hue angle is the arctangent of their ratio; a camera’s raw hue is a ratio of R to G to B. Anything that changes the ratios changes the hue, which is why a channel reaching its ceiling turns one so far.

A per-channel curve changes the ratios whenever it is not a straight line through the origin, and it is never a straight line through the origin, because a straight line through the origin is a gain and a gain is not a tone curve.

The curve, and what it does to a mid grey. The tone curve used throughout these essays: a smooth S applied in the encoded variable, at strength 0.70, plotted here against linear light. The diagonal is the identity. Its slope through the middle is 1.34 against 0.50 at the toe, which is what makes it a contrast control: the middle of the range is stretched and both ends are compressed. An eighteen per cent grey comes out at 16.9 per cent. Everything measured here follows from the curve being applied to each channel separately.
Fig. 2 The curve itself, at the strength used throughout. Its slope through the middle of the range is about twice its slope at the toe, which is exactly what makes it a contrast control — and exactly what makes it turn hue.

The mechanism is one sentence. A colour whose three channels are unequal has them made more unequal where the curve is steep and less unequal where it is shallow. A colour sitting in the steep middle of the curve on one channel and on the shallow toe on another comes out with its ratio changed, and the change is a rotation in the plane the two channels span.

That is why the rotation depends on the hue. A colour whose channels all sit in the same part of the curve is barely rotated; one whose channels straddle a change of slope is rotated a lot. Which colours those are is a joint property of the curve’s shape and of the primaries the channels belong to.

How much, and where

The measurement takes a circle of constant lightness and chroma in CIELAB, keeps the points a display can show, runs each through the curve one channel at a time, and reads the result back.

A contrast control is a saturation control and a hue control. The same hue circle at five curve strengths. The worst hue rotation rises monotonically from 0.7 degrees to 5.7, and the chroma gain from 1.04 to 1.34. A photographer raising contrast is raising saturation by an amount nobody wrote down and turning hue by an amount that depends on which hue it is.
Fig. 3 The same circle at five curve strengths. The worst hue rotation and the chroma gain both rise monotonically, and neither is announced by the control that produces them.

At the strength a converter’s default curve uses, the worst rotation on a mid-lightness circle is 4.4 degrees, the mean absolute rotation is 1.45, and the chroma comes out 1.27 times what it went in as. Softening the curve to a fifth of that strength drops the rotation to 0.7 degrees and the chroma gain to 1.04; hardening it raises them to 5.7 and 1.34.

The monotone rise is the check that the effect is the curve’s. An effect that peaked at some intermediate strength, or that did not vanish as the curve approached the identity, would be an artefact of the measurement rather than a property of the curve.

A hue circle through a per-channel curve. 36 colours on a circle of constant lightness 75 and chroma 38, each put through the tone curve one channel at a time and read back. The curve is a function of a single number and has no idea what hue is, and it rotates the circle by up to 17.0 degrees — largest at hue 260 — while raising chroma by a factor of 1.06 and lightness by about 5 units.
Fig. 4 The same circle at a lighter level. The rotation reaches 17.0 degrees here, four times the mid-lightness figure, because a light colour’s channels sit further apart on the curve.

Lightness changes the answer more than strength does. At L* 75 the worst rotation is 17.0 degrees against 4.4 at L* 55 — because a light colour of the same chroma has one channel near the top of the curve, where the slope has fallen away again, while another sits in the steep middle.

A hue circle through a per-channel curve. 24 colours on a circle of constant lightness 35 and chroma 38, each put through the tone curve one channel at a time and read back. The curve is a function of a single number and has no idea what hue is, and it rotates the circle by up to 8.6 degrees — largest at hue 70 — while raising chroma by a factor of 1.16 and lightness by about -4 units.
Fig. 5 And at a darker level, where the worst rotation is 8.6 degrees. The three levels do not order simply, because what matters is not how dark the colour is but how far apart its channels sit on the curve.

At L* 35 the worst rotation is 8.6 degrees. So the three levels give 8.6, 4.4 and 17.0 going up, which is not monotone and should not be: the quantity that matters is how far apart a colour’s channels sit on a curve whose slope varies, and that is largest at the ends of the range rather than at either extreme of lightness.

The chroma gain does order. It is 1.16, 1.27 and 1.06 at the three levels — largest in the middle, where the curve is steepest, which is the same steepness that produces the contrast the control is named for.

Which hues move, and why those

The mean rotation is not the useful statistic, because the rotation is not uniform: it changes sign four times around the circle and reaches its extremes in two narrow places.

At a mid lightness the largest rotations are +4.4 degrees at hue 260 and −4.4 at hue 170 — a violet-blue and a cyan-green. Between them the rotation passes through zero near hue 50, near 125 and near 345, so the circle is divided into four sectors that turn alternately one way and the other.

The pattern is what a per-channel operation produces. A colour whose three channels are unequal has them made more unequal where the curve is steep and less unequal where it is shallow, so the rotation is a difference of slopes and changes sign wherever two channels swap which side of the steep region they are on. The zero crossings are where a colour’s two dominant channels sit at equal slope; the extremes are where they sit furthest apart.

That gives a rule of thumb worth having, and it is not the comfortable one. The colours that move least are scattered around the circle at the crossings, and the colours that move most are the blues and cyans — which is to say skies and water.

It also explains why the effect is so rarely named. The colours a photographer checks a hue shift against are skin and foliage, both of which sit within a degree or two of a crossing at ordinary lightness. Skies move four times as far, and a shifted sky is read as a different rendering rather than as a defect, because nobody has a reference for what that sky should have been.

The lightness change, taken seriously

The third effect is the intended one and is worth measuring because its size is not what a reader would guess.

At a mid-lightness circle the curve raises L* by 0.95 units on average at the strength a converter’s default uses, with a range from 0.55 to 1.95 around the circle. That is small — a fifth of what the chroma gain is worth in colour differences — and it is the entire point of the control.

The reason it is small is that lightness is where the curve’s effect is supposed to go, and a curve that moved the middle of the range a long way would be a curve nobody would ship. Its whole design is to steepen the middle without displacing it, so the mid-tones stay where they are and the ends compress. A colour at L* 55 is near the pivot and barely moves; the light and dark ends of the picture move much more, in opposite directions, which is what contrast is.

So the three effects have quite different shapes over the range. The lightness effect is antisymmetric about the pivot and nearly zero at it. The chroma gain is largest at the pivot, where the slope is steepest. The hue rotation is largest away from the pivot, where the channels straddle a change of slope. A slider that moved all three by the same profile would be much easier to reason about and would not be a tone curve.

The one nobody objects to

Of the three effects, the lightness change is the intended one and the chroma gain is the one photographers know about.

That a contrast increase raises apparent saturation is folklore in every photographic community, is the reason software offers a saturation control alongside contrast, and is usually explained as a perceptual effect — the eye seeing more colour in a more contrasty picture. Some of that is real: colourfulness rises with light level and an appearance model predicts it, which is one of the few things it does predict.

But most of it is not perceptual at all. The chroma really is 1.27 times larger, measured in CIELAB, before any eye is involved. It is arithmetic in the converter, and the perceptual story is an explanation offered for a mechanical fact.

Three exchanges, two of which move the colour. The documented pipeline is a white balance, a colour matrix, a tone curve and a clip. Each bar is what happens when two neighbours change places, over 30 surfaces the modelled sensor captures: the filled bar is the mean and the tick is the worst patch. Exchanging the balance and the matrix costs 9.4 colour differences at the mean and 13.6 at the worst. Exchanging the curve and the clip costs exactly nothing, and that is a theorem rather than a small number: a monotone curve onto the unit interval commutes with clamping to it.
Fig. 6 The pipeline’s three exchanges at the strongest curve. The matrix-and-curve exchange grows with the curve’s strength, because that exchange is entirely about the curve mixing with the matrix.

The hue rotation is the one nobody discusses, and its size explains why: at a few degrees it is below what most viewers would name as a hue change and above what a colourist matching two shots would accept. It sits in the band where an effect is felt as something is slightly off rather than seen as itself.

A contrast control is a saturation control and a hue control. The same hue circle at five curve strengths. The worst hue rotation rises monotonically from 2.3 degrees to 22.1, and the chroma gain from 1.01 to 1.08. A photographer raising contrast is raising saturation by an amount nobody wrote down and turning hue by an amount that depends on which hue it is.
Fig. 7 The same sweep at a lighter circle, where the rotation is four times larger. Both quantities still rise monotonically with the curve’s strength, which is the check that the effect belongs to the curve.

The two sweeps together do the work a single one cannot. Monotone rise at two different lightnesses, with the same shape and different magnitudes, is what a mechanism looks like; a single monotone curve could be a coincidence of the level it was measured at.

The three effects, side by side in one number

Putting the three into a common unit says which of them a viewer is actually seeing, and the common unit is a colour difference.

At the default strength, on a mid-lightness circle, each effect is applied alone and priced: the lightness change is worth 0.90 colour differences at the mean and 1.82 at the worst, the chroma gain 3.44 and 4.08, and the hue rotation 0.65 at the mean, 0.55 at the median and 1.91 at the worst. So the unnamed effect is nearly four times the named one, and the third sits below both.

That ordering is stable across the strengths measured and it is the whole argument in one line. A control called contrast moves lightness by 0.9 colour differences, saturation by 3.4 and hue by 0.7 — and its label describes the middle one while the largest goes unmentioned.

It is also why the control feels as strong as it does. A slider whose largest effect were the one it is named after would need a much wider range to produce a visible change, and the reason a small contrast adjustment is immediately obvious is that most of what it is doing is not contrast.

Whether it can be fixed

The obvious repair is to apply the curve to lightness alone and leave the ratios untouched, and it is worth being precise about why converters do not.

Such a curve exists and is easy to write: convert to a lightness-chroma space, apply the curve to lightness, convert back. It preserves hue and chroma exactly, by construction. And it does not do what a tone curve is for.

A per-channel curve’s chroma gain is not a side effect; it is most of the appearance of contrast. A picture whose lightness has been stretched and whose chroma has been left alone looks flat and slightly grey — the complaint a rendering intent produces for the same reason — because a real scene photographed with more contrast does have more chroma separation between its light and dark regions. The per-channel curve reproduces that by accident and a lightness-only curve removes it on purpose.

The matrix that follows from the arrangement. The nine numbers a converter ships are a linear least squares in tristimulus values, which has one answer and a closed form. Measured through the curve and the clip the same objective has neither: descended from the linear answer it falls from 1.27 to 1.01 colour differences, a factor of 1.26. The bars are how far each surface moves between the two matrices — 0.71 at the mean and 1.27 at the worst. A better score that rendered the same would not be worth having; this one does not.
Fig. 8 The matrix refitted through the pipeline, from the first rung. That refit is the converter’s one available compensation for everything the curve does, and it is fitted on a chart rather than on the picture.

So the three effects are not three independent controls that happen to share a slider. They are three consequences of one operation, two of which are wanted and one of which is not, and separating them means giving up the operation.

What a converter can do — and what the better ones do — is compensate. A hue-preserving variant that keeps the ratio while applying the curve to the maximum channel, or a per-channel curve followed by a hue correction fitted on a chart, are both in use. Neither is documented as a colour transform, and both change the picture in ways nothing in the file records.

The compensations, and what they cost

Three repairs are in use and each trades the defect for a different one, which is worth setting out because a reader choosing between converters is choosing between these.

Apply the curve to the maximum channel and scale the others. This preserves the ratios exactly, so hue and saturation survive by construction. What it loses is the chroma gain, and with it most of the appearance of contrast — so converters that do this generally add a saturation boost afterwards, which is the removed effect being put back by hand with a parameter nobody tuned against a chart.

Apply the curve per channel and correct the hue afterwards. The correction is fitted on a chart, so it is exact on the chart’s twenty-four colours and an interpolation everywhere else — which is the same defect a profile has, one level further down the chain. It preserves the chroma gain, which is what it is for.

Apply the curve in a lightness-chroma space. Exact by construction on all three quantities, and it removes the chroma gain completely, so it is used where fidelity matters more than appearance and almost nowhere in consumer conversion.

None of the three is announced in a file’s metadata, and the three produce visibly different pictures from one raw file with the same matrix and the same nominal curve. That is the previous rungs’ finding arriving in a new place: the specification names the objects and not the operations performed with them.

What was computed, and how

The circle is thirty-six hues at constant lightness and chroma in CIELAB; the ones outside the display gamut are dropped, which is why the count varies with lightness — twenty-four at L* 35, twenty-eight at L* 55, thirty-six at L* 75.

Each colour is taken to linear display values, put through the tone curve channel by channel, and read back to CIELAB. Nothing else in the pipeline is involved: the balance and the matrix are identity operations on a colour already specified in display coordinates, so what is measured is the curve alone.

A clipped channel turns the hue of what is left. CIELAB hue shift against exposure for one saturated stimulus, measured against the same stimulus rendered without clipping. Nothing moves until the first channel reaches the ceiling at 0.25 stops; after that the recorded hue rotates by as much as 93 degrees, with nothing in the scene having changed colour.
Fig. 9 The other way a converter turns a hue, from an earlier round: a channel reaching the ceiling. That effect is much larger and only affects highlights; this one is smaller and affects everything.

The curve is a smooth S applied in the encoded variable — the same one the rest of this ladder uses — at strengths from 0.1 to 0.9. At strength zero it is the identity, and every quantity here goes to zero with it, which is checked rather than assumed — the habit this collection ends every gate with.

The chroma gain is reported as a mean over the circle rather than a worst case, because unlike the hue rotation it is nearly uniform: every hue is scaled up, and the range across the circle is 1.17 to 1.32 about a mean of 1.27. That uniformity is why it reads as a saturation change rather than as a distortion — a gain that varied by a factor of two around the circle would be seen as a hue problem instead.

Where the model stops

The curve here is global and fixed. Every current converter applies a local tone map whose slope varies with position, and a local curve’s hue rotation varies across the frame — so two parts of one object can be rotated by different amounts, which is a defect this measurement has no way to reach.

The measurement is in CIELAB, so the hue it reports is CIELAB hue, which is not the hue an observer names: the space’s axes are not the unique hues and its hue angle is not perceptually even. A rotation of four degrees means different things at different hue angles — the eleven basic terms divide the space very unevenly — and the honest form of the result is the angles rather than a single number.

And nothing here says what a viewer would notice. A four-degree rotation is well above a just-noticeable difference for a side-by-side comparison and well below what anybody would report looking at one picture, which is the band where a measured colour error and a perceived one part company.

The generalisation

The habit is about a control whose name describes one of its effects.

An interface offers a slider labelled with the thing its designer was thinking about. The operation underneath does that thing and whatever else follows from doing it, and the rest is unlabelled — not hidden, exactly, but not named, which for a user is the same. The gap is largest when the underlying operation acts on a representation the label does not mention: a per-channel curve labelled contrast, a gain labelled exposure, a blur labelled softness.

The move is to measure the control’s effect on every quantity a user could care about, not only the named one. It is a sweep and a table, and it takes an afternoon.

The failure mode is that users learn the unlabelled effects as folklore and explain them with theories. Every photographic community knows that contrast raises saturation and most of them explain it perceptually, which is a good theory for the wrong reason and leaves the actual mechanism — a monotone function applied to three numbers separately — undiscussed.

Who found it, and when

That per-channel tone curves shift hue is known to the people who write them, and the hue-preserving variants that exist are the response. It is discussed in the colour-grading literature under the name hue skew and in film emulation as a feature rather than a defect — the same status a press’s dot gain has — since film’s own per-layer curves do the same thing and its characteristic colour is partly that.

What does not seem to be published is the size, as a function of the curve’s strength and of where in the space the colour sits. The numbers here are for one curve and one set of primaries and are meant as an order of magnitude rather than as a standard.

Where the ladder goes next

A curve applied to each channel turns out to move three quantities. The next question is what happens to the one operation everybody believes is exactly a scalar: a stop of exposure is a multiplication in front of the curve, and a stop taken afterwards is a multiplication behind it, and the two are not the same picture.

What this makes readable

Essays that name this one as a prerequisite.

Named alongside this one

Essays reaching for the same objects. Nobody chose these; they are what the index of named objects makes visible.

What links here

Every essay whose body links to this one.

The objects this essay names

Each one links to every other essay that touches it.

ChromaCIELABColour appearanceDeclared inputHue quadratureLightnessSaturationSpecificationStructural choiceTransfer function