A contrast control is three controls
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
- An average on the stored values declared input · lightness · specification · structural choice · transfer function
- Two converters and one highlight declared input · hue quadrature · specification · structural choice · transfer function
- A catalogue is not a vocabulary chroma · cielab · lightness · specification
- A gradient is a path chroma · cielab · specification · transfer function
- A stated lightness is two requirements colour appearance · declared input · lightness · specification
- An appearance is not always a stimulus colour appearance · declared input · specification · structural choice
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