You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Watershed clustering (--clustering watershed): a new region-forming frontend — a hierarchical watershed on the pixel graph (Cousty et al. 2009; Najman et al. 2013), controlled by one dial, --watershed-detail (0..=255; each +25.5 roughly doubles the region count). Regions follow image content, with no watershed-line pixels.
Boundaries come out calm: antialiased pixels snap to the color-midpoint iso-line instead of meandering with the noise inside the ramp.
stacked stacks the merge tree itself (coarse ancestors below, refined regions on top), so overdraw stays seam-free.
cutout gets the partition natively; neighbouring faces closer than max(2, (255 − detail) / 8) merge, so faces a human cannot tell apart never survive as separate patches.
WatershedHierarchy is public, split into build (expensive, image-only) and cut (near-instant); Session re-cuts a cached hierarchy on detail changes, making the slider fully interactive (~25 ms vs ~40 ms on a 1400×775 photo).
Curve simplification (--simplify <tolerance>, Config::simplify, simplify in Python and Node; off by default): a paper.js-style Schneider re-fit — each smooth run between corners is redrawn with the fewest cubics that stay within the tolerance (px). Roughly halves file size (sample photo at tolerance 1: 229 → 138 KB stacked, 103 → 36 KB watershed cutout). Runs on fitted geometry before composition, so cutout simplifies each shared boundary once and stays seam-free; corners and junction endpoints stay pinned.
Binary thresholding: a tunable fixed threshold (--threshold) and Bradley–Roth adaptive thresholding for uneven lighting (--adaptive, --adaptive-window, --adaptive-t) — also on Config, Python, and Node.
Cutout mode merges neighbouring faces whose colors are within one gradient step, rejoining the near-identical faces that stacked gradient layering splits a smooth area into.
Changed
color_mode is replaced by clustering (color-cluster | bw | watershed) across the CLI, Rust, Python, and Node — the field selects the region-forming algorithm, not a color space.
The spline fine-tuning flags (--corner-threshold, --segment-length, --splice-threshold) are hidden from CLI help — still accepted, but without their -c/-l/-s short forms. The defaults serve virtually every conversion; --simplify supersedes them.
Fixed
Spline fitting no longer swings far away from the outline around thin strands (a long-standing defect, fixed via visioncortex 0.9.1): a sparse splice slice could be fitted by a single cubic that passed through every sample yet ballooned up to ~30 px sideways between them. Slices are now densified before fitting and multi-cubic fits kept in full, in both stacked mode and the mosaic fitter.