Como você binariza uma imagem colorida?

14

Meu amigo tem uma imagem colorida com caligrafia chinesa (basicamente tirando uma foto ou digitalizando o que ele escreveu em um pedaço de papel branco) e ele gostaria que eu a convertesse em uma imagem binária em preto e branco. Existem aplicativos no Ubuntu que podem fazer isso?

Aqui está um exemplo de imagem:

insira a descrição da imagem aqui

Tim
fonte

Respostas:

27

O que você deseja é chamado de "limite" no processamento de imagens. Basicamente, ele pega uma imagem como entrada e gera uma imagem que possui todos os pixels com um valor abaixo de um determinado limite definido como preto e todos os pixels cujo valor está acima do limite definido como branco. Isso resulta em uma imagem em preto e branco de uma imagem de entrada arbitrária.

Geralmente, você deseja converter primeiro em escala de cinza para obter resultados mais previsíveis, mas também é possível limitar uma imagem colorida.

Você pode usar uma ferramenta gráfica como o GIMP para fazer isso de maneira interativa (você encontrará a ferramenta no menu principal -> Cores -> Limiar) ou pode usar o ImageMagick da seguinte forma:

convert colored.png -threshold 75% thres_colored.png

A execução do comando acima na imagem de exemplo produz o resultado mostrado abaixo.

Versão em preto e branco da imagem do OP

Como o limiar costuma ser um processo de tentativa e erro para obter um resultado satisfeito, principalmente se a imagem de origem não estiver muito próxima do preto e branco, recomendo a abordagem da GUI, se possível, mas se essa não é uma opção por qualquer motivo, você também pode fazê-lo através da linha de comando. Para um controle mais preciso da saída, você pode usar ferramentas como curvas de cores, níveis e contraste primeiro para isolar melhor as partes claras e escuras da imagem antes do limiar. (Na verdade, o limite pode ser visto como um caso extremo de uso da ferramenta de curvas de cores.)

um CVn
fonte
2
Obrigado! Como uma imagem colorida possui três canais RBG, a que / que o limite se aplica em geral?
Tim
@ Tim Provavelmente depende do software, mas eu esperaria que o limite (a menos que você especifique por canal ou para um canal específico, veja, por exemplo, a -channelopção de conversão do ImageMagick ) seja aplicado a algum tipo de "valor" do pixel, que é calculado de todos os canais. Essa é a razão pela qual eu disse que você pode querer converter primeiro em escala de cinza para obter resultados mais previsíveis. (Também veja minha edição.)
um CVn
Obrigado! Existe alguma documentação para a qual o limite se aplica no comando mostrado em sua postagem?
Tim
@ Tim não realmente. Eu esperava que o convert assumisse uma porcentagem do valor máximo (que deveria ter sido 256 por canal) ou um valor específico, mas eu só poderia obter um resultado útil ao especificar uma porcentagem. Quando você faz isso com uma ferramenta gráfica, incluindo o GIMP, geralmente possui um histograma que mostra a distribuição tonal da imagem; isso será uma grande ajuda para escolher o valor adequado. Usar apenas a linha de comando, a menos que você tenha um motivo específico para isso, é provavelmente mais problemas do que vale a pena, na verdade.
a CVn
2
Como uma observação lateral, existem outros métodos de limite que não precisam depender de um nível de limite codificado. Por exemplo, o ImageMagick inclui o -latque executa um limite adaptável local, levando em consideração os pixels circundantes.
Voithos
7

Você pode usar o Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

A partir daqui .

Aqui está o que eu recebi depois de aplicar à sua imagem:

insira a descrição da imagem aqui

mkc
fonte
10
"Binário" vem de "bi", significando "dois", portanto, presumo que o OP deseje converter a imagem em preto e branco puro. A conversão em escala de cinza produz muito mais que dois níveis.
um CVn 09/01
Acordado! faz sentido, +1.
mkc
2

-monochrome do ImageMagick é uma opção que usa pontilhamento inteligente e torna a saída muito mais visível do que-thresholdse você pretender para consumo humano:

convert -monochrome signature.png out.png

insira a descrição da imagem aqui

Não faz muita diferença para uma imagem tão simples, mas para imagens maiores, é impressionante.

Ciro Santilli adicionou uma nova foto
fonte
1

Você também pode fazer isso facilmente com o netpbmkit de ferramentas:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgmconverte em uma imagem em escala de cinza, pgmtopbmem preto ou branco e, em seguida, redirecionamos a saída para um arquivo. Será no formato pbm; se você quiser algo mais comum, precisará adicionar um conversor de saída (por exemplo, pnmtopngou algo assim)

Wouter Verhelst
fonte