Skip to content
Free public beta until December 4, 2026: every course is open, no card needed. After that, the first chapter of each course stays free and full access is a one-time $39 ($19 for up to 100 founding members chosen for helpful feedback). Your progress is kept. How the beta works

Which smoothing filter do I need?

Gaussian, median, or bilateral -- the decision rule from a stated noise problem to the right filter.

Reach for this the moment a stated problem is "clean this image up" -- ask first whether the goal is denoising at all (as opposed to sharpening, a separate toolkit), then what the noise actually looks like: an all-over haze, a handful of wildly wrong pixels, or a mess where blurring real edges away is specifically not acceptable.

Step 1 -- what does the corruption look like?

Convolving an image with the Gaussian kernel, with strength controlled by sigma.

Example

A photo with mild uniform grain: Gaussian-blur with \sigma\approx 1-2.

An all-over haze or light sensor noise spread evenly across the image -- convolve with the Gaussian kernel.

A neighborhood operation replacing each pixel with the median of its neighborhood.

Example

A scanned photo with scattered dust-speck artifacts: median filter, not Gaussian -- averaging would smear the specks instead of removing them.

A handful of isolated, wildly-wrong pixels (salt-and-pepper noise) -- replace each pixel with its neighborhood's median.

An edge-preserving smoothing filter weighting neighbors by both spatial closeness and intensity similarity.

Example

A portrait needing skin smoothed but eyelashes and hairline kept sharp: bilateral, regardless of the noise's exact statistics.

Any noise model, when preserving real edges matters more than maximum smoothness.

Building block: what a Gaussian filter's weights actually are

A smoothing kernel whose weights follow a 2D bell curve, tapering from the center.

The weighting scheme Gaussian smoothing convolves with -- also the smoothing stage inside the Canny pipeline.

Full decision path, worked through end to end

Graph settings

Calculator