Cortar o espaço vazio externo com o ImageMagick não funciona em documentos digitalizados

4

Tendo em conta uma imagem que tem algum conteúdo real no interior e, normalmente, algum branco ou preto ou transparência indesejada, gostaria de recortar ou recortar as partes exteriores usando o ImageMagick.

A imagem a seguir foi desenhada digitalmente em um computador (no HTML <canvas> ):

OseguintecomandoImageMagickéoqueeutentei:

$convertcanvas.png-trim+repagecanvas_trimmed.png

Efuncionouperfeitamente:

Então,issoéexatamenteoqueeuquero.Masagoraqueroqueissotambémfuncionecomdocumentosdigitalizados,quenãosãotão"perfeitos" quanto imagens geradas por computador, ou seja, eles têm mais tons de "branco" e "preto" e nenhuma transparência que seria mais fácil de detectar. Às vezes, eles ainda têm algumas barras pretas ao redor do fundo branco do papel porque a área do scanner é maior que o papel:

Comestaimagem,eutenteiosseguintescomandosnaordemdada,cadaumtentandosermaisagressivo,masnenhumproduzindonenhumresultado-vocênãopodevernenhumadiferençaentreaimagemoriginaleasimagens"aparadas", isto é, o aparar ou cortar não funciona de todo:

$ convert scan.jpg -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 10% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor white -border 1x1 -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor black -border 1x1 -trim +repage scan_trimmed.jpg

O que estou fazendo de errado aqui? Como o comando ImageMagick, que confiantemente apara imagens geradas por computador, pode ser modificado para que os documentos digitalizados do estilo acima sejam ajustados de maneira tão confiável?

    
por caw 14.06.2017 / 04:17

3 respostas

3

Você pode usar -shave e simplesmente shave fora das bordas e, em seguida, use a lógica usada posteriormente para processar adequadamente.

Note: The amount you shave off (e.g. the argument after "-shave" 40x40 or 10x10, etc. ) is important so be sure to test thoroughly to ensure this setting works universally in your environment for your images.

Exemplo de lógica

@ECHO ON

SET Convert="C:\Program Files\ImageMagick\Convert.exe"
%convert% C:\Folder\Circle.jpg -shave 40x40 C:\Folder\ShavedCircle.jpg
<The rest of your logic against C:\Folder\ShavedCircle.jpg now>

Antes

Depoisde

Maisrecursos

  • Shave,removingedgesfromaimage

    Thereverseofthe"-border" or "-frame" operators, is "-shave", which if given the same arguments, will remove the space added by these commands.

    The main thing to keep in mind about these three operators is that they add and remove space on opposite sides of the images, not just one side, or adjacent sides.

    If you want to only remove one edge of an image, then you will need to use the "-chop" operator instead. (See the Chop Examples below).

    As before all the operators "-border", "-frame", and "-shave", only effect the real image on the virtual canvas and not the virtual canvas itself.

    source

por 19.06.2017 / 20:09
1

Remover manchas de sujeira ou ruído das imagens com o ImageMagick

Abaixo está o que eu usei para me livrar das manchas de sujeira no arquivo de imagem da imagem em sua pergunta, mas eu fui em frente e usei o raspar com o 90x90 primeiro, o que você confirmou ajudou a resolver o problema da outra solução que forneci para a recompensa concedida.

Exemplo de lógica

@ECHO ON

SET Convert="C:\Program Files\ImageMagick\Convert.exe"
%convert% C:\Folder\Circle.jpg -shave 90x90 C:\Folder\ShavedCircle.jpg
%convert% C:\Folder\ShavedCircle.jpg -write MPR:source ^
  -morphology close rectangle:3x4 ^
  -morphology erode square    MPR:source -compose Lighten -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
C:\Folder\cleaned.jpg

Antes

Depoisde

Duetothenatureoftheringingnoise,allblacknoisespecksareseparatedbyatleast1pixelfromtheletters.

Onegoodapproachtoremovethisnoisewouldbetodilatetheimagesothatatleastone"seed" part of each letter remains, then erode these seeds while using the original image as a mask; in effect a flood-fill for each letter.

This way the shape of the letters and other large blobs is preserved perfectly, and smaller blobs disappear.

The biggest dilate that still leaves a part of each letter shape seems to be a 3x4 rectangle for the example data; perhaps use something smaller to be on the safe side.

This command first dilates that 3x4 rectangle, end then erodes until the letters are all whole again

Code

convert cleanup.tif -write MPR:source ^
  -morphology close rectangle:3x4 ^
  -morphology erode square    MPR:source -compose Lighten -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  cleaned.png

source

Mais recursos

por 26.06.2017 / 05:34
1

O que acabou por fornecer resultados perfeitos, pelo menos para o meu exemplo específico mostrado na pergunta original ( scan.jpg ), foi a seguinte solução em duas etapas:

convert \
    scan.jpg \
    -write MPR:source \
    -morphology close rectangle:3x4 \
    -clip-mask MPR:source \
    -morphology erode:8 square \
    +clip-mask \
    scan_intermediate.jpg

convert scan_intermediate.jpg -shave 40x40 -fuzz 10% -trim +repage scan_final.jpg

Esta solução é composta por três partes:

  1. O comando da minha pergunta original
  2. A remoção de ruído mostrada em esta resposta
  3. O operador -shave sugeriu em esta resposta
por 26.06.2017 / 17:05