How Canny edge detection works
A plain-language walk through the Canny algorithm: gradients, non-max suppression, and the two thresholds that decide which edges survive.
What counts as an edge
An edge is a place where brightness changes sharply, like the boundary between a dark jacket and a light wall. Canny finds these by measuring the gradient, the rate of change in intensity, at every pixel in both the horizontal and vertical directions. Where the gradient is large, a boundary is likely; where the image is flat, the gradient is near zero. This is why edge detection cares about contrast and shape rather than color, and why a low-contrast photo produces fewer edges.
Thinning and the two thresholds
Raw gradients are thick and fuzzy, so Canny thins them with non-maximum suppression, keeping only the pixels that sit right on the crest of a gradient ridge. Then it applies hysteresis using the two thresholds you control. Any pixel above the high threshold is accepted as a definite edge, any pixel below the low threshold is thrown away, and pixels in between are kept only when they touch a definite edge. This two-level test is what lets Canny follow a faint but continuous line while ignoring isolated specks of noise.
Reading the presets
The Fine, Balanced, and Bold presets are just handy pairs of those two thresholds. Fine (50 and 150) keeps weak edges, so you see brick joints, hair strands, and texture. Balanced (75 and 200) trims the noise while holding the main shapes. Bold (100 and 250) demands strong contrast, leaving only the clearest outlines. Because the presets simply move both sliders, you can start from one and fine-tune from there rather than guessing raw numbers.
Getting a cleaner result
If the edge map looks like static, your thresholds are too low for the amount of texture in the photo, so raise them or shrink the image first to average out noise. If important outlines vanish, lower the thresholds until the line reappears without pulling in clutter. For line art or a coloring page, enable 'Dark lines on white' so the result prints cleanly, then download the PNG. Because everything runs locally, you can iterate as many times as you like without any upload wait.