デュプレックススキャンをサポートするドキュメントスキャナー(Canon DR-2510C)でscanimage
を使用しています。残念ながら、そのSANEドライバーは空白ページの検出をサポートしていないため、混合ページ(片面/両面)では、空白ページがスキャン結果になります。
スキャン出力を後処理するときにこれらの空白ページを自動的に削除したいので、TIFFまたはPNMファイルがほとんど白いピクセルで構成されているかどうかを検出できるコマンドラインツールを探しています。
何か案は?
これは、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
ImageMagick 比較ツールを使用して、スキャンした画像を「マスター」の空白ページと比較できます。私のImageMagick-fuは非常に限られているので、コマンドの例を示すことはできません。 [〜#〜] rtfm [〜#〜] :
2番目のリンクには、空白のファックスページを検出する方法を説明する「空白のファックス」というタイトルのセクションもあります。悲しいことに、そのセクションは未完成のようです。うまくいけば、利用可能な情報はあなたが始めるのに十分です。
ここに示すように、ImageMagik CLIのidentify機能を使用します。
http://www.imagemagick.org/script/identify.php
コマンド付き:
$ identify -format "%#" source.png
色数が1の場合、空白のページがあります。
次のコマンドを使用することもできます。
identify -verbose source.png
空白の画像の場合、標準偏差、スキュー、尖度は0になります。
質問のコードのわずかに改善されたバージョン:
#!/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
を使用します)私の秘訣は、画像を可逆圧縮形式(tiff +圧縮)にスキャンすることです。このように、空白のページのファイルサイズははるかに小さく、find
で検出し、別のディレクトリに移動し、ビューアですばやく確認してから取り除くことができます。
Noisy trim with 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
しきい値ヒストグラム法とは対照的に、これにより、単語または1行のテキストのみを含むページがある場合の誤検知が少なくなります。しきい値ヒストグラムを使用すると、そのようなページが誤って空として検出される可能性があります。
圧縮された画像のファイルサイズを見ると、つまりエントロピーの概算として、同じ誤検知が発生します。
反対に、ミシン目はあるが空のドキュメントは、ノイズの多いトリムだけでは空として検出されない可能性があります。これらを気にする場合は、最初にマージンスペースを無条件にトリミングするようにImageMagickに指示するのが理にかなっているかもしれません。たとえば、画像が600 dpiでスキャンされ、周囲の1インチの余白を無視したい場合:
convert i1.png -shave 600x0 -virtual-pixel White -blur 0x15 -fuzz 15% -trim info:
%k
は、次のようにフォーマットに使用する必要があります。
計算:ユニークな色の数
使用法:
identify -format "%k" image.tif