DEV Community

tony huang
tony huang

Posted on

Why 'enhance' often makes old scans look worse (and which of the three operations you actually need)

"Enhance" is the most oversold button in photo software. On a scanned print it often makes the image measurably worse, and the reason is structural rather than a tuning problem.

Here is what actually happens inside the three things people mean by enhance, and when each one helps.

Three different operations sold under one word

1. Sharpening — an unsharp mask. It does not add detail; it increases local contrast along existing edges. Give it a blurry edge and it produces a crisp-looking halo around nothing.

2. Upscaling — resampling to more pixels. Classical methods (bicubic, Lanczos) interpolate; they cannot create information. Model-based upscalers generate plausible detail, which is better looking and less truthful.

3. Generative restoration — a diffusion model that repaints regions it thinks are damaged. This is the one that can double the perceived quality, and the one that can silently replace a face.

A tool that labels all three "Enhance" is telling you nothing about which is about to run.

Why sharpening makes scans worse

A 1985 print scanned at 600 dpi has film grain, paper texture, and dust. Unsharp mask does exactly what it says: it amplifies the difference between neighbouring pixels. On a clean digital photo that means crisper edges. On a scan it means amplified grain and amplified dust, and the eye reads that as "noisier", not "sharper".

If you use radius values tuned for a 12-megapixel digital photo — typically 0.5–1.5 px — on a 3000 dpi scan you are operating at the wrong scale entirely. The same radius now sits inside the grain rather than across the edge.

The practical fix is to denoise before sharpening, and to sharpen with a radius proportional to the scan resolution. There is no single slider value that works for both a phone photo and a flatbed scan.

Why upscaling a blurry photo does not rescue it

Upscaling is a bet about what the missing pixels probably look like. On a photo that is merely small but sharp, that bet is easy and the result is good. On a photo that is blurry — out of focus, motion blur, or heavily compressed — the missing information is not "smaller detail", it is "no detail", and the model fills the gap with plausible texture.

That texture reads as detail at 100% zoom and as mush at print size, because the fabric of the invented detail does not follow the scene's own geometry. Watch for hair strands that merge into a single wavy plane, and text that becomes decorative squiggles.

The test: downscale the result back to the original resolution and compare. If it looks like the original, the upscale added pixels without adding information. If it looks different in character, the model invented structure — which may be fine for a thumbnail and wrong for a document.

Where generative restoration genuinely wins

On physical damage — creases, tears, water stains, dust, faded areas — a model is doing the job no classical filter can: inferring what the paper probably looked like underneath the damage. That is real value and it is why these tools exist.

The cost is that the same model cannot tell "damaged area" from "unusual face". Give it a photo where the subject's eyes are partly shadowed and a face-restoration stage will happily reconstruct eyes in a shape the person never had.

Two rules that keep it honest:

  • Disable face restoration when identity matters. Global restoration of damage, none of the face-specific stage.
  • Process twice with different settings and compare. If the two results differ in ways that change who the person is, the pipeline is generating rather than restoring.

A workflow that avoids the trap

  1. Assess first. Is the image small, blurry, damaged, or all three? Each needs a different operation, and doing them in the wrong order compounds errors.
  2. Denoise before sharpening. Always on scans.
  3. Upscale before generative restoration, not after — a model working on more pixels has more constraints.
  4. Keep an untouched copy. The single most useful habit: the original is the only version that cannot be wrong.
  5. Compare at 100% and at the size you will actually use. Most disappointments live between those two views.

I build aiphotoeditor.best. The local layer — brightness, contrast, saturation, warmth, sharpening, filters, crop, resize, format conversion — runs in the browser as plain pixel math and is unlimited and free, because none of it can invent anything. The generative stage (enhance, restore, background removal, cartoonize, headshots) is a separate, explicitly labelled operation with three free runs a day and credit packs after that.

The split exists precisely because of the problem in this post: when the generative step is a separate button, you can tell which parts of the result are yours. When it is buried inside "enhance", you cannot.

Honest limits: the sharpening is a standard unsharp mask, not a scene-aware algorithm; the upscaler is conservative by design and will not rescue a genuinely out-of-focus shot; and no tool can tell you which of the three operations your particular photo needed — that judgement is still yours.

Top comments (0)