空白の画像ファイルを検出する


8

scanimage両面スキャンに対応したドキュメントスキャナー(Canon DR-2510C)を使用しています。残念ながら、そのSANEドライバーは空白ページの検出をサポートしていないため、混合ページ(片面/両面)では、空白ページがスキャン結果になります。

スキャン出力の後処理時にこれらの空白ページを自動的に削除したいので、TIFFまたはPNMファイルがほとんど白いピクセルで構成されているかどうかを検出できるコマンドラインツールを探しています。

何か案は?


これは、レスマナの答えに基づいて私が思いついた解決策です:

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

回答:


0

ImageMagick比較ツールを使用して、スキャンした画像を「マスター」の空白ページと比較できます。私のImageMagick-fuは非常に制限されているため、コマンドの例を示すことはできません。RTFMする必要があります。

2番目のリンクには、空白のFAXページを検出する方法を説明する「空白のFAX」というタイトルのセクションもあります。悲しいことに、そのセクションは未完成のようです。うまくいけば、利用可能な情報はあなたが始めるのに十分です。


5

以下に示すように、ImageMagik CLIの識別機能を使用します。

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

コマンドで:

$ identify -format "%#" source.png

色の数が1の場合、空白のページがあります。

次のコマンドも使用できます。

identify -verbose source.png

空白の画像の標準偏差、傾斜、尖度は0になります。


1
%#画像の計算されたハッシュ値を返します%k
Nicolai

1

問題のコードのわずかに改善されたバージョン:

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

変更:

  • 固定位置から読み取る代わりに、チェックする画像を引数として渡します
  • 経過報告
  • コードがファイルを正しく検出しない場合は、ヒントを与えることができます(画像の名前と前にドットを付けた空のファイルを作成します。つまりa.pnm、を使用して保護しますtouch .a.pnm
  • 入力に黒いピクセルがない場合のエラーを修正しました

1

私のトリックは、画像をロスレス圧縮形式(tiff +圧縮)にスキャンすることです。このようにして、空白のページはファイルサイズがはるかに小さくなりfind、でそれらを検出し、別のディレクトリに移動し、ビューアですばやく確認して、それらを取り除くことができます。


0

ImageMagickノイズの多いトリミングを行うことができます。例:

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

convertが次のようなものを印刷する場合、ページは空ではありません。

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

(入力例は600 dpi DIN A4スキャンされたラインアート画像です)

トリミング後の高さ/幅が疑わしいほど小さい場合は空になります。例:

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

しきい値ヒストグラム法とは対照的に、単語またはテキスト行のみを含むページがある場合、これにより誤検知が少なくなります。しきい値ヒストグラムを使用すると、そのようなページが空であると誤って検出される可能性があります。

圧縮された画像のファイルサイズ、つまりエントロピーの近似値を見ると、同じ誤検知が生じます。

反対に、ミシン目が付いているがそれ以外は空のドキュメントは、ノイズの多いトリムだけでは空として検出されない可能性があります。それらに関心がある場合は、最初に無条件にマージンスペースをトリミングするようにImageMagickに指示することは意味があるかもしれません。たとえば、画像が600 dpiでスキャンされ、1インチのマージンをすべて無視したい場合:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.