Обнаружение пустых файлов изображений


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 довольно ограничен, я не могу дать вам пример команды. Тебе придется прочти чертову документацию :

Во второй ссылке даже есть раздел «Пустой факс», в котором объясняется, как обнаружить пустые страницы факса. К сожалению, этот раздел кажется незаконченным. Надеемся, что доступной информации достаточно для начала.


4

Использовать идентифицировать особенность ImageMagik CLI, как указано здесь:

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

С командой:

$ identify -format "%#" source.png

Если количество цветов равно 1, у вас есть пустая страница.

Вы также можете использовать команду:

identify -verbose source.png

Стандартное отклонение, перекос и эксцесс будут 0 для пустого изображения.


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

(пример ввода - отсканированное линейное изображение DIN A4 с разрешением 600 точек на дюйм)

Пусто, если высота / ширина после обрезки подозрительно мала, например:

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

В отличие от метода пороговой гистограммы, это дает меньше ложных срабатываний, когда у вас есть страницы, которые просто содержат слово или строку текста. С пороговой гистограммой такие страницы могут быть ошибочно определены как пустые.

Рассмотрение размера файла сжатого изображения, то есть приближения энтропии, дает те же ложные срабатывания.

С другой стороны, документы с перфорацией, но в остальном пустые, скорее всего, не распознаются как пустые только с шумной обрезкой. Если вы заботитесь об этом, возможно, имеет смысл сказать ImageMagick, чтобы сначала безоговорочно обрезать пространство. Например, если изображение было отсканировано с разрешением 600 точек на дюйм, и вы хотите игнорировать отступ в 1 дюйм вокруг:

convert i1.png -shave 600x0 -virtual-pixel White -blur 0x15 -fuzz 15% -trim info:
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.