Rilevamento di file di immagini vuoti


8

Sto usando scanimageuno scanner per documenti (Canon DR-2510C) che supporta la scansione duplex. Sfortunatamente, il suo driver SANE non supporta il rilevamento di pagine vuote, quindi con le pagine miste (solo fronte / fronte / retro), le pagine vuote arrivano al risultato della scansione.

Vorrei eliminare automaticamente quelle pagine vuote durante la post-elaborazione dell'output di scansione, quindi sto cercando uno strumento da riga di comando in grado di rilevare se un file TIFF o PNM è costituito principalmente da pixel bianchi).

Qualche idea?


Questa è la soluzione che mi è venuta in base alla risposta di 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/^ *\(.*\):.*$/\1/p'`
  black=`echo "${histogram}" | grep "black" | sed -n 's/^ *\(.*\):.*$/\1/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

Domanda correlata su DSP.SE: Rilevamento rapido di pagine vuote
maxschlepzig

Risposte:


0

È possibile utilizzare lo strumento di confronto ImageMagick per confrontare le immagini acquisite con una pagina vuota "principale". Dato che il mio ImageMagick-fu è piuttosto limitato, non posso darti alcun comando di esempio. Dovrai RTFM :

Il secondo collegamento ha anche una sezione intitolata "Fax vuoto" che spiega come rilevare pagine di fax vuote. Purtroppo quella sezione sembra incompiuta. Speriamo che le informazioni disponibili siano sufficienti per iniziare.


5

Utilizzare la funzione di identificazione dell'interfaccia della riga di comando di ImageMagik come indicato qui:

http://www.imagemagick.org/script/identify.php

Con comando:

$ identify -format "%#" source.png

Se il numero di colori è 1, hai una pagina vuota.

Puoi anche usare il comando:

identify -verbose source.png

La deviazione standard, l'inclinazione e la curtosi saranno 0 per un'immagine vuota.


1
%#restituisce un valore hash calcolato per l'immagine, dovrebbe essere %kimho.
Nicolai,

1

Versione leggermente migliorata del codice nella domanda:

#!/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

I cambiamenti:

  • Passa le immagini per verificare come argomenti invece di leggere da una posizione fissa
  • Relazione sullo stato di avanzamento
  • Se il codice non rileva correttamente un file, puoi dargli un suggerimento (crea un file vuoto con il nome dell'immagine più un punto davanti, cioè per proteggere a.pnm, usare touch .a.pnm)
  • Risolto errore in assenza di pixel neri nell'input

1

Il mio trucco è scansionare le immagini in un formato compresso senza perdita di dati (tiff + compressione). In questo modo, le pagine vuote hanno una dimensione del file molto inferiore e posso rilevarle con find, spostarle in un'altra directory, controllarle rapidamente con un visualizzatore e quindi liberarmene.


0

Con ImageMagick puoi fare un assetto rumoroso , ad esempio:

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

La pagina non è vuota se Converti stampa qualcosa del genere:

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

(esempio di input è un'immagine lineart scannerizzata DIN A4 a 600 dpi)

È vuoto se l'altezza / larghezza dopo il taglio è sospettosamente piccola, ad esempio:

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

Contrariamente al metodo dell'istogramma di soglia, questo produce meno falsi positivi quando si hanno pagine che contengono solo una parola o una riga di testo. Con un istogramma di soglia, tali pagine potrebbero erroneamente essere rilevate come vuote.

Osservare la dimensione del file dell'immagine compressa, ovvero un'approssimazione dell'entropia, produce gli stessi falsi positivi.

Sul rovescio della medaglia, i documenti con perforazioni ma altrimenti vuoti, probabilmente non vengono rilevati come vuoti con solo una rifinitura rumorosa. Se ti preoccupi di questi, potrebbe avere senso dire a ImageMagick di tagliare incondizionatamente un po 'di spazio sul margine, per prima cosa. Ad esempio, se l'immagine è stata scansionata con 600 dpi e si desidera ignorare un margine di 1 pollice tutt'intorno:

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

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.