Détection de fichiers d'images vierges

8

J'utilise scanimageavec un scanner de documents (Canon DR-2510C) qui prend en charge la numérisation recto verso. Malheureusement, son pilote SANE ne prend pas en charge la détection des pages vierges, de sorte qu'avec les pages mixtes (simple / double face), les pages vierges entrent dans le résultat de la numérisation.

Je voudrais me débarrasser automatiquement de ces pages vierges lors du post-traitement de la sortie de numérisation, donc je cherche un outil en ligne de commande qui est capable de détecter si un fichier TIFF ou PNM est composé principalement de pixels blancs).

Des idées?


Voici la solution que j'ai trouvée sur la base de la réponse de 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
Thilo-Alexander Ginkel
la source
Question connexe sur DSP.SE: Détection rapide des pages vides
maxschlepzig

Réponses:

0

Vous pouvez utiliser l' outil de comparaison ImageMagick pour comparer les images numérisées avec une page vierge "principale". Étant donné que mon ImageMagick-fu est assez limité, je ne peux pas vous donner d'exemple de commande. Vous devrez RTFM :

Le deuxième lien a même une section intitulée "Fax vierge" qui explique comment détecter les pages de fax vierges. Malheureusement, cette section semble inachevée. J'espère que les informations disponibles vous permettront de démarrer.

lesmana
la source
5

Utilisez la fonction d' identification d'ImageMagik CLI comme indiqué ici:

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

Avec commande:

$ identify -format "%#" source.png

Si le nombre de couleurs est 1, vous avez une page vierge.

Vous pouvez également utiliser la commande:

identify -verbose source.png

L'écart type, l'inclinaison et le kurtosis seront de 0 pour une image vierge.

amarprabhu
la source
1
%#renvoie une valeur de hachage calculée pour l'image, elle doit être à %kmon humble avis.
Nicolai
1

Version légèrement améliorée du code dans la question:

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

Changements:

  • Passez les images à vérifier comme arguments au lieu de lire à partir d'un emplacement fixe
  • Rapport d'étape
  • Si le code ne détecte pas correctement un fichier, vous pouvez lui donner un indice (créer un fichier vide avec le nom de l'image plus un point devant, c'est-à-dire pour protéger a.pnm, utiliser touch .a.pnm)
  • Correction d'une erreur lorsqu'il n'y avait pas de pixels noirs dans l'entrée
Aaron Digulla
la source
1

Mon astuce consiste à numériser les images dans un format compressé sans perte (tiff + compression). De cette façon, les pages vierges ont une taille de fichier beaucoup plus faible et je peux les détecter avec find, les déplacer vers un autre répertoire, les vérifier rapidement avec une visionneuse puis les supprimer.

habitation
la source
0

Vous pouvez effectuer un découpage bruyant avec ImageMagick , par exemple:

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

La page n'est pas vide si convert imprime quelque chose comme ceci:

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

(l'exemple d'entrée est une image linéaire numérisée de 600 dpi DIN A4)

Il est vide si la hauteur / largeur après la coupe est étrangement petite, par exemple:

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

Contrairement à la méthode de l'histogramme à seuil, cela produit moins de faux positifs lorsque vous avez des pages qui contiennent juste un mot ou une ligne de texte. Avec un histogramme à seuil, de telles pages pourraient à tort être détectées comme vides.

En regardant la taille du fichier de l'image compressée, c'est-à-dire comme une approximation de l'entropie, on obtient les mêmes faux positifs.

D'un autre côté, les documents avec des perforations mais autrement vides, ne sont probablement pas détectés comme vides avec juste une garniture bruyante. Si vous vous souciez de ceux-ci, il peut être judicieux de dire à ImageMagick de couper inconditionnellement un espace de marge, d'abord. Par exemple, si l'image a été numérisée à 600 dpi et que vous souhaitez ignorer une marge de 1 pouce tout autour:

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

%k doit être utilisé pour le format, car il renvoie:

CALCULÉ: nombre de couleurs uniques

Usage:

identify -format "%k" image.tif

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

Nicolai
la source