1.4 Problem sets⧉
The surest test of understanding a method is to implement it. The book's ideas are meant to be built, and these problem sets are how: each takes one chapter's core algorithm and asks you to write it from scratch and run it on real photographs. They were developed for MIT's Digital & Computational Photography course, so their sequence and coverage do not track the book chapter-by-chapter — the assignments follow the course's own arc (point operations and color, then convolution and denoising, then the multi-image and geometry methods, then an open project), and each maps to one or more chapters rather than lining up one-to-one with them. The figures throughout the book that show a method's genuine output (a merged radiance map, a stitched panorama, a recovered optical-flow field) are produced by exactly these implementations.
- PS0 — Environment and C++ basics. Set up the toolchain, write a minimal
Imageclass, and read and write image files. (→ Developing, Testing and Debugging) - PS1 — Image class, point operations, color. Pixel access; brightness and contrast; the luminance–chrominance (YUV) split; gamma; white balance; and the Spanish-Castle afterimage illusion. (→ Image representation, Point operations, Human (and animal) vision and color)
- PS2 — Convolution and the bilateral filter. Box and Gaussian blur, image gradients, sharpening, and bilateral denoising (with a YUV chroma variant). (→ Neighborhood operations and convolution, Bilateral filtering)
- PS3 — Denoising and demosaicking. Align-and-average a burst (and the ISO/variance story); Bayer demosaicking — basic green, then edge-directed green and color-difference R/B; and Prokudin-Gorsky three-plate color alignment. (→ Denoising, Demosaicking)
- PS4 — High dynamic range. Merge an exposure bracket into a radiance map and tone-map it for display. (→ HDR merging, Tone mapping)
- PS5 — Resampling, warping, and morphing. Nearest / bilinear / bicubic / Lanczos resampling; Beier–Neely segment warps; and a full Beier–Neely morph. (→ Warping and resampling, Morphing)
- PS6 — Homographies and manual panoramas. Homogeneous coordinates, warping by a homography, solving the homography from four point correspondences, and stitching a planar mosaic. (→ Manual panorama stitching from multiple views)
- PS7 — Automatic panoramas. Harris corners (the structure tensor), patch descriptors, the second-nearest-neighbour ratio test, RANSAC, and feathered / two-scale blending. (→ Automatic panorama stitching from multiple views and feature matching)
- PS8 — Non-photorealistic rendering. Paintbrush splatting and single-scale, two-scale, and gradient-oriented painterly rendering. (→ Non-photorealistic rendering)
- PS9 — Make-your-own, video, and ethics. A self-proposed project — optical-flow retiming, phase-based video magnification, and the like — together with the ethics deliverable. Its open menu of advanced topics seeds many of the Advanced computational photography sections. (→ Optical flow, Video magnification)