PDFbeads - генератор PDF из изображений, написанный на ruby, использующий сегментацию вида image=(mask&foreground&backround).
DjVuL - алгоритм «Multi-scale binarization», входит в состав imthreshold (Linux fork BookScanLib.ru).
PDFbeads представляет собой комбайн обработки изображений. Из-за этого использовать его совместно с другими утилитами совсем непросто. Сегментация в нём производится очень примитивно. Переделать его под использование сторонних сегментаторов пока не удалось. Поиск альтернативных генераторов PDF, использующих сегментацию изображения дал нулевой результат.
В данном топике будет показан метод, использующий генерацию PDF с помощью PDFbeads, но при этом сегментация производится по алгоритму DjVuL. Это позволяет получать гораздо более компактные PDF (даже без использования jbig2 и jpeg2000).
Предполагается наличие папки со сканами в формате PNG, из которых надо сгенерировать компактный PDF (в нашем случае папка «~/scans»).
1) Сегментация изображений:
$ cd ~/scans
$ for tpng in *.png; do imthreshold-tdjvul "$tpng" "${tpng%.png}.black.tiff" "${tpng%.png}.fg.ppm" "${tpng%.png}.bg.ppm"; done
2) Кодирование foreground&backround в jpeg:
$ for tppm in *.ppm; do cjpeg -outfile "${tppm%.ppm}.jpg" "$tppm"; done
$ rm -v *.ppm
3) Генерация PDF
$ pdfbeads -r 300 -m G4 -b JPEG -o book.pdf
PS:
1) Зачастую исходные сканы требуют предварительную обработку (шумоподавление). Для этого рекомендуется использовать утилиту imthreshold-fpmean. Есть также возможность очистки черно-белых масок (*.black.tiff), для этого используется утилита imthreshold-fdespeckle.
2) Кодирование в jpeg не производится непосредственно во время сегментации, так как предполагается возможность использования различных кодеров с различными параметрами (mozcjpeg, например, или jpge).