Phát hiện tệp hình ảnh trống


8

Tôi đang sử dụng scanimagevới máy quét tài liệu (Canon DR-2510C) hỗ trợ quét hai mặt. Thật không may, trình điều khiển SANE của nó không hỗ trợ phát hiện trang trống, do đó với các trang hỗn hợp (một mặt / hai mặt), các trang trống sẽ đưa nó vào kết quả quét.

Tôi muốn tự động loại bỏ các trang trống đó khi xử lý hậu kỳ đầu ra quét, vì vậy tôi đang tìm kiếm một công cụ dòng lệnh có thể phát hiện xem tệp TIFF hoặc PNM có chứa hầu hết các pixel trắng hay không).

Có ý kiến ​​gì không?


Đây là giải pháp tôi đã đưa ra dựa trên câu trả lời của 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

Câu hỏi liên quan trên DSP.SE: Phát hiện trang trống nhanh
maxschlepzig

Câu trả lời:


0

Bạn có thể sử dụng công cụ so sánh ImageMagick để so sánh các hình ảnh được quét với một trang trống "chính". Vì ImageMagick-fu của tôi khá hạn chế nên tôi không thể đưa cho bạn bất kỳ lệnh ví dụ nào. Bạn sẽ phải RTFM :

Liên kết thứ hai thậm chí có một phần có tiêu đề "Fax trống" giải thích cách phát hiện các trang fax trống. Đáng buồn là phần đó dường như chưa hoàn thành. Hy vọng thông tin có sẵn là đủ để bạn bắt đầu.


5

Sử dụng tính năng nhận dạng của ImageMagik CLI như được đưa ra ở đây:

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

Với lệnh:

$ identify -format "%#" source.png

Nếu số lượng màu là 1, bạn có một trang trống.

Bạn cũng có thể sử dụng lệnh:

identify -verbose source.png

Độ lệch chuẩn, độ lệch và độ nhiễu sẽ là 0 cho hình ảnh trống.


1
%#trả về giá trị băm tính toán cho hình ảnh, nó phải là %kimho.
Nicolai

1

Phiên bản cải tiến nhẹ của mã trong câu hỏi:

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

Thay đổi:

  • Truyền hình ảnh để kiểm tra làm đối số thay vì đọc từ một vị trí cố định
  • Báo cáo tiến trình
  • Nếu mã không phát hiện đúng một tệp, bạn có thể đưa ra gợi ý (tạo một tệp trống có tên của hình ảnh cộng với một dấu chấm ở phía trước, tức là để bảo vệ a.pnm, sử dụng touch .a.pnm)
  • Đã sửa lỗi khi không có pixel đen trong đầu vào

1

Thủ thuật của tôi là quét các hình ảnh sang định dạng nén không mất dữ liệu (tiff + nén). Bằng cách này, các trang trống có kích thước tệp thấp hơn nhiều và tôi có thể phát hiện ra chúng find, di chuyển chúng sang thư mục khác, kiểm tra chúng nhanh chóng với người xem và sau đó loại bỏ chúng.


0

Bạn có thể thực hiện cắt xén ồn ào với ImageMagick , ví dụ:

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

Trang không trống nếu chuyển đổi in một cái gì đó như thế này:

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

(ví dụ đầu vào là hình ảnh tuyến tính quét DIN A4 600 dpi)

Sẽ trống nếu chiều cao / chiều rộng sau khi cắt nhỏ đáng ngờ, ví dụ:

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

Ngược lại với phương pháp biểu đồ ngưỡng, điều này tạo ra ít lỗi sai hơn khi bạn có các trang chỉ chứa một từ hoặc một dòng văn bản. Với biểu đồ ngưỡng, các trang như vậy có thể bị phát hiện sai thành trống.

Nhìn vào kích thước tập tin của hình ảnh nén, tức là xấp xỉ entropy, mang lại kết quả dương tính giả.

Mặt khác, các tài liệu có đục lỗ nhưng nếu không, có thể không được phát hiện là trống chỉ với một phần trang trí ồn ào. Nếu bạn quan tâm đến những điều đó, trước tiên, có thể nói với ImageMagick là cắt bớt vô điều kiện một số không gian lề. Ví dụ: nếu hình ảnh được quét với 600 dpi và bạn muốn bỏ qua lề 1 inch xung quanh:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.