PdfRestore
An utility for PDF restore
PdfRestore is a document restoration tool designed for scanned or photographed PDFs: uneven lighting, shadows, skewed pages, grainy noise, faded text, and “fax-like” artifacts. Its goal is simple: take a hard-to-read document and produce a cleaner PDF that’s easier to read and often more suitable for OCR.
What the tool produces
The output is an image-based PDF: every page is rendered into pixels, enhanced, and then re-packed into a new PDF. This makes results consistent across viewers and typically OCR-friendly, but it also means:
- file size can increase (especially at high DPI),
- original vector text/graphics are flattened into an image layer.
Under the hood: the restoration pipeline
Each page goes through a sequence of steps (most of them optional), organized to address common scanning problems:
- Render at a chosen DPI
The PDF page is converted into an image at the selected resolution. DPI is the “master knob” for detail vs speed/file size. - Optional AI (DNN) shadow removal
If enabled, a neural network estimates how the page should look without strong shadows or illumination gradients (dark corners, book curvature, desk lamp falloff). This happens before classic enhancement so the following steps work on a more uniform image. - Background normalization (illumination compensation)
A smooth background estimate is subtracted and re-normalized, reducing yellowed paper, uneven lighting, and large-scale shading. - Denoising
Removes grain/scanner noise. Good for low-quality scans, but too much can soften very thin strokes. - Local contrast (CLAHE)
Boosts readability where text is faint or washed out by enhancing local contrast. - Deskew (straighten)
Estimates the dominant text-line angle and rotates the page back. It fills borders with white to avoid dark wedges. - Sharpen (unsharp mask)
Enhances edges (letters) for clarity. Overdoing it can create halos. - Binarization (optional, OCR-oriented)
Converts the page to black/white to remove paper texture and maximize text separation. Two modes are offered:- Adaptive threshold: robust general-purpose thresholding.
- Sauvola: often better when illumination is uneven; controlled via window size and k.
-
- Morphological cleanup (optional after binarization)
A small open+close pass to remove speckles and fill tiny holes.
Preserving colors (when not binarizing)
If binarization is off, the tool can keep original colors while still improving readability: it enhances luminance and merges it back with the original chroma. This is useful for colored highlights, stamps, or diagrams.
DNN shadow removal (AI) — how it works and how to set it
The tool accepts an ONNX model (default:
./models/docshadow_sd7k.onnx). Internally, the model is loaded once and reused to process pages efficiently. If GPU execution is available, it can be used automatically; otherwise it runs on CPU.Key settings:
- Model path
Point to an ONNX file. Relative paths are typically resolved against the application folder, so you can shipmodels/next to the program. - Max side (inference size) (default ~1024)
The page is downscaled for inference to accelerate processing. The correction is then mapped back to full resolution.
Practical guidance:- 768–1024: good balance for most documents
- 1536–2048: better for complex shadows, slower
-
- Strength (0.0–2.0) (default 1.0)
How strongly the correction is applied.- 0.6–1.0: safer, natural
- 1.2–1.6: aggressive shadow removal (watch for over-flattening)
-
- Mode (how the correction is applied)
Four strategies are available:- Legacy (delta-L add): adds predicted luminance change; can be less stable.
- Gain (mul): treats correction as illumination gain; usually more natural.
- Gain + guided: smooths the gain map in an edge-aware way.
- Gain + guided + mask (recommended): applies strong correction mainly where the network indicates shadow, minimizing side effects.
-
If you don’t know where to start: enable DNN, keep Strength = 1.0, Max side = 1024, and use Gain + guided + mask.
Practical tuning guide (all settings)
Render / output DPI (default 300)
- 300 DPI: solid default for reading and OCR
- 400–600 DPI: tiny fonts or low-quality scans (slower, larger files)
Background normalization (default on, sigma ~25)
- Use it when background is uneven or yellowed.
- Increase sigma when the illumination changes slowly over large areas (e.g., book pages).
Denoise (NLM) (default on, h ~10)
- Raise h if the scan is grainy.
- Lower/disable if thin strokes get washed out.
CLAHE (default on, clip ~2.0, tile ~8)
- Increase clip to make faded text pop (but can amplify noise).
- Smaller tiles = more local contrast; too small can look harsh.
Sharpen (default on, amount ~0.7, sigma ~1.2)
- If you see halos, reduce amount or increase sigma a bit.
Deskew (default on)
- Great for text-heavy pages.
- Disable if a page is mostly graphics/photographs and the estimator gets confused.
Binarization
- None: keeps grayscale (or preserves colors if enabled).
- Adaptive: good OCR baseline.
- Block size: larger for uneven lighting
- C: threshold offset; tweak to avoid gray background speckles
-
- Sauvola: better for strong gradients and difficult paper.
- Window: larger for broad shading
- k: controls sensitivity; higher can preserve more background texture
-
Morphological cleanup (default off)
Turn it on after binarization when you see:
- salt-and-pepper dots,
- tiny gaps inside letters.
Increase size gently (small values usually suffice).
If you like this application and want to contribute to its development and improvement you can make a donation .... Thanks!
PdfRestore è uno strumento di restauro documentale pensato per PDF scansionati o fotografati: ombre, illuminazione non uniforme, pagine storte, rumore, testo sbiadito e tipici difetti da fotocopia/fax. L’obiettivo è ottenere un PDF finale più pulito, più leggibile e spesso più adatto all’OCR.
Che cosa produce
Il risultato è un PDF basato su immagini: ogni pagina viene trasformata in pixel, migliorata e riscritta nel PDF finale. Questo rende l’aspetto molto consistente su qualsiasi visualizzatore ed è spesso amico dell’OCR, però:
- può aumentare la dimensione del file (specie ad alti DPI),
- “appiattisce” eventuale testo vettoriale/grafica vettoriale in immagini.
Come funziona: pipeline di restauro
Ogni pagina passa attraverso una catena di passaggi (quasi tutti opzionali):
- Rendering alla risoluzione scelta (DPI)
È il controllo principale: più DPI = più dettaglio, ma più tempo e file più grande. - DNN/AI per rimozione ombre (opzionale)
Un modello neurale stima una versione senza ombre forti e gradienti di luce (angoli scuri, curvature da libro, lampade). Questo avviene prima dei filtri “classici” per farli lavorare su una base più uniforme. - Normalizzazione del fondo (compensazione illuminazione)
Riduce ingiallimenti, shading e variazioni lente del background. - Denoising
Riduce grana e rumore scanner, con attenzione a non “mangiare” i tratti fini. - Contrasto locale (CLAHE)
Fa emergere testo sbiadito aumentando il contrasto in modo locale. - Deskew (raddrizzamento)
Stima l’angolo delle righe di testo e ruota la pagina. I bordi vengono riempiti di bianco. - Sharpen (unsharp mask)
Enfatizza i contorni delle lettere; troppo può creare aloni. - Binarizzazione (opzionale, orientata a OCR)
Trasforma in bianco/nero per eliminare texture della carta e massimizzare la separazione del testo:- Adaptive: ottimo “tuttofare”
- Sauvola: spesso più robusto con illuminazione irregolare (controllo con finestra e k)
-
- Pulizia morfologica (opzionale dopo binarizzazione)
Una passata open+close per togliere puntinatura e chiudere micro-buchi.
Mantenere i colori (quando NON binarizzi)
Se la binarizzazione è disattivata, puoi preservare i colori (evidenziatori, timbri, grafici) migliorando soprattutto la luminanza e reintegrandola con i colori originali.
DNN (AI) per ombre — come impostarlo
Il modello è un file ONNX (default:
./models/docshadow_sd7k.onnx). Viene caricato e riutilizzato per velocizzare l’elaborazione; se disponibile l’esecuzione su GPU può essere usata automaticamente, altrimenti si usa la CPU.Impostazioni chiave:
- Model path
Percorso del file ONNX. I percorsi relativi di solito vengono risolti rispetto alla cartella dell’applicazione: comodo per distribuire una cartellamodels/insieme al programma. - Max side (default ~1024)
Per l’inferenza, la pagina viene ridimensionata (più veloce) e poi la correzione viene riportata alla risoluzione originale.- 768–1024: buon compromesso
- 1536–2048: più preciso su ombre complesse, più lento
-
- Strength (0.0–2.0) (default 1.0)
Intensità della correzione:- 0.6–1.0: “sicuro”
- 1.2–1.6: più aggressivo (controlla che non appiattisca troppo)
-
- Mode (applicazione della correzione)
- Legacy (delta-L add): somma una variazione di luminanza; più delicato.
- Gain (mul): interpreta la correzione come guadagno di illuminazione; spesso naturale.
- Gain + guided: smussa il guadagno in modo edge-aware.
- Gain + guided + mask (consigliato): applica forte correzione solo nelle zone “ombra”, minimizzando effetti collaterali.
-
Se vuoi un settaggio “vai sul sicuro”: Strength 1.0, Max side 1024, Gain + guided + mask.
Guida rapida ai settaggi
DPI (default 300)
- 300: base ottima per leggibilità e OCR
- 400–600: font piccoli / scansioni brutte (più lento, file più grande)
Background normalization (on, sigma ~25)
- Aumenta sigma se il fondo varia lentamente su grandi aree (ombre ampie, carta ingiallita).
Denoise (on, h ~10)
- Alza h se c’è grana.
- Abbassa/disattiva se i tratti fini si ammorbidiscono troppo.
CLAHE (on, clip ~2.0, tile ~8)
- Clip più alto = testo più “pop”, ma può amplificare rumore.
- Tile regola quanto è locale l’effetto.
Sharpen (on, amount ~0.7, sigma ~1.2)
- Se vedi aloni: riduci amount o aumenta un po’ sigma.
Deskew (on)
- Perfetto su pagine di testo.
- Spegnilo su pagine quasi solo grafiche/foto se crea rotazioni errate.
Binarizzazione
- None: mantiene scala di grigi (o colori, se preservi colori).
- Adaptive: grande classico per OCR.
- Sauvola: meglio su illuminazione molto irregolare.
- Morph cleanup: abilitalo se vedi puntini o micro-buchi nel testo.
Se questa applicazione é di tuo gradimento e vuoi contribuire al suo sviluppo e miglioramento puoi fare una donazione .... Grazie!
The complete program file as portable : Tested on Win 10 x64
System libraries you may need ....
Revision History:
- 1.0.0 2026/01/17 : First release