Leere Bilddateien erkennen

5853
Thilo-Alexander Ginkel

Ich verwende scanimageeinen Dokumentenscanner (Canon DR-2510C), der das Duplex-Scannen unterstützt. Leider unterstützt der SANE-Treiber keine Leerseitenerkennung, so dass bei gemischten Seiten (ein- / doppelseitig) Leerseiten zum Scan-Ergebnis werden.

Ich möchte diese leeren Seiten beim Nachbearbeiten der Scanausgabe automatisch entfernen. Ich suche daher nach einem Befehlszeilenprogramm, 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 aufgrund der Antwort von lesmana gefunden habe:

for i in "$/out"*.pnm; do histogram=`convert "$" -threshold 50% -format %c histogram:info:-` white=`echo "$" | grep "white" | sed -n 's/^ *\(.*\):.*$/\1/p'` black=`echo "$" | grep "black" | sed -n 's/^ *\(.*\):.*$/\1/p'` blank=`echo "scale=4; $/$ < 0.005" | bc` if [ $ -eq "1" ]; then echo "$ seems to be blank - removing it..." rm "$" fi done 
7
Zugehörige Frage zu DSP.SE: [Schnelle Leerseitenerkennung] (https://dsp.stackexchange.com/q/48826/35404) maxschlepzig vor 6 Jahren 0

5 Antworten auf die Frage

3
amarprabhu

Verwenden Sie die Identifizierungsfunktion von ImageMagik CLI wie hier angegeben:

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

Mit dem Befehl:

$ identify -format "%#" source.png

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

Sie können auch den Befehl verwenden:

identify -verbose source.png

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

1
dwery

Mein Trick ist, die Bilder in einem verlustfrei komprimierten 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, schnell mit einem Viewer überprüfen und sie dann loswerden.

0
lesmana

Sie können das ImageMagick- Vergleichstool verwenden, um die gescannten Bilder mit einer leeren "Masterseite" 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 unvollendet zu sein. Hoffentlich reichen die verfügbaren Informationen aus, um loszulegen.

0
Aaron Digulla

Leicht verbesserte Version des Codes in der Frage:

#!/bin/bash  mkdir -p "blanks"  for i in "$@"; do echo "$" if [[ -e $(dirname "$i")/.$(basename "$i") ]]; then echo " protected." continue fi  histogram=$(convert "$" -threshold 50% -format %c histogram:info:-) #echo $histogram white=$(echo "$" | grep "white" | cut -d: -f1) black=$(echo "$" | grep "black" | cut -d: -f1) if [[ -z "$black" ]]; then black=0 fi  blank=$(echo "scale=4; $/$ < 0.005" | bc) #echo $white $black $blank if [ "$" -eq "1" ]; then echo "$ seems to be blank - removing it..." mv "$" "blanks/$" fi done 

Änderungen:

  • Übergeben Sie die Bilder, um sie als Argumente zu prüfen, 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 und einem Punkt vor dem Namen, dh zum Schutz a.pnmverwenden touch .a.pnm).
  • Fehler behoben, wenn keine schwarzen Pixel in der Eingabe vorhanden waren
0
maxschlepzig

Mit ImageMagick können Sie einen lauten Trimm durchführen, z. B .:

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

Die Seite ist nicht leer, wenn die Konvertierung etwa so aussieht:

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

(Als Beispiel wird ein DIN A4-Format mit 600 dpi gescannt.)

Es ist leer, wenn die Höhe / Breite nach dem Beschneiden 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önnen solche Seiten fälschlicherweise als leer erkannt werden.

Betrachtet man die Dateigröße des komprimierten Bildes, dh als Annäherung an die Entropie, erhält man die gleichen Fehlalarme.

Auf der anderen Seite werden Dokumente mit Perforationen, die aber sonst leer sind, wahrscheinlich nicht als leer erkannt, sondern nur mit einem lauten Beschnitt. Wenn Sie sich darum kümmern, kann es sinnvoll sein, ImageMagick vorab mitzuteilen, dass der Randraum unbedingt gekürzt wird. 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: