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

5730
Thilo-Alexander Ginkel

Я использую scanimageсо сканером документов (Canon DR-2510C), который поддерживает дуплексное сканирование. К сожалению, его драйвер SANE не поддерживает обнаружение пустых страниц, поэтому со смешанными страницами (одно- или двухсторонние) пустые страницы попадают в результат сканирования.

Я хотел бы автоматически избавиться от этих пустых страниц при последующей обработке результатов сканирования, поэтому я ищу инструмент командной строки, который может определить, состоит ли файл TIFF или PNM в основном из белых пикселей).

Есть идеи?


Это решение, которое я придумал, основано на ответе Лесмана:

for i in "$/out"*.pnm; do histogram=`convert "$" -threshold 50% -format %c histogram:info:-` white=`echo "$" | grep "white" | sed -n 's/^ *\(.*\):.*$/\1/p'` black=`echo "$" | grep "black" | sed -n 's/^ *\(.*\):.*$/\1/p'` blank=`echo "scale=4; $/$ < 0.005" | bc` if [ $ -eq "1" ]; then echo "$ seems to be blank - removing it..." rm "$" fi done 
7
Связанный вопрос по DSP.SE: [Быстрое обнаружение пустой страницы] (https://dsp.stackexchange.com/q/48826/35404) maxschlepzig 6 лет назад 0

5 ответов на вопрос

3
amarprabhu

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

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

С командой:

$ identify -format "%#" source.png

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

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

identify -verbose source.png

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

1
dwery

Мой трюк заключается в сканировании изображений в сжатый без потерь формат (TIFF + сжатие). Таким образом, пустые страницы имеют гораздо меньший размер файла, и я могу обнаружить их find, переместить в другой каталог, быстро проверить их с помощью средства просмотра и затем избавиться от них.

0
lesmana

Вы можете использовать инструмент сравнения ImageMagick для сравнения отсканированных изображений с «главной» пустой страницей. Так как мой ImageMagick-fu довольно ограничен, я не могу дать вам пример команды. Вам нужно будет RTFM :

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

0
Aaron Digulla

Слегка улучшенная версия кода в вопросе:

#!/bin/bash  mkdir -p "blanks"  for i in "$@"; do echo "$" if [[ -e $(dirname "$i")/.$(basename "$i") ]]; then echo " protected." continue fi  histogram=$(convert "$" -threshold 50% -format %c histogram:info:-) #echo $histogram white=$(echo "$" | grep "white" | cut -d: -f1) black=$(echo "$" | grep "black" | cut -d: -f1) if [[ -z "$black" ]]; then black=0 fi  blank=$(echo "scale=4; $/$ < 0.005" | bc) #echo $white $black $blank if [ "$" -eq "1" ]; then echo "$ seems to be blank - removing it..." mv "$" "blanks/$" fi done 

Изменения:

  • Передайте изображения для проверки в качестве аргументов вместо чтения из фиксированного местоположения
  • Отчет о проделанной работе
  • Если код не определяет файл правильно, вы можете дать ему подсказку (создайте пустой файл с именем изображения и точкой впереди, т. Е. Для защиты a.pnmиспользуйте touch .a.pnm)
  • Исправлена ​​ошибка, когда на входе не было черных пикселей
0
maxschlepzig

Вы можете сделать шумную обрезку с помощью 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: 

Похожие вопросы