BookNotesSlidesP-sets Syllabusdraft · v0.2.49.1
◀▲⌂▶
💬Comments welcome. To leave a note, select any text and click the note / highlight button that pops up — or open the panel with the tab at the top-right (‹). Notes are visible only inside our private review group.
💡 In a hurry? Jump to this chapter’s 3 big lessons ↓

18.2 Global tone mapping⧉

A bright window and a dim room can both contain detail in a radiance map, yet be difficult to show together on a screen. A global tone map is the simplest answer: one curve, applied to every pixel, that takes scene luminance to display luminance. It can reveal information already captured, but cannot recover a clipped sensor measurement.

The curves of Chapter 8.3, Tone point operations already map input tones to output tones. Here the input is a radiance map with far more range than the output, and the curve has to compress it while keeping useful contrast. This chapter covers the classic global operators, from a single scale factor to curves shaped by the image's own histogram, and ends with the reason none of them can be the whole answer.

18.2.1 Two families: global and local⧉

Scaling every value by the same factor preserves the scene's ratios, so it cannot by itself make a large range fit a smaller one (Chapter 17.1, Dynamic range and multiple-exposure capture); something has to compress. There are two fundamentally different ways to compress the range, global and local; this chapter covers the first and the rest of the part the second (Figure 18.2.1).

A global tone map applies one function $L_\text{out}=f(L_\text{in})$ everywhere. A monotone scalar curve cannot create a new spatial maximum or minimum, so it does not generate the edge halos caused by a neighborhood filter. It can still reveal existing halos, amplify noise, produce banding after quantization, or alter colors. Compressing a large range reduces contrast over some input intervals.

A global curve redistributes contrast across intensities. For a small difference, $\Delta L_{\rm out}\approx f'(L)\Delta L$. For small relative contrast, the relevant gain is

