Mendeteksi file gambar kosong

8

Saya menggunakan scanimagedengan pemindai dokumen (Canon DR-2510C) yang mendukung pemindaian dupleks. Sayangnya, driver SANE-nya tidak mendukung deteksi halaman kosong, sehingga dengan halaman campuran (satu / dua sisi), halaman kosong membuatnya menjadi hasil pemindaian.

Saya ingin secara otomatis menghapus halaman kosong tersebut ketika memposting pemrosesan hasil pemindaian, jadi saya mencari alat baris perintah yang dapat mendeteksi apakah file TIFF atau PNM sebagian besar terdiri atas piksel putih).

Ada ide?


Ini adalah solusi yang saya buat berdasarkan jawaban oleh 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
Thilo-Alexander Ginkel
sumber
Pertanyaan terkait pada DSP.SE: Deteksi halaman kosong cepat
maxschlepzig

Jawaban:

0

Anda dapat menggunakan alat perbandingan ImageMagick untuk membandingkan gambar yang dipindai dengan halaman kosong "master". Karena ImageMagick-fu saya sangat terbatas, saya tidak bisa memberikan Anda contoh perintah. Anda harus RTFM :

Tautan kedua bahkan memiliki bagian berjudul "Blank Fax" yang menjelaskan cara mendeteksi halaman faks kosong. Sayangnya bagian itu tampaknya belum selesai. Semoga informasi yang tersedia cukup bagi Anda untuk memulai.

lesmana
sumber
5

Gunakan fitur identifikasi ImageMagik CLI seperti yang diberikan di sini:

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

Dengan perintah:

$ identify -format "%#" source.png

Jika jumlah warna adalah 1, Anda memiliki halaman kosong.

Anda juga dapat menggunakan perintah:

identify -verbose source.png

Simpangan baku, kemiringan, dan kurtosis akan menjadi 0 untuk gambar kosong.

amarprabhu
sumber
1
%#mengembalikan nilai hash yang dihitung untuk gambar, itu harus %kimho.
Nicolai
1

Versi kode yang sedikit lebih baik dalam pertanyaan:

#!/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

Perubahan:

  • Lewati gambar untuk diperiksa sebagai argumen alih-alih membaca dari lokasi tetap
  • Laporan perkembangan
  • Jika kode tidak mendeteksi file dengan benar, Anda dapat memberikan petunjuk (buat file kosong dengan nama gambar plus titik di depan, yaitu untuk melindungi a.pnm, menggunakan touch .a.pnm)
  • Memperbaiki kesalahan saat tidak ada piksel hitam pada input
Aaron Digulla
sumber
1

Trik saya adalah memindai gambar ke format terkompresi tanpa kehilangan (tiff + kompresi). Dengan cara ini, halaman kosong memiliki ukuran file yang jauh lebih rendah dan saya dapat mendeteksinya find, memindahkannya ke direktori lain, memeriksanya dengan cepat dengan pemirsa dan kemudian menyingkirkannya.

makan
sumber
0

Anda dapat melakukan trim berisik dengan ImageMagick , misalnya:

convert image-0001.png -virtual-pixel White -blur 0x15 -fuzz 15% -trim info:

Halaman tidak kosong jika orang yang dikonversi mencetak sesuatu seperti ini:

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

(contoh input adalah gambar lineart pindai 600 dpi DIN A4)

Kosong jika tinggi / lebar setelah pemangkasan kecil, misalnya:

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

Berbeda dengan metode ambang batas histogram, ini menghasilkan lebih sedikit false-positif ketika Anda memiliki halaman yang hanya berisi kata atau satu baris teks. Dengan ambang-histogram, halaman tersebut dapat dideteksi secara salah sebagai kosong.

Melihat ukuran file gambar terkompresi, yaitu sebagai perkiraan entropi, menghasilkan positif palsu yang sama.

Di sisi lain, dokumen dengan perforasi tetapi jika tidak, kemungkinan tidak terdeteksi sebagai kosong hanya dengan trim berisik. Jika Anda peduli dengan itu, mungkin masuk akal untuk memberitahu ImageMagick untuk memangkas ruang margin tanpa syarat, terlebih dahulu. Misalnya, jika gambar dipindai dengan 600 dpi dan Anda ingin mengabaikan margin 1 inci di sekitar:

convert i1.png -shave 600x0 -virtual-pixel White -blur 0x15 -fuzz 15% -trim info:
maxschlepzig
sumber
0

%k harus digunakan untuk format, karena mengembalikan:

HITUNG: jumlah warna unik

Pemakaian:

identify -format "%k" image.tif

Sumber: https://imagemagick.org/script/escape.php

Nicolai
sumber