Detectando arquivos de imagem em branco

7

Estou usando scanimage com um scanner de documentos (Canon DR-2510C) que suporta a digitalização duplex. Infelizmente, o driver SANE não suporta detecção de página em branco, de modo que, com páginas mistas (simples / frente e verso), as páginas em branco são incluídas no resultado da digitalização.

Eu gostaria de me livrar automaticamente dessas páginas em branco ao pós-processar a saída da verificação, por isso estou procurando uma ferramenta de linha de comando capaz de detectar se um arquivo TIFF ou PNM consiste principalmente em pixels brancos).

Alguma idéia?

Esta é a solução que eu criei com base na resposta da lesmana:

for i in "${DEST_DIR}/out"*.pnm; do
  histogram='convert "${i}" -threshold 50% -format %c histogram:info:-'
  white='echo "${histogram}" | grep "white" | sed -n 's/^ *\(.*\):.*$//p''
  black='echo "${histogram}" | grep "black" | sed -n 's/^ *\(.*\):.*$//p''
  blank='echo "scale=4; ${black}/${white} < 0.005" | bc'
  if [ ${blank} -eq "1" ]; then
    echo "${i} seems to be blank - removing it..."
    rm "${i}"
  fi
done
    
por Thilo-Alexander Ginkel 05.10.2011 / 23:18

5 respostas

0

Você pode usar a ImageMagick para comparar a ferramenta para comparar as imagens digitalizadas com uma página em branco "principal". Como meu ImageMagick-fu é bastante limitado, não posso dar nenhum comando de exemplo. Você terá que RTFM :

O segundo link tem até uma seção intitulada "Fax em branco", que explica como detectar páginas de fax em branco. Infelizmente essa seção parece inacabada. Espero que as informações disponíveis sejam suficientes para você começar.

    
por 05.10.2011 / 23:57
3

Use o recurso identificar do CLI do ImageMagik como dado aqui:

link

com o comando:

$ identify -format "%#" source.png

Se o número de cores for 1, você tem uma página em branco.

Você também pode usar o comando:

identify -verbose source.png

O desvio padrão, a inclinação e a curtose serão 0 para uma imagem em branco.

    
por 03.12.2013 / 06:16
1

Meu truque é digitalizar as imagens para um formato compactado sem perdas (tiff + compression). Dessa forma, as páginas em branco têm um tamanho de arquivo muito menor e eu posso detectá-las com find , movê-las para outro diretório, verificá-las rapidamente com um visualizador e depois eliminá-las.

    
por 08.04.2015 / 10:56
0

Versão ligeiramente melhorada do código na pergunta:

#!/bin/bash

mkdir -p "blanks"

for i in "$@"; do
    echo "${i}"
    if [[ -e $(dirname "$i")/.$(basename "$i") ]]; then
        echo "   protected."
        continue
    fi

    histogram=$(convert "${i}" -threshold 50% -format %c histogram:info:-)
    #echo $histogram
    white=$(echo "${histogram}" | grep "white" | cut -d: -f1)
    black=$(echo "${histogram}" | grep "black" | cut -d: -f1)
    if [[ -z "$black" ]]; then
        black=0
    fi

    blank=$(echo "scale=4; ${black}/${white} < 0.005" | bc)
    #echo $white $black $blank
    if [ "${blank}" -eq "1" ]; then
        echo "${i} seems to be blank - removing it..."
        mv "${i}" "blanks/${i}"
    fi
done

Mudanças:

  • Passe as imagens para verificar como argumentos em vez de ler de um local fixo
  • Relatório de andamento
  • Se o código não detectar um arquivo corretamente, você pode dar uma dica (crie um arquivo vazio com o nome da imagem mais um ponto na frente, ou seja, para proteger a.pnm , use touch .a.pnm )
  • Corrigido erro quando não havia pixels pretos na entrada
por 22.02.2015 / 12:15
0

Você pode fazer um corte ruidoso com ImageMagick , por exemplo:

convert image-0001.png -virtual-pixel White -blur 0x15 -fuzz 15% -trim info:

A página não está vazia se o conversor imprime algo assim:

image-0001.png PNG 4565x6129 4960x7016+279+816 8-bit Gray 0.000u 0:00.000

(a entrada de exemplo é uma imagem linear digitalizada de 600 dpi DIN A4)

Está vazio se a altura / largura após o corte for suspeitamente pequena, por exemplo:

image-0001.png PNG 2505x40 4960x7016+0+6976 8-bit Gray 0.000u 0:00.000

Em contraste com o método de histograma de limiar, isso produz menos falsos positivos quando você tem páginas que contêm apenas uma palavra ou uma linha de texto. Com um histograma de limiar, essas páginas poderiam ser erroneamente detectadas como vazias.

Observar o tamanho do arquivo da imagem compactada, ou seja, como uma aproximação da entropia, produz os mesmos falsos positivos.

Por outro lado, documentos com perfurações, mas vazios, provavelmente não são detectados como vazios com apenas um corte ruidoso. Se você se preocupa com isso, pode fazer sentido dizer ao ImageMagick para cortar incondicionalmente algum espaço de margem, primeiro. Por exemplo, se a imagem foi digitalizada com 600 dpi e você deseja ignorar uma margem de 1 polegada ao redor:

convert i1.png -shave 600x0 -virtual-pixel White -blur 0x15 -fuzz 15% -trim info:
    
por 09.10.2017 / 23:04