$$G(L)=\frac{d\ln f(L)}{d\ln L}=\frac{Lf'(L)}{f(L)}.$$

A compressive log slope below one reduces relative contrast in that intensity range. The curve can allocate more contrast to populated or important ranges and compress others; it need not flatten every detail equally. The same input intensity still receives the same output regardless of its neighborhood.

A local tone map adapts to the neighborhood. One construction separates large-scale brightness from detail, compresses the former, and restores the latter. This can preserve texture while reducing the difference between a window and a wall, but the separation can mistake noise for detail and blur across boundaries.

fig-tonemap-global-vs-local
Figure 18.2.1. Global vs. local tone mapping. A global tone map is a point operation (left): one input→output curve $f(v)$ applied to every pixel, so the output depends only on the pixel's own value. A local tone map is a neighborhood operation (right): the curve adapts to a window of surrounding pixels (the local brightness), so the same input value $v$ maps to different outputs in a dark region versus a bright one. The global–local distinction is exactly range-only vs. range-and-neighborhood.

18.2.2 Scale factors and logarithms: Ward and Drago⧉

The simplest perceptually motivated operator is a single scale factor. Ward chose it so that a luminance difference that is just noticeable in the scene, at the scene's adaptation level, maps to a difference that is just noticeable on the display, at the display's adaptation level, using Blackwell's model of contrast thresholds Ward 1994 (contrast-based scale factor). With $L_{wa}$ the scene's adaptation luminance, for example its log average, and $L_{d,\max}$ the display's maximum, assumed to be viewed at an adaptation of half its maximum, the scale factor is

$$m=\left(\frac{1.219+(L_{d,\max}/2)^{0.4}}{1.219+L_{wa}^{0.4}}\right)^{2.5},\qquad L_d=m\,L_w.$$

Being linear, it preserves every ratio and keeps threshold contrasts visible at the adaptation level, which suits scenes of moderate range; for a high-dynamic-range scene it clips the highlights, since a scale factor cannot compress.

Drago and colleagues compress with a logarithm whose base adapts to the luminance Drago et al. 2003. A logarithm in base 10 compresses strongly and suits the highlights; base 2 compresses less and keeps contrast in the shadows. Their operator interpolates the base from 2 in the darkest tones to 10 at the scene's maximum $L_{w,\max}$, with a bias exponent controlling where the transition happens:

$$L_d=\frac{0.01\,L_{d,\max}}{\log_{10}(L_{w,\max}+1)}\;\frac{\ln(L_w+1)}{\ln\!\Big(2+8\,(L_w/L_{w,\max})^{\ln b/\ln 0.5}\Big)},$$

with a bias $b$ around 0.85. It is fast, has one meaningful parameter, and handles a wide range without clipping. Like every curve in this chapter, it trades local contrast for range the same way at every pixel of a given luminance.

Figure 18.2.2 runs one radiance map through these two operators and the two of the next sections, Reinhard's and histogram adjustment, and plots each curve with its gain $G$.

fig-global-operators-compare
Figure 18.2.2. Four global operators on one radiance map: Ward's scale factor, Drago's adaptive logarithm, Reinhard's photographic operator with its white point, and Larson, Rushmeier and Piatko's histogram adjustment with the linear ceiling. Each acts on luminance and keeps RGB ratios. Under each panel, the share of pixels sent to display white and to display black. The upper plot shows each curve from log scene luminance to log display luminance, limited to what a display of 100 cd/m² white and a 100:1 or 1000:1 contrast can show, over the map's own log histogram in gray. The lower plot is the curve's slope $G$, the gain in relative contrast: a curve spends contrast where $G$ is near 1 and saves it where $G$ falls toward 0. Ward's line keeps $G=1$ and clips at both display limits. Drago and Reinhard roll off smoothly toward the highlights. Histogram adjustment rises to the ceiling where the histogram is crowded and drops in the sparse gap between room and window. Lowering Reinhard's white point steepens his curve near it, above $G=1$. The maps are relative, so the scene's log-average luminance is an assumption set with a slider; only Ward's factor depends on it. Click or drag on a panel to place a probe and see where each operator puts that pixel. Radiance maps: Paul Debevec, Byong Mok Oh.

18.2.3 One curve for everything: Reinhard's photographic operator⧉

Clipping maps all values above the output limit to the same white. Scaling the maximum to that limit preserves distinctions among highlights but may leave most of the image too dark. A nonlinear curve can allocate more output range to dark and middle tones while compressing the highlights.

Reinhard et al.'s photographic operator Reinhard et al. 2002 begins by choosing an exposure scale. For nonnegative scene luminances $Y_i$,

$$\bar Y=\exp\left(\frac{1}{N}\sum_i\log(\delta+Y_i)\right),\qquad L=\frac{aY}{\bar Y}.$$

The small positive $\delta$ permits black pixels; $a$ places the log-average before compression. Then apply

$$ L_{\text{out}} = \frac{L}{1 + L}. $$

In words: take the scene luminance $L$ (which can run from 0 up to any large value) and send it through $L/(1+L)$. Read off the two ends. When $L$ is small, the denominator is near 1, so $L_\text{out} \approx L$, dark tones pass through almost unchanged, shadow contrast preserved. When $L$ is large, $L_\text{out} \approx 1$, the brightest highlights are gently drawn toward 1 but never quite reach it, so they roll off rather than clip. The entire infinite range $[0, \infty)$ maps smoothly into $[0, 1)$, with no hard clip anywhere (Figure 18.2.3). A common variant takes a white-point parameter $L_\text{white}$, the luminance you want mapped exactly to 1:

$$ L_{\text{out}} = \frac{L\left(1 + \dfrac{L}{L_{\text{white}}^{2}}\right)}{1 + L}. $$

A finite $L_\text{white}$ maps that value to 1, but values above it exceed 1; it is not an asymptote. All these luminances use the exposure scale defined above. For RGB, compute the mapped luminance $Y_\text{out}$ and multiply all channels by $Y_\text{out}/Y$ for $Y>0$, mapping black to black. This preserves RGB ratios before gamut mapping. It does not guarantee constant perceived hue or that each channel fits the output gamut. The result is display-linear RGB, to which we then apply the output encoding.

The white-point variant has a property worth knowing: near white its contrast gain $G$ exceeds one, up to about two for a low white point, so it adds contrast in the brightest tones rather than compressing them.

The key value is an exposure control, not the final displayed middle gray: $a$ becomes $a/(1+a)$ under the basic curve. A value such as 0.18 is a starting point, not an automatic exposure requirement.

fig-reinhard-curve
Figure 18.2.3. The Reinhard global tone curve $L_\text{out} = L/(1+L)$, mapping $[0,\infty) \to [0,1)$. Left, the curve plotted against scene luminance: near the origin it hugs the 45° diagonal (dark tones nearly unchanged, shadow contrast preserved); as $L$ grows it bends over and asymptotes to 1, so highlights roll off smoothly and never clip. Right, the operator applied to a real HDR radiance map (a sunlit office) versus a naive clip-at-1: exposed for the room and clipped, the bright window blows to flat white, while Reinhard keeps detail in both the window and the room. A single monotone curve: no halos, but bright and dark regions share one slope.

The operator's own paper, which framed the whole method as digital photographic printing, makes both the curve and its key parameter concrete.

fig-tone-reproduction-1
Figure 18.2.4. The operator versus a straight rescale. The same HDR interior (a cluttered desk with an eye chart on the wall) tone-mapped two ways: a linear map (top), which forces a single scale on the whole range so the lamp blows out and the shadows sink, against Reinhard's new operator (bottom), where highlights roll off and shadow detail survives at once. The teaser that opens the photographic-tone-reproduction paper (Reinhard et al. 2002).
fig-tone-reproduction-5
Figure 18.2.5. The "key" knob: the digital light meter. One HDR sunset is mapped at four key values (0.09, 0.18, 0.36, 0.72), the parameter that sets where the scene's middle gray lands before the $L/(1+L)$ roll-off, exactly the Zone System's "place this tone in Zone V" and the levels chapter's mid-tone choice, automated. Low key gives a dark, moody develop; high key an airy, bright one; the same HDR data, re-anchored (Reinhard et al. 2002).

Reinhard is a compact example of global compression. Gamma and log curves also change relative contrast, while an S-curve can increase midtone contrast and compress both ends. The appropriate curve depends on the scene and the desired appearance; the beauty-curve chapter discusses that choice.

💡 Big lesson (L18.1) — a gentle highlight roll-off tames dynamic range

A global curve can reveal recorded highlights while allocating useful contrast to the rest of the image. Check its effect on local contrast and color. It is inexpensive and predictable, but composition order still matters: exposure followed by a curve differs from a curve followed by exposure.

The same operator, with the same parameters, holds up across very different scenes, which is much of why it became the default global curve.

fig-tone-reproduction-15
Figure 18.2.6. Photographic tone reproduction across a gallery of scenes. A wide range of HDR captures (a cathedral interior, a stained-glass rose window, a hazy forest, a dim aquarium, a sunlit arch), each labeled with its dynamic range in zones (the Reinhard paper's own nod to Adams), all developed by the same operator. The point is robustness: one principled, parameter-light global curve handles five to eleven zones of range without per-scene fiddling (Reinhard et al. 2002).

18.2.4 Histogram adjustment: a curve shaped by the image⧉

The display has a limited budget of contrast: its few stops of range, to be divided among the intensities of the scene. A curve that is steep over some range of scene luminance gives those intensities a lot of contrast, so their differences stay visible; a curve that is flat there merges them. Now look at the histogram of a high-dynamic-range scene in log luminance (Figure 18.2.7). It is rarely spread evenly. An interior with a window has a large mound for the walls and furniture, a smaller one far to the right for the view outside, and comparatively few pixels in between: the intensities between the brightest wall and the darkest part of the window are present in a small fraction of the image, about a tenth in the office of the figure. A curve that spends contrast evenly across the whole range, a straight line in log-log coordinates, gives that sparse gap as much of the display's range as the walls, and those stops are largely wasted, since little there needs them. It is better to make the curve flat across the gap and steep where the pixels are, so that the walls and the view each get most of the range they need.

That is the idea of histogram-based tone mapping: allocate display contrast according to the image's intensity distribution. Larson, Rushmeier and Piatko constrain histogram adjustment using a visibility model (Ward et al. 1997).

fig-hdr-histogram-budget
Figure 18.2.7. The display's contrast budget against the histogram of an HDR scene, an office with a large bright window. Top, in log-log coordinates, the histogram of log luminance (gray) over 14.5 stops: a mound for the room, a trough of 2.5 stops that holds about 11% of the pixels, and a mound for the window. A straight line that maps the whole range onto the display's 7 stops spends contrast evenly: it gives the trough 1.2 display stops (shaded red), range spent on intensities few pixels have. The cumulative histogram, used as the tone curve, is flatter across the trough, 0.76 stops, and steeper over the two mounds, where the pixels are. Bottom, the two renderings: under the second curve the window and the brighter parts of the room both gain contrast. Radiance map by Byong Mok Oh; histogram equalization in log luminance, without Ward's ceiling on the slope.

The method begins from a familiar image-processing reflex: histogram equalization, introduced in Chapter 8.7, Histograms for ordinary images (Figure 8.7.5). We build the histogram of the scene's (log) luminances, then make the tone curve the cumulative distribution of that histogram. Where many pixels cluster (the mid-tones of a typical room) the curve is steep, spending lots of display range and so lots of contrast; where the histogram is sparse (the empty gulf between a dark interior and a bright window) the curve is flat, spending almost nothing. Adapting the curve to the image's own statistics is exactly the right instinct: the bins the scene populates get the contrast, the bins it doesn't are compressed away. But taken naively it overshoots badly. A heavily-populated bin earns a curve slope greater than one, which amplifies contrast there, exaggerating noise and pushing a flat wall or a patch of sky into a contrast it never had, an artificial, over-cooked look (the histeq panel below).

fig-histogram-equalization
Figure 8.7.5 (reproduced). Histogram equalization. The image's cumulative histogram (CDF) is used directly as the transfer curve $L_\text{out} = \text{CDF}(L_\text{in})$ (center). Before (left): the input and its bunched, uneven histogram. After (right): the equalized image and its now roughly flat histogram, every bin holds about the same count. The CDF is steep where pixels are crowded (pulling those tones apart) and shallow where they are sparse, which is why the output histogram levels out. The global contrast is maximized, often too aggressively.

Their constraint is a cap on the slope of the tone curve. In log luminance, the equalized curve's slope at a given luminance is proportional to the histogram count there, so a crowded bin gets a steep curve. Larson and colleagues require that slope never exceed what the eye's contrast discrimination allows: a luminance difference that is just visible in the scene, at the scene's adaptation level, may map to at most a just-visible difference on the display, at the display's adaptation level. In the simplest version, which assumes Weber's law at both ends, the cap is a slope of one in log-log coordinates: the display never shows more contrast than the scene had. The published method replaces Weber's law with a threshold-versus-intensity function, which makes the cap vary with brightness and can let it exceed one. The eye's threshold contrast grows as luminance falls, so where the display shows a pixel dimmer than the scene did, a just-visible difference needs more contrast on the display than in the scene, and the cap allows it: at the default settings of Figure 18.2.8, slopes reach about 2.6. When the cap cannot be met at all, as in very dim scenes, the method falls back to a linear map.

Figure 18.2.8 follows the method step by step on a radiance map, from the histogram and its equalization curve to the ceiling, the trimming and the final curve.

fig-histogram-adjustment-steps
Figure 18.2.8, stage 3. Interactive. Larson, Rushmeier and Piatko's histogram adjustment, step by step, on a radiance map of a design center lit through a daylit door; the numbered chips step through the method. Top left, the histogram of log scene luminance in 100 bins. Below it, the tone curve from scene luminance to the luminance of a display with a white of 100 cd/m², both on log axes. Right, the map rendered under each curve. Equalization uses the cumulative histogram as the curve, so its log-log slope in a bin is that bin's share of the samples divided by the bin width and multiplied by the display's log range (right-hand axis): the crowded bins of the interior get slopes up to 3.2 (red), more contrast than the scene had. This stage draws the ceiling that caps the slope. Under Weber's law it is flat, a slope of 1 and the same count for every bin, and here a third of the samples lie above it. The threshold-versus-intensity ceiling depends on absolute luminance. Its ratio to the Weber ceiling is the threshold function's Weber fraction at the display luminance over its Weber fraction at the scene luminance, and that fraction never grows with luminance: the ceiling is at least as high wherever the curve maps a scene luminance to a dimmer display luminance, since the eye then needs more physical contrast to see the same difference, at most as high where it maps it to a brighter one, and the same where both are above about 80 cd/m², where the threshold function follows Weber's law. The maps are relative, so the scene's log-average luminance is an assumption, set with the scene adaptation slider. Radiance maps: Byong Mok Oh (design center, office) and Paul Debevec.

The procedure turns the cap into a limit on each histogram bin and enforces it by trimming:

Algorithm 18.2.1
b = histogram(log(L_foveal), bins)          # luminance sampled about once per degree of view
total0 = sum(b)
repeat:
    ceiling = count_limit_from_slope_cap(b)  # the most a bin may hold, given the current total
    trimmed = sum(max(b - ceiling, 0))
    b = min(b, ceiling)
until trimmed < 0.025 * total0             # the paper stops once a pass trims under 2.5% of the original count
curve = cumulative(b) / sum(b)              # maps log scene luminance to log display luminance

Trimming lowers the total, which lowers every bin's ceiling, which is why it iterates. The curve keeps equalization's adaptivity, spending display range where the scene's values are, while the cap prevents it from manufacturing contrast beyond the model's visibility limit in the crowded bins. That is a perceptually motivated model, not a guarantee that the output never enhances noise or looks objectionable: it depends on the assumed adaptation levels and viewing conditions.

The trimming stage of Figure 18.2.8 runs this loop one pass at a time.

fig-histogram-adjustment-steps
Figure 18.2.8, stage 4. The trimming. Each pass cuts every bin down to its ceiling (the counts cut so far are shown faded) and recomputes the curve from what is left. Cutting lowers the total, which lowers the ceiling for the next pass (dashed), so the loop repeats until a pass cuts less than 2.5% of the samples, the paper's tolerance. On the design center and a 7-stop display that takes 5 passes and removes 58% of the samples. The converged curve (last chip) is equalization with its steep stretch flattened, largest slope 1.05, just above 1 because of the tolerance; it darkens the interior and gives the brighter parts of the scene, which equalization squeezes into the top of the display, more of the range. Move the pass slider to watch the histogram and the curve settle. With the threshold-versus-intensity ceiling and a scene adaptation of 0.1 cd/m², 89% of the samples are cut and the picture comes out darker and flatter, the reduced visibility of a dim scene that the model is built to reproduce; at the default 32 cd/m² every pixel is shown dimmer than it was in the scene, the ceiling sits above slope 1, and the curve keeps slopes up to 2.6. The histogram is built from the map at the figure's working resolution rather than from the paper's one-degree samples.

Figure 8.7.13 overlays the three curves: the straight line that ignores the histogram, equalization with its slopes above one, and histogram adjustment, which follows equalization's shape with every slope clipped.

fig-ward-tro-mapping-comparison
Figure 8.7.13 (reproduced). The three tone-reproduction curves overlaid (linear, naive histogram equalization, and constrained histogram adjustment), plotted against scene log-luminance. The linear curve is one straight line that ignores the histogram; the equalization curve swings to steep slopes (greater than one) over populated bins; the adjustment curve follows the same adaptive shape but with every slope clipped to the contrast-sensitivity ceiling, flattening the over-steep segments. Reading the slopes side by side is the whole argument: the constraint reshapes the mapping so the spent contrast stays perceptually faithful. Larson, Rushmeier & Piatko 1997.

The result is still one curve. Two pixels of equal luminance get the same output whatever surrounds them, so histogram adjustment still trades global range against local detail, only more carefully than a fixed gamma or shoulder. Keeping local contrast while compressing range requires a mapping that depends on each pixel's neighborhood, the local methods of the following chapters. A fair comparison puts it beside a simpler curve and a local operator under the same display conditions (Chapter 8.7, Histograms).

Figure 8.7.12 shows the three renderings side by side; the operator is first built in Chapter 8.7, Histograms, where the same figures appear.

fig-ward-tro-compare
Figure 8.7.12 (reproduced). Ward's HDR bathroom test scene under three tone operators, side by side. Left, linear / global: a fixed curve cannot seat both ends of the range, so window highlights clip to white and shadowed corners block to black. Center, naive histogram equalization: the tone curve is the cumulative histogram, so densely-populated luminance bins earn a slope greater than one and their contrast is amplified. The range now fits, but noise and flat surfaces are pushed into an artificial, exaggerated contrast the real scene never had. Right, Ward and Larson's constrained histogram adjustment: equalization with a ceiling, the slope capped at the eye's contrast-sensitivity limit, so it stays adaptive without ever over-boosting, natural and display-fit. Larson, Rushmeier & Piatko 1997.

18.2.5 Why log space helps⧉

Log luminance makes relative contrast convenient to manipulate. Scaling a log difference by $c$ changes the corresponding luminance ratio $R$ to $R^c$. For $0<c<1$, this compresses the ratio. Multiplication in linear light is already simple; the benefit here is that ratios become differences that can be separated into base and detail.

This is why the local methods of the following chapters work on log luminance: a base and a detail layer of the log image are a large-scale ratio and a local ratio, and compressing the base compresses large ratios while leaving local ones alone (Chapter 18.3, Two-scale and bilateral tone mapping).

💡 Big lesson (L4.6) — additive vs. multiplicative → work in log

Choose an encoding for the operation. Add independent light contributions in linear light. For relative-contrast decomposition, log luminance turns ratios into differences, so a base and a residual can be combined by addition.

💡 Big lesson (L18.2): tone-map in the log domain when the operation acts on ratios

Log luminance is useful when the operation should act on intensity ratios, as in additive base/detail decomposition or gradient attenuation. Other operators, including Reinhard's $L/(1+L)$, can be formulated directly in linear luminance. Match the representation to the operation; do not take logarithms of nonpositive values.

18.2.6 From luminance to color⧉

Most operators in this part compute a new luminance and leave the color to a separate rule. With linear RGB $c$ and positive luminance $L$, scaling by $L_{\rm out}/L$ preserves RGB ratios before clipping:

$$c_{\rm out}=c\,\frac{L_{\rm out}}{L}.$$

Very small or nonpositive luminances need a guard, and gamut excursions need inspection. Preserving linear RGB ratios does not guarantee constant perceived hue or saturation after display mapping. Applying separate nonlinear curves to channels changes those ratios. The chosen color space and gamut treatment should be stated with the result. The alternative, applying the curve to each channel separately, desaturates bright colors toward white, which is sometimes wanted and sometimes not; Chapter 18.8, Display rendering transforms and color treats the choice in detail.

18.2.7 Why a single curve cannot win⧉

At a given input level, a global curve gives every pixel the same adjustment. If a window and a wall require different treatments at that level, one curve cannot supply them. A local operator can, at the cost of neighborhood-dependent artifacts and more parameters.

fig-tonemap-real
Figure 18.2.9. Global vs. local tone mapping on a real HDR photograph, the real-image companion to the schematic global-versus-local figure earlier in this chapter. Left, a naive single exposure: lift the shadowed subject and the bright water and boats wash out. Middle, global Reinhard $L/(1+L)$ compressed hard enough to fit the whole range: it fits, but the one slope flattens local contrast everywhere, so the image goes hazy and lifeless. Right, a local tone map: split the log-luminance into an edge-aware (bilateral) large-scale layer and a detail layer, compress only the large-scale layer, keep the detail; the same range squeezed in, but the fur, dock texture and boats stay crisp. Same scene, same compression target; global flattens, local keeps the detail.

Consider a dark textured wall and a bright textured cloud. A global curve must assign the same output and the same local slope whenever their input values coincide. Flattening a broad part of the curve to fit the scene range also reduces small variations that fall in that part. A local method can treat the wall and cloud differently by using their neighborhoods, but then the transition between neighborhoods becomes part of the problem. The global/local choice trades one consistent mapping for spatial flexibility; it does not make range compression free.

The argument can be made exact with the gain $G(L)$ of the two-families section. A curve that compresses a range of $R$ stops into $r<R$ has an average log-log slope of $r/R$, so over most of the range it must reduce relative contrast, and a small texture at any luminance in that range is reduced along with the large difference that had to be compressed. No choice of shape escapes this, since the curve sees only the value, not whether a variation is the edge of a window or the grain of a wall. Keeping local contrast while compressing the range needs spatial processing: a mapping that depends on each pixel's neighborhood. The rest of the part develops the five ways of doing that (Figure 18.2.10).

fig-tonemap-taxonomy
Figure 18.2.10. A taxonomy of local tone-mapping operators, all answering the same question: separate large-scale brightness (compress it) from local detail (keep it). A tree or table with five branches, each tagged with the chapter of this part that develops it: bilateral base/detail, an edge-preserving split with the base compressed (Durand & Dorsey 2002; Chapter 18.3, Two-scale and bilateral tone mapping); exposure fusion, a pyramid blend of a bracket by per-pixel quality with no HDR map formed (Mertens et al. 2007; Chapter 18.4, Exposure fusion); local Laplacian and other multiscale methods, remapping built per pyramid level (Paris et al. 2011; Chapter 18.5, Local Laplacian filtering and other multiscale methods); gradient-domain, attenuate large gradients and re-integrate (Fattal et al. 2002; Chapter 18.6, Gradient-domain tone mapping); learned, a local affine tone map predicted from expert edits (HDRnet, Gharbi et al. 2017; Chapter 18.8, Display rendering transforms and color).

18.2.8 Choosing and checking a tone map⧉

We start by checking whether the recorded highlights contain usable detail and whether the shadows contain signal above noise. Choose output brightness and contrast for the destination. A global curve is inexpensive and easy to inspect; add local adjustment when regions need different treatment. We then check strong edges for halos and flat shadows for amplified noise, at viewing size and in a pixel-level crop.

Camera looks and raw-developer defaults encode choices of curve and of local adjustment. They are best compared at a common output brightness and size, looking at faces, skies, saturated highlights and dark texture. A rendering with more visible detail is not automatically the better photograph.

Recap: big lessons of this chapter

💡 Big lesson (L18.1) — a gentle highlight roll-off tames dynamic range

A global curve can reveal recorded highlights while allocating useful contrast to the rest of the image. Check its effect on local contrast and color. It is inexpensive and predictable, but composition order still matters: exposure followed by a curve differs from a curve followed by exposure.

💡 Big lesson (L4.6) — additive vs. multiplicative → work in log

Choose an encoding for the operation. Add independent light contributions in linear light. For relative-contrast decomposition, log luminance turns ratios into differences, so a base and a residual can be combined by addition.

💡 Big lesson (L18.2): tone-map in the log domain when the operation acts on ratios

Log luminance is useful when the operation should act on intensity ratios, as in additive base/detail decomposition or gradient attenuation. Other operators, including Reinhard's $L/(1+L)$, can be formulated directly in linear luminance. Match the representation to the operation; do not take logarithms of nonpositive values.