Come si binarizza un'immagine colorata?


14

Il mio amico ha un'immagine colorata con calligrafia cinese (fondamentalmente scattando foto o scansionando ciò che ha scritto su un pezzo di carta bianca) e vorrebbe che io la convertissi in un'immagine binaria in bianco e nero. Ci sono applicazioni sotto Ubuntu che possono farlo?

Ecco un'immagine di esempio:

inserisci qui la descrizione dell'immagine


Risposte:


27

Ciò che si desidera viene definito "soglia" nell'elaborazione delle immagini. Fondamentalmente, prende un'immagine come input e genera un'immagine che ha tutti i pixel con un valore inferiore a una determinata soglia impostato su nero e tutti i pixel il cui valore è sopra la soglia impostata su bianco. Ciò si traduce in un'immagine in bianco e nero da un'immagine di input arbitraria.

In genere, si desidera prima convertire in scala di grigi per risultati più prevedibili, ma è anche possibile impostare la soglia di un'immagine a colori.

Puoi usare uno strumento grafico come GIMP per farlo in modo interattivo (troverai lo strumento attraverso il menu principale -> Colori -> Soglia), oppure puoi usare ImageMagick in questo modo:

convert colored.png -threshold 75% thres_colored.png

L'esecuzione del comando sopra sull'immagine di esempio produce il risultato mostrato di seguito.

Versione in bianco e nero dell'immagine di OP

Poiché la soglia è spesso un processo di prova ed errore per ottenere un risultato di cui sei soddisfatto, in particolare se l'immagine di origine non è già molto vicina al bianco e nero, consiglio se possibile l'approccio GUI, ma se questa non è un'opzione per qualsiasi motivo tu possa farlo anche attraverso la riga di comando. Per un controllo più preciso dell'output, è possibile utilizzare strumenti come curve di colore, livelli e contrasto per isolare meglio le porzioni chiare e scure dell'immagine prima del limite. (In realtà, la soglia può essere vista come un caso estremo di utilizzo dello strumento curve colore.)


2
Grazie! Poiché un'immagine a colori ha tre canali RBG, a cosa si può applicare la soglia in generale?
Tim

@Tim Probabilmente dipende dal software, ma mi aspetto che la soglia (a meno che non si specifichi per canale o per un canale specifico, vedere ad esempio l' -channelopzione di conversione di ImageMagick ) verrà applicata a una sorta di "valore" del pixel, che viene calcolato da tutti i canali. Questo è il motivo per cui ho detto che potresti voler convertire prima in scala di grigi per risultati più prevedibili. (Vedi anche la mia modifica.)
un CVn del

Grazie! Esiste una documentazione per ciò a cui si applica la soglia nel comando mostrato nel tuo post?
Tim

@ Tim Non proprio. Mi aspettavo che la conversione prendesse una percentuale del valore massimo (che avrebbe dovuto essere 256 per canale) o un valore specifico, ma ho potuto ottenere un risultato utile solo quando ho specificato una percentuale. Quando lo fai con uno strumento grafico, incluso GIMP, avrai generalmente un istogramma che mostra la distribuzione tonale dell'immagine; sarà di grande aiuto nella scelta del giusto valore. Usare solo la riga di comando, a meno che tu non abbia un motivo specifico per farlo, è probabilmente più un problema di quanto valga, davvero.
un CVn del

2
Come nota a margine, esistono altri metodi di soglia che non devono basarsi su un livello di soglia codificato. Ad esempio, ImageMagick include -latquale esegue una soglia adattativa locale, tenendo conto dei pixel circostanti.
voithos,

7

Puoi usare Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

Da qui .

Ecco cosa ho ottenuto dopo aver applicato alla tua immagine:

inserisci qui la descrizione dell'immagine


10
"Binario" deriva da "bi" che significa "due", quindi suppongo che l'OP voglia convertire l'immagine in puro bianco e nero. La conversione in scala di grigi produce molto più di due livelli.
un CVn

Concordato! ha senso, +1.
MK

2

-monochrome di ImageMagick è un'opzione che utilizza un dithering intelligente e rende l'output molto più visibile che-thresholdse lo si intende per il consumo umano:

convert -monochrome signature.png out.png

inserisci qui la descrizione dell'immagine

Non fa molta differenza per un'immagine così semplice, ma per quelle più grandi, è sorprendente.


1

Puoi anche farlo facilmente con il netpbmtoolkit:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgmconverte in un'immagine in scala di grigi, si pgmtopbmconverte in un'immagine in bianco o nero e quindi reindirizziamo l'output in un file. Sarà nel formato pbm; se vuoi qualcosa di più comune, dovrai aggiungere un convertitore di output (ad esempio, pnmtopngo alcuni di questi)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.