Milestone log¶
One document per milestone: goal, what was built, design decisions, results, findings (including what did not work) and how to reproduce.
| Milestone | Status | Doc | Commit |
|---|---|---|---|
| M0 Environment and project setup | done | M0-setup.md | c8c701a |
| M1 Baseline and visualizer | done | M1-baseline-visualizer.md | b8e0c0e |
| M2 Improved greedy solver | done | M2-greedy-solver.md | fe395f6 |
| M3 Preprocessing and importance maps | done (4-image eval) | M3-preprocessing-importance.md | da3f38e |
| M6 Dataset, evaluation and fabrication output | done | M6-evaluation.md | see git log |
| M4 Path refinement + parallel solver | done | M4-refinement.md | see git log |
| M5 Colour string art | done | M5-colour.md | see git log |
| M7 Interactive demo app | done | M7-demo.md | see git log |
| M8 Hardening: calibration, exposure, palette, held-out, lint | done | M8-hardening.md | see git log |
| M9 Build-ready tooling: kit, winding assistant, build guide | done | M9-build-ready.md | see git log |
| M10 Docs site and online app | done | M10-publishing.md | see git log |
| Report | done | Project report | see git log |
Conventions used in every results table
- Images are rendered with the same thread model the solver uses (render.Canvas).
- ssim_sK / psnr_sK are computed after blurring both images with a Gaussian of σ = K px,
which simulates viewing distance. s0 is the raw render.
- Metrics are computed inside the frame mask only. roi variants are restricted to the
landmark face oval.
- Default setup unless stated: 600 px canvas, circular frame, 256 pins, thread opacity 0.2,
min pin gap 10.
- Timings were taken on the development laptop (Windows 11, Python 3.12). Wall-clock varies
±2× with background load, so compare timings only within one table.