• **the idea** (Hertzmann 1998 — *queue ref*): repaint the photo with **discrete brush strokes**, **coarse-to-fine** — big rough strokes over a heavily-blurred version, then progressively **smaller** strokes **only where** the painting still differs from the (less-blurred) reference. Detail appears where needed; flat areas stay loose. [`fig-npr-painterly-layers`]
• **the structure that makes it look good (not random daubs)**:
• **orientation**: strokes run **perpendicular to the image gradient** (along the "grain") — following a cheek's contour or a sky's flow (**L6.3**);
• **size = scale**: coarse strokes on coarse pyramid levels, fine on fine — a direct use of the **Gaussian / image pyramid** ([[Pyramids and wavelets]]);
• **curved strokes**: trace along the orientation field for long painterly strokes, stopping at edges;
• **error-driven placement**: add a stroke only where canvas-vs-reference error exceeds a threshold → the painting **converges** to the photo at the chosen abstraction level.
• **the parameters are the *style***: stroke size range, opacity, jitter, curvature, blur radius → impressionist vs pointillist vs expressionist from *one* algorithm. (The **Gaussian pyramid** sets stroke scale and the blurred references.)
• **the course p-set**: implement the **layered, gradient-following brush painter** — build the pyramid of blurred references, place oriented strokes coarse-to-fine, explore a couple of brush/parameter styles on your own photo. [`fig-npr-brush-pset`] Use the photos-from-Fredo / sourced images for the worked example.