Виявлення порожніх файлів зображень


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 :

Друге посилання навіть має розділ під назвою "Порожній факс", де пояснюється, як виявити порожні сторінки факсу. На жаль, цей розділ здається незавершеним. Сподіваємось, наявної інформації вам достатньо для початку роботи.


5

Використовуйте функцію ідентифікації CLI ImageMagik, як вказано тут:

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

З командою:

$ identify -format "%#" source.png

Якщо кількість кольорів дорівнює 1, у вас є порожня сторінка.

Ви також можете скористатися командою:

identify -verbose source.png

Стандартне відхилення, перекос і куртоз становитимуть 0 для порожнього зображення.


1
%#повертає для зображення обчислене хеш-значення, воно повинно бути %kімхо.
Миколай

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:

Сторінка не порожня, якщо перетворення друкує щось подібне:

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

(наприклад, вхід - лінійне зображення відсканованого DIN A4 від 600 dpi)

Він порожній, якщо висота / ширина після обрізки підозріло невелика, наприклад:

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:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.