1.5 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. The spirit of the problem sets is to distill the core ideas of an area into the simplest possible algorithm, so that you experience the big picture and get a hands-on understanding of the field's big principles rather than getting lost in production detail. 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 minimalImageclass, 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, Perceptual color and trichromatic vision)
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 basics, Demosaicking)
PS4: High dynamic range. Merge an exposure bracket into a radiance map and tone-map it for display. (→ HDR merging, Global tone mapping)
PS5: Resampling, warping, and morphing. Nearest / bilinear / bicubic / Lanczos resampling; Beier–Neely segment warps; and a full Beier–Neely morph. (→ Warping, 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-neighbor 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 Computational optics and coded imaging sections. (→ Optical flow, Video magnification)