• the **part theme made into a recipe**: the cheapest way to run an expensive operator is *not to run it at full resolution at all*. **Downsample → run the cheap/slow operator at low resolution → upsample the result.** Most useful image operations (tone curves, exposure/color adjustment, dehazing, depth/matte estimation, a learned enhancement) vary **slowly in space**, so their *output* is low-frequency even when the *image* is not — you lose almost nothing by computing them coarse and paying only a cheap upsample. Cost drops by the downsample factor squared.
• **why naive (bilinear) upsampling is wrong**: a plain bilinear/bicubic upsample is **edge-blind** — it interpolates across object boundaries, so a result computed at $\tfrac{1}{8}$ resolution comes back with **halos and blurred, bleeding edges** wherever the operator's output jumps at an edge the low-res grid could not see. The fix is to **upsample with the full-resolution image as a guide**, so the edges of the *result* snap to the edges of the *image*. [`fig-edge-aware-upsampling`]
• **joint / cross bilateral upsampling** (Kopf, Cohen, Lischinski & Uyttendaele 2007, [@kopf-etal-2007]): upsample the low-res solution with a **bilateral filter whose range weights are read from the high-res guide** — a low-res output pixel contributes to a full-res pixel only if their *guide* colors agree, so smoothing follows the guide's edges and never crosses them. The canonical edge-aware-upsampling primitive; turns "compute coarse, upsample crisp" into one filter.
• **the guided image filter** (He, Sun & Tang 2010/2013, [@he-etal-2010]): a faster, **non-iterative, $O(N)$** alternative that assumes the output is a **local linear transform of the guide**, $q_i = a_k I_i + b_k$ over each window; fitting $(a,b)$ by local ridge regression and averaging gives edge-aware filtering and **guided upsampling** with no bilateral-grid bookkeeping and no gradient-reversal halos. The locally-linear-model view that recurs in the next bullet.
• **the bilateral grid as the data structure** (Chen, Paris & Durand 2007, [@chen-etal-2007]): the $(x,y,I)$ lift from the previous section is exactly the structure that makes edge-aware filtering *and resolution change* fast — **splat** pixels into a coarse grid, **blur** linearly, **slice** back out by trilinear interpolation at each full-res pixel's $(x,y,I)$; slicing *is* an edge-aware upsample. Leads to **bilateral guided upsampling** (Chen, Adams, Wadhwa & Hasinoff 2016, [@chen-etal-2016]): fit a **per-grid-cell affine model** (the guided-filter idea, in the grid) at low resolution, then slice it onto the full-res image — approximate *any* complex, slow pipeline by a grid of local affine fits, evaluated for almost nothing at full res.
• **the learned descendant — HDRnet** (Gharbi, Chen, Barron, Hasinoff & Durand 2017, [@gharbi-etal-2017]): a network predicts the **bilateral-grid of affine coefficients** from a *downsampled* input, and the full-res image is produced by **slicing** those coefficients — so the expensive deep work happens at low resolution and only a cheap, edge-aware, per-pixel affine apply runs at full res, fast enough for real-time on a phone. The end state of the whole idea: *learn the coefficients coarse, slice them crisp.*
• 💡 **the tie-back**: every chapter trick said "do less work"; this one says **do the work at lower resolution and pay only a cheap edge-aware upsample** — the same move as pyramids, but for *any* slow or learned operator, with the full-res image as the guide that keeps edges crisp. (Cross-ref [[Bilateral filtering]], [[Joint bilateral and flash/no-flash]] if present, [[Pyramids and wavelets]].)
• `fig-bilateral-grid` — the bilateral grid's three operations: **splat** (scatter pixels into the coarse $(x,y,I)$ grid), **blur** (a plain linear 3-D convolution on the grid), **slice** (trilinear lookup back at each full-res pixel's position) — the structure behind fast edge-aware filtering and slicing/upsampling. (NEW — schematic.)