Leere Bilddateien erkennen

8

Ich verwende scanimageeinen Dokumentenscanner (Canon DR-2510C), der Duplex-Scannen unterstützt. Leider unterstützt der SANE-Treiber die Erkennung leerer Seiten nicht, sodass leere Seiten bei gemischten Seiten (einseitig / doppelseitig) in das Scan-Ergebnis gelangen.

Ich möchte diese leeren Seiten bei der Nachbearbeitung der Scanausgabe automatisch entfernen, daher suche ich nach einem Befehlszeilentool, das erkennen kann, ob eine TIFF- oder PNM-Datei hauptsächlich aus weißen Pixeln besteht.

Irgendwelche Ideen?


Dies ist die Lösung, die ich basierend auf der Antwort von Lesmana gefunden habe:

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
Thilo-Alexander Ginkel
quelle
Verwandte Frage zu DSP.SE: Schnelle Erkennung leerer Seiten
maxschlepzig

Antworten:

0

Sie können das ImageMagick- Vergleichstool verwenden, um die gescannten Bilder mit einer leeren "Master" -Seite zu vergleichen. Da mein ImageMagick-fu ziemlich begrenzt ist, kann ich Ihnen keinen Beispielbefehl geben. Sie müssen RTFM :

Der zweite Link enthält sogar einen Abschnitt mit dem Titel "Leeres Fax", in dem erläutert wird, wie leere Faxseiten erkannt werden. Leider scheint dieser Abschnitt noch nicht fertig zu sein. Hoffentlich reichen die verfügbaren Informationen aus, um loszulegen.

Lesmana
quelle
5

Verwenden Sie die hier angegebene Identifizierungsfunktion von ImageMagik CLI:

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

Mit Befehl:

$ identify -format "%#" source.png

Wenn die Anzahl der Farben 1 ist, haben Sie eine leere Seite.

Sie können auch den folgenden Befehl verwenden:

identify -verbose source.png

Die Standardabweichung, der Versatz und die Kurtosis sind 0 für ein leeres Bild.

Amarprabhu
quelle
1
%#%kGibt einen berechneten Hashwert für das Bild zurück. Er sollte imho sein.
Nicolai
1

Leicht verbesserte Version des Codes in der Frage:

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

Änderungen:

  • Übergeben Sie die zu überprüfenden Bilder als Argumente, anstatt von einem festen Ort aus zu lesen
  • Fortschrittsbericht
  • Wenn der Code eine Datei nicht richtig erkennt, können Sie ihr einen Hinweis geben (erstellen Sie eine leere Datei mit dem Namen des Bildes plus einem Punkt davor, dh zum Schutz a.pnm, verwenden Sie touch .a.pnm)
  • Fehler behoben, wenn keine schwarzen Pixel in der Eingabe waren
Aaron Digulla
quelle
1

Mein Trick besteht darin, die Bilder in ein verlustfrei komprimiertes Format (Tiff + Komprimierung) zu scannen. Auf diese Weise haben leere Seiten eine viel geringere Dateigröße und ich kann sie erkennen find, in ein anderes Verzeichnis verschieben, sie schnell mit einem Viewer überprüfen und sie dann entfernen.

dwery
quelle
0

Sie können mit ImageMagick ein lautes Trimmen durchführen , z.

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

Die Seite ist nicht leer, wenn beim Konvertieren etwa Folgendes gedruckt wird:

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

(Die Beispieleingabe ist ein mit 600 dpi DIN A4 gescanntes lineares Bild.)

Es ist leer, wenn die Höhe / Breite nach dem Zuschneiden verdächtig klein ist, z.

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

Im Gegensatz zur Schwellenwert-Histogrammmethode führt dies zu weniger Fehlalarmen, wenn Sie Seiten haben, die nur ein Wort oder eine Textzeile enthalten. Mit einem Schwellenhistogramm könnten solche Seiten fälschlicherweise als leer erkannt werden.

Betrachtet man die Dateigröße des komprimierten Bildes, dh als Annäherung an die Entropie, ergibt sich das gleiche falsch positive Ergebnis.

Auf der anderen Seite werden Dokumente mit Perforationen, die aber ansonsten leer sind, wahrscheinlich nicht mit nur einem lauten Zuschnitt als leer erkannt. Wenn Sie sich für diese interessieren, ist es möglicherweise sinnvoll, ImageMagick anzuweisen, zunächst unbedingt einen Randbereich zu kürzen. Wenn das Bild beispielsweise mit 600 dpi gescannt wurde und Sie einen 1-Zoll-Rand ringsum ignorieren möchten:

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

%k sollte für das Format verwendet werden, da es Folgendes zurückgibt:

BERECHNET: Anzahl der einzigartigen Farben

Verwendungszweck:

identify -format "%k" image.tif

Quelle: https://imagemagick.org/script/escape.php

Nicolai
quelle