Tenho alguns documentos antigos que foram digitalizados e quero convertê-los em preto e branco. O conteúdo deve ser sempre preto e fundo branco:
Eu uso o Photoshop.
Tenho alguns documentos antigos que foram digitalizados e quero convertê-los em preto e branco. O conteúdo deve ser sempre preto e fundo branco:
Eu uso o Photoshop.
Respostas:
Se você tem controle sobre a digitalização ou pode digitalizá-las novamente, aumente a configuração de contraste na digitalização e defina o ponto preto na parte mais escura do texto possível. Isso facilitaria as etapas abaixo. Caso contrário, continue a ler ...
Aqui está parte de uma digitalização de documento antigo bastante típica:
Os detalhes serão diferentes dependendo do documento (isso tem um contraste um pouco maior que o da sua amostra, por exemplo), mas o esquema geral será o mesmo.
Observe que o controle deslizante amarelo está muito à direita, iluminando o fundo amarelado. Consegui escurecer um pouco o texto.
Isso leva você a 95% do caminho até lá. Um documento digitalizado geralmente possui um histograma com um grande pedaço para a direita (o papel) e um pequeno pedaço para a esquerda (texto). Você precisará experimentar seus documentos para encontrar as configurações corretas.
A partir deste ponto, você pode duplicar a imagem, achatar a duplicata e usar as ferramentas normais de retoque do Photoshop para limpar o restante.
Você mencionou o Photoshop, mas caso esteja interessado, também há um plug-in GIMP que faz limpeza e processamento avançados em escala de cinza:
Chama-se Nuvola Tools e concentra-se principalmente na arte digitalizada, mas você pode tentar.
Antes:
Depois de:
Fonte: Registro de Plug-in do GIMP
Com o GIMP:
Eu tentei vários métodos mencionados incl. o plug- in gratuito do FineThreshold http://www.mehdiplugins.com/english/finethreshold.htm . Este plug-in produz bons resultados rapidamente, desde que o documento seja iluminado de maneira homogênea e o próprio papel também seja de qualidade homogênea. No entanto, este não foi o meu caso. Eu experimentei que a parte superior de todos os documentos era mais leve que a inferior. Consequentemente, todo método e sua configuração parcial funcionaram bem apenas para a parte de cada página e não para o restante.
Eventualmente, encontrei o efeito "Dynamic Thresholding", que faz parte do Zoner Photo Studio v15 . Sua versão eval é gratuita por algum período, eu acho. Parece compensar o limiar de preto e branco de acordo com a luminosidade da vizinhança. Sua aplicação é apenas um processo de uma etapa. Para mim, os parâmetros "Large, value +14" funcionaram muito bem. Ao lado de "Editor", o Zoner também contém a interface "Gerente", na qual é possível processar o lote em todas as imagens selecionadas. No final, pude imprimir o resultado na muito antiga impressora a laser de 300 dpi com excelente contraste.
Agora, a única tarefa restante para a qual estou procurando é a CROP automática de todas as imagens de maneira inteligente para cortar as margens desnecessárias. Qualquer dica é bem-vinda porque o corte manual é chato e demorado.
Houve um plugin no registro do plugin GIMP que fez isso. Está arquivado aqui agora.
Algum tempo atrás, eu traduzi isso para Python e ele correu muito mais rápido.
Aqui está o resultado de sua aplicação à imagem na pergunta original:
Aqui está o resultado de sua aplicação à imagem na resposta de Alan:
Enfim, aqui está o código do 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()