检测空白图像文件


8

我正在使用scanimage支持双面扫描的文档扫描仪(Canon DR-2510C)。不幸的是,它的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

关于DSP.SE的相关问题:快速空页检测
maxschlepzig

Answers:


0

您可以使用ImageMagick比较工具将扫描的图像与“主”空白页进行比较。由于我的ImageMagick-fu非常有限,因此无法提供任何示例命令。您将必须使用RTFM

第二个链接甚至有一个标题为“空白传真”的部分,说明了如何检测空白传真页面。可悲的是,该部分似乎尚未完成。希望可用的信息足以让您入门。


5

使用ImageMagik CLI 的识别功能,如下所示:

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

使用命令:

$ identify -format "%#" source.png

如果颜色数为1,则您将有一个空白页。

您还可以使用以下命令:

identify -verbose source.png

对于空白图像,标准偏差,偏斜和峰度将为0。


1
%#返回图像的计算得出的哈希值,应该为%kimho。
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:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.