45.0 APPENDICES⧉
The appendices are the book's reference material and conventions: the background the chapters assume, the conventions they obey, and the practical apparatus, code, exercises, and process, that surrounds them. Nothing here is new computational photography; it is the scaffolding the rest of the book stands on, gathered in one place so the main text can stay focused and just point back. A few are reproducible recipes, exact and checkable pipelines the book actually runs: Chapter 45.15, Rendering a raw DNG (a Bayer DNG → a rendered image) and its light-field companion Chapter 45.23, Reading a Lytro light field (a raw Lytro capture → a uniform 4-D grid), each with the easy mistakes cataloged, and their hands-on companion Chapter 45.24, File conversion tools, three browser-only converters (JPG→PNG without alpha, DNG→linear PNG, Lytro→Stanford archive) that run entirely on your own machine.
Chapter 45.2, Refreshers collects the mathematical background. The book is built on a small kit of mathematical tools used over and over, and rather than re-deriving them in every chapter we collect them here and link back. It is written for a reader who has seen this material once and wants a fast reminder of how each tool is used in imaging, not a first course. Skip what you know; come back when a chapter leans on something you'd like refreshed.
Contents of this part
- 45.1 C++ for Python programmers
- 45.1.1 What changes, coming from Python
- 45.1.2 A first taste, side by side
- 45.1.3 A few more comparisons
- 45.1.4 Files and compilation
- 45.1.5 Value, reference, and const
- 45.1.6 Memory, briefly
- 45.1.7 Images in C++
- 45.1.8 Debugging, and the parts that hurt
- 45.1.9 Where to go next
- 45.2 Refreshers
- 45.3 Problem Set 0 — Environment and C++ basics
- 45.3.1 Summary
- 45.3.2 Installation and Environment Setup
- 45.3.3 C++
- 45.3.4 Submission
- 45.4 Problem Set 1 — Image class, point operations, and color
- 45.4.1 Summary
- 45.4.2 The Image Class
- 45.4.3 Brightness and Contrast
- 45.4.4 More Image Class Methods
- 45.4.5 Colorspaces
- 45.4.6 Spanish Castle Illusion
- 45.4.7 White Balance
- 45.4.8 Submission
- 45.5 Problem Set 2 — Convolution and the bilateral filter
- 45.5.1 Summary
- 45.5.2 Smart Accessor
- 45.5.3 Blurring
- 45.5.4 Denoising using Bilateral Filtering
- 45.5.5 Extra credit
- 45.5.6 Submission
- 45.6 Problem Set 3 — Denoising and demosaicking
- 45.6.1 Summary
- 45.6.2 Denoising from a sequence of images
- 45.6.3 Demosaicing
- 45.6.4 Edge-based green
- 45.6.5 Red and blue based on green
- 45.6.6 6.8370 only (or 5% Extra Credit): Sergey Prokudin-Gorsky
- 45.6.7 Extra credit (maximum of 10%)
- 45.6.8 Submission
- 45.7 Problem Set 4 — High dynamic range
- 45.7.1 Summary
- 45.7.2 HDR merging
- 45.7.3 Tone mapping
- 45.7.4 Extra credit (10% max)
- 45.7.5 Submission
- 45.8 Problem Set 5 — Resampling, warping, and morphing
- 45.8.1 Summary
- 45.8.2 Resampling
- 45.8.3 Warping and morphing
- 45.8.4 Extra credit
- 45.8.5 Submission
- 45.9 Problem Set 6 — Homographies and manual panoramas
- 45.9.1 Summary
- 45.9.2 Class morph
- 45.9.3 Homogeneous coordinates
- 45.9.4 Linear algebra
- 45.9.5 Warp and image with a homography
- 45.9.6 Compute homography from 4 pairs of points
- 45.9.7 Bounding boxes
- 45.9.8 Extra credit (up to 10% total)
- 45.10 Problem Set 7 — Automatic panoramas
- 45.10.1 Summary
- 45.10.2 Previous problem set code
- 45.10.3 Class morph
- 45.10.4 Harris corner detection
- 45.10.5 Descriptor and correspondences
- 45.10.6 RANSAC
- 45.10.7 Automatic panorama stitching
- 45.10.8 Blending
- 45.10.9 Mini planet
- 45.10.10 6.8370: Stitch N Images (6.8371: Extra Credit 5%)
- 45.10.11 Make your own panorama
- 45.10.12 Extra credits (10% max)
- 45.11 Problem Set 8 — Non-photorealistic rendering
- 45.11.1 Summary
- 45.11.2 Paintbrush splatting
- 45.11.3 Painterly rendering
- 45.11.4 Oriented painterly rendering
- 45.11.5 Your image
- 45.11.6 Paper review (6.865 only)
- 45.11.7 Extra credits
- 45.12 Problem Set 9 — Make-your-own, video, and ethics
- 45.12.1 Summary
- 45.12.2 Make your own assignment
- 45.12.3 Ethical issues in computational photography
- 45.12.4 Assignment lists
- 45.13 EXIF and image metadata
- 45.13.1 What EXIF is
- 45.13.2 The fields, grouped by what they describe
- 45.13.3 How far to trust it
- 45.13.4 Privacy: the metadata that follows the picture
- 45.13.5 Reading and writing EXIF
- 45.14 DNG: the Digital Negative
- 45.14.1 What DNG is, and the problem it solves
- 45.14.2 Inside the container
- 45.14.3 What the raw payload looks like: mosaic vs linear
- 45.14.4 The color recipe: matrices, profiles, and white balance
- 45.14.5 Opcodes: corrections the decoder must apply
- 45.14.6 Compression, and embedding the original
- 45.14.7 Where you meet DNG: adoption and relatives
- 45.14.8 Trade-offs, and DNG's relation to EXIF
- 45.15 Rendering a raw DNG
- 45.16 Datasets
- 45.16.1 Classification and features
- 45.16.2 Super-resolution
- 45.16.3 Deblurring and restoration
- 45.16.4 Denoising
- 45.16.5 HDR and tone mapping
- 45.16.6 Retouching and enhancement
- 45.16.7 Depth and motion
- 45.16.8 Light fields
- 45.16.9 Color and white balance
- 45.16.10 Faces
- 45.16.11 Inpainting, segmentation, and matting
- 45.16.12 Image quality
- 45.17 A camera-feature wish list
- 45.17.1 Exposure, ISO, and dynamic range
- 45.17.2 Bracketing more than exposure
- 45.17.3 Focus and depth of field
- 45.17.4 Computational raw and the sensor
- 45.17.5 Motion data, metadata, and workflow
- 45.17.6 Panorama and multi-shot
- 45.17.7 The interface and the ecosystem
- 45.18 How this book was created (the early process)
- 45.18.1 Two documents, not one
- 45.18.2 Compiling a section
- 45.18.3 Figures as code
- 45.18.4 Generative imagery: cover art and 3D
- 45.18.5 Verification and review
- 45.18.6 Keeping a long book coherent
- 45.18.7 The toolchain
- 45.18.8 What the machine did, and what it did not
- 45.18.9 Who wrote what: a per-part estimate
- 45.19 How this book is made now
- 45.19.1 From compiling a book to editing one
- 45.19.2 How the author and an agent work together
- 45.19.3 Eleven agents and an ownership map
- 45.19.4 The files that hold it together
- 45.19.5 Skills: writing down what you repeat
- 45.19.6 The gates
- 45.19.7 What goes wrong now
- 45.19.8 What it cost
- 45.19.9 The bundle
- 45.20 The course tutor: a local, book-grounded AI teaching assistant
- 45.20.1 What it is, and what it is for
- 45.20.2 Local-first
- 45.20.3 Grounded in the book: retrieval-augmented generation
- 45.20.4 How the retrieval works
- 45.20.5 Indexing other people's books
- 45.20.6 Measuring it, and keeping it from going stale
- 45.20.7 It links, it shows equations, it shows figures
- 45.20.8 Two front-ends, one core
- 45.20.9 What the instructor sees
- 45.20.10 Privacy and disclosure
- 45.21 The semi-automatic grading system
- 45.22 Under the hood: prompts, patterns, and verifiers
- 45.22.1 Prompt patterns that made it work
- 45.22.2 The verifier suite
- 45.22.3 Why this is the interesting part
- 45.23 Reading a Lytro light field
- 45.24 File conversion tools
- 45.24.1 JPG → PNG, without an alpha channel
- 45.24.2 DNG → a linear PNG
- 45.24.3 A Lytro capture → a Stanford-style light-field archive
- 45.24.4 How they run in the browser
- 45.24.5 Easy mistakes
- 45.25 The interactive figures — a prompt-by-prompt making-of
- 45.25.1 Summary
- 45.25.2 Lorentz resonance: fig-lorentz-resonance (Figure 2.1.8)
- 45.25.3 Rainbow droplet: fig-rainbow-droplet (Figure 2.1.14)
- 45.25.4 Diffraction wave simulation: fig-diffraction-wave-sim (Figure 2.1.29)
- 45.25.5 Exposure-triangle simulator: fig-exposure-triangle-sim (Figure 2.11.5)
- 45.25.6 Repeated quantization: fig-repeated-quantization (Figure 3.1.4)
- 45.25.7 JPEG generation loss: fig-jpeg-generation-loss (Figure 3.17.9)
- 45.25.8 Exposure round-trip (JPEG): fig-exposure-jpeg-roundtrip (Figure 3.17.10)
- 45.25.9 1-D sampling pipeline: fig-sampling-1d-demo (Figure 3.10.4)
- 45.25.10 2-D sampling pipeline: fig-sampling-2d-pipeline (Figure 3.10.6)
- 45.25.11 Mitchell–Netravali bicubic (B,C): fig-bicubic-bc (Figure 3.11.13)
- 45.25.12 Rotation resample challenge: fig-rotation-resample-interactive (Figure 3.11.18)
- 45.25.13 Mini-Lightroom: fig-mini-lightroom (Figure 3.18.4)
- 45.25.14 Poisson blending: fig-poisson-blend (Figure 5.1.5)
- 45.25.15 Bilateral grid (3-D): fig-bilateral-grid-3d (Figure 5.2.15)
- 45.25.16 Perspective montage: fig-perspective-montage (Figure 6.6.13)
- 45.25.17 Beier–Neely morph: fig-beier-neely-demo (Figure 6.3.4)
- 45.25.18 Live face landmarks: fig-face-landmarks-live (Figure 7.10.2)
- 45.25.19 Lens optimizer: fig-lens-optimizer-demo (Figure 9.4.4)
- 45.25.20 Full auto-panorama: fig-pano-stitch (Figure 10.7.9)
- 45.25.21 CLIP-IQA curation: fig-clip-iqa (Figure 11.3.2)
- 45.25.22 Photobio time-lapse: fig-photobio-demo (Figure 11.7.2)
- 45.25.23 Refocus shift geometry: fig-refocus-shift-geometry (Figure 13.4.2)
- 45.25.24 Chroma key: fig-chroma-key (Figure 8.11.7)
- 45.25.25 Portrait-lighting simulator: fig-portrait-lighting-sim (Figure 2.11.26)
- 45.25.26 Aberration explorer: fig-aberration-explorer (Figure 9.1.6)
- 45.26 Interactive demos index and search
- 45.26.1 Find a demo
- 45.26.2 Sharing, linking, and embedding a demo
- 45.26.3 Introduction
- 45.26.4 Fundamentals — light, optics, sensors
- 45.26.5 Visual perception and color
- 45.26.6 Color spaces and color technology
- 45.26.7 Photography
- 45.26.8 Linear methods and Fourier analysis
- 45.26.9 Probabilistic approaches and machine learning
- 45.26.10 Basic image processing and the ISP
- 45.26.11 Making computational-photography code fast
- 45.26.12 Edges matter
- 45.26.13 Warping and morphing
- 45.26.14 Matching pixels across space and time
- 45.26.15 Single-image computational photography
- 45.26.16 Compound lenses and aberration correction
- 45.26.17 Multiple-exposure imaging
- 45.26.18 Many images and photo collections
- 45.26.19 Video
- 45.26.20 Light fields and plenoptic cameras
- 45.26.21 Computational illumination
- 45.26.22 3-D and depth
- 45.26.23 Revealing the invisible
- 45.26.24 Appendices and end matter
- 45.26.25 Not yet placed
- 45.27 Course slides
- 45.27.1 The lectures
- 45.28 Course slides, 2026 edition
- 45.29 Course slides, earlier years
- 45.30 The Computational Photographer
- 45.30.1 Faculty jobs: why and how to get them
- 45.30.2 Can academia compete with the resources of industry?
- 45.30.3 Family in a box
- 45.30.4 Do good research, run a great lab
- 45.30.5 AI image synthesis is the biggest innovation in image making since photography
- 45.30.6 Lidar for autofocus
- 45.30.7 TedFest 2022
- 45.30.8 I want a light field camera
- 45.30.9 Lloyd Chambers's feature Christmas list
- 45.30.10 Ethics and computational photography
- 45.30.11 The DSLR will probably die. Are mirrorless the future of large standalone cameras?
- 45.30.12 Eurographics keynote slides
- 45.30.13 Halide talk
- 45.30.14 Do good research
- 45.30.15 Slides from my Siggraph talk about computational photography
- 45.30.16 No telephoto on cell phones
- 45.30.17 A perfect flat lens with metamaterials
- 45.30.18 Why video compression fails on confettis
- 45.30.19 This camera shows you a similar picture instead of the one you are taking
- 45.30.20 Project idea: automatic composite portrait
- 45.30.21 Lytro Cinema Camera: guestimates of characteristics
- 45.30.22 Auto white balance for flash and LEDs
- 45.30.23 Autofocus noise and microphone array
- 45.31 How to do research
- 45.31.1 Frédo's own notes
- 45.31.2 A few more starting points
- 45.31.3 Further reading, talks, and advice
- 45.31.4 Odds and ends
- 45.32 The Art and Science of Depiction
- 45.32.1 Introduction
- 45.32.2 There is no passive recording
- 45.32.3 What is a picture?
- 45.32.4 Introduction to human vision
- 45.32.5 Vision solves problems
- 45.32.6 Picture organization and Gestalt
- 45.32.7 Gaze movements and focal points
- 45.32.8 Color
- 45.32.9 Limitations and compensations I: the picture is flat
- 45.32.10 Limitations and compensations II: viewpoint and frame
- 45.32.11 The image is static; contrast and gamut are limited
- 45.32.12 Contrast
- 45.32.13 Representation systems
- 45.32.14 Perspective
- 45.32.15 Drawing and line drawing
- 45.32.16 Denotation systems
- 45.32.17 Tone system
- 45.32.18 Non-photorealistic rendering, and style
- 45.33 Photoshop 1.0, running
- 45.33.1 What is on the menu bar
- 45.33.2 Running it in a browser
- 45.33.3 What to try
- 45.33.4 The source code is public, and that is not the same as buildable
- 45.33.5 How the program is put together
- 45.33.6 What the assembly relies on
- 45.34 Photoshop 1.0 ported to JavaScript
- 45.34.1 Gaussian Blur, and five boxes
- 45.34.2 Unsharp Mask is thirty lines
- 45.34.3 Find Edges, without a square root
- 45.34.4 Add Noise, and the same theorem again
- 45.34.5 Median, and what happens at the border
- 45.34.6 Despeckle and Sharpen Edges are not kernels
- 45.34.7 Custom is the general case, and the built-ins are the special cases
- 45.34.8 On reading source code