Ho alcuni vecchi documenti che sono stati scansionati e voglio convertirli in bianco e nero. Il contenuto deve essere sempre nero e lo sfondo bianco:
Io uso Photoshop.
Ho alcuni vecchi documenti che sono stati scansionati e voglio convertirli in bianco e nero. Il contenuto deve essere sempre nero e lo sfondo bianco:
Io uso Photoshop.
Risposte:
Se hai il controllo sulla scansione o riesci a eseguirne la scansione, aumenta l'impostazione del contrasto nella scansione e imposta il punto nero sul bit più scuro di testo che riesci a trovare. Ciò renderebbe i passaggi seguenti più facili. In caso contrario, continua a leggere ...
Ecco parte di una vecchia scansione di documenti abbastanza tipica:
I dettagli saranno diversi a seconda del documento (ad esempio, il contrasto è leggermente più elevato rispetto al campione, ad esempio), ma il contorno generale sarà lo stesso.
Si noti che il cursore giallo è molto a destra, schiarendo lo sfondo giallastro. Sono stato in grado di scurire il testo solo un po '.
Questo ti porta al 95% del percorso. Un documento scansionato in genere ha un istogramma con un grosso nodulo verso destra (il foglio) e un nodulo più piccolo verso sinistra (testo). Dovrai sperimentare i tuoi documenti per trovare le giuste impostazioni.
Da questo punto, puoi duplicare l'immagine, appiattire il duplicato e utilizzare i normali strumenti di ritocco di Photoshop per ripulire il resto.
Citi Photoshop, ma nel caso ti interessi c'è anche un plug-in GIMP che esegue la pulizia e l'elaborazione in scala di grigi avanzate:
Si chiama Nuvola Tools e si concentra principalmente sull'arte digitalizzata, ma potresti provare.
Prima:
Dopo:
Fonte: registro plugin GIMP
Con GIMP:
Ho provato vari metodi citati incl. plugin gratuito FineThreshold http://www.mehdiplugins.com/english/finethreshold.htm . Questo plug-in produce rapidamente buoni risultati a condizione che il documento sia illuminato in modo omogeneo e che la stessa carta sia di qualità omogenea. Tuttavia questo non era il mio caso. Ho sperimentato che il lato superiore di ogni documento era più leggero del fondo. Di conseguenza, ogni metodo e le sue impostazioni parziali hanno funzionato bene solo per la parte di ogni pagina e non per il resto.
Alla fine ho trovato l'effetto "Soglia dinamica" che fa parte di Zoner Photo Studio v15 . La sua versione di valutazione è gratuita per un certo periodo, immagino. Sembra compensare la soglia del b / n in base alla leggerezza del vicinato. La sua applicazione è solo un processo. Per me i parametri "Grande, valore +14" hanno funzionato molto bene. Accanto a "Editor" Zoner contiene anche l'interfaccia "Manager" in cui è possibile elaborare il batch su tutte le immagini selezionate. Alla fine sono stato in grado di stampare il risultato sulla vecchia stampante laser a 300 dpi con un contrasto eccellente.
Ora, l'unico compito rimanente per il quale sto cercando è il CROP automatico di ogni immagine in modo intelligente per tagliare i margini non necessari. Tutti i suggerimenti sono benvenuti perché il ritaglio manuale è noioso e richiede tempo.
C'era un plugin nel registro dei plugin GIMP che lo faceva. È archiviato qui ora.
Qualche tempo fa l'ho tradotto in Python e ha funzionato molto più velocemente.
Ecco il risultato della sua applicazione all'immagine nella domanda originale:
Ecco il risultato della sua applicazione all'immagine nella risposta di Alan:
Comunque ecco il codice del plugin:
from __future__ import division
import random
import gimp, gimpfu
pdb = gimp.pdb
sample_count = 100
def set_image_background_to_white(image, drawable):
pdb.gimp_context_push()
pdb.gimp_image_undo_group_start(image)
pdb.gimp_progress_set_text('Correcting background')
if drawable.is_gray:
channel_count = 1
elif drawable.is_rgb:
channel_count = 3
assert not drawable.is_indexed
# get some random points in the image
sum_by_channel = [0]*channel_count
for sample_index in range(sample_count):
px = pdb.gimp_drawable_get_pixel(drawable,
random.randint(0, pdb.gimp_drawable_width (drawable)-1),
random.randint(0, pdb.gimp_drawable_height(drawable)-1))[1]
for i in range(channel_count):
sum_by_channel[i] += px[i]
pdb.gimp_progress_update(sample_index/sample_count)
if drawable.is_gray:
pdb.gimp_levels(drawable, gimpfu.HISTOGRAM_VALUE,
0, sum_by_channel[0]/sample_count,
1.,
0, 255)
elif drawable.is_rgb:
for i in range(channel_count):
pdb.gimp_levels(drawable, 1+i,
0, sum_by_channel[i]/sample_count,
1.,
0, 255)
pdb.gimp_levels(drawable, gimpfu.HISTOGRAM_VALUE,
0, 255,
0.6,
0, 255)
pdb.gimp_image_undo_group_end(image)
pdb.gimp_displays_flush()
pdb.gimp_progress_update(1.)
pdb.gimp_context_pop()
gimpfu.register('set_image_background_to_white', # name
'Set image background to white', # blurb
'No help info yet', # help
'Robert Fleming', # author
'Robert Fleming', # copyright
'2015', # date
'<Image>/Filters/Set Background to White', # menupath
'RGB*, GRAY*', # imagetypes
[], # params
[], # results
set_image_background_to_white, # function
)
gimpfu.main()