09.02.2010

Улучшение качества DJVU книг

Очень часто попадаются интересные книги в формате djvu. Но к сожалению качество некоторых книг не очень хорошее. К основным дефектам можно отнести:
  • серый фон на страницах;
  • некоторые страницы перевернуты на 90-180 град;
  • страницы идут попарно - разворотами, такие неудобно читать на небольшом экране нетбука.
Как исправить такую книгу расскажу под катом.


Перед началом работы убедитесь, что установлены пакеты:
libtiff-tools, djvulibre-bin и imagemagick.

Итак имеем файл книги inputfile.djvu. Примерно такого качества:

Преобразуем его сначала в многостраничный tiff:
Сжатие без компрессии (размер файла может достичь до нескольких Гб! в зависимости от количества страниц и качества книги)
ddjvu -v -format=tiff inputfile.djvu output.tiff
Сжатие с компрессией (размер файла до 500 Мб)
ddjvu -v -format=tiff -quality=80 inputfile.djvu output.tiff

Если книга небольшая, до 200 стр., то параметр качества -quality=80 можно не указывать, при этом tiff получиться без компрессии, а значит, с меньшей потерей качества при преобразовании. У меня с книгой более 500 стр не получилось разрезать с помощью tiffsplit созданный без компрессии 2 Гб-ый tiff.
Теперь преобразуем многостраничный тиф в множество одностраничных - каждую страницу в отдельный файл:
tiffsplit inputfile.tiff outputdir/
Еще одно преобразование, на этот раз из tiff в png. Для чего? Объясняю чуть ниже.
for f in *; do convert $f png/$f.png; done

Кстати, если нужно сделать djvu файл из отсканированного в FineReader документа, то возникает проблема - tif файлы проекта FineReader многофреймовые. Каждый файл состоит из двух фреймов. Первый фрейм - непосредственно страница, второй - мииатюра. Imagemagick и Scan Tailor не принимают таких файлов. Для того, что бы вытащить полезные страницы из множества многофреймовых tif файлов можно воспользоваться простым однострочным скриптом:

for NAME in *.tif; do convert "$NAME[0]" convert/"$NAME".tiff; echo "Обработан файл '$NAME'"; done

либо (для получения на выходе png файлов)
for NAME in *.tif; do convert "$NAME[0]" convert/"$NAME".png; echo "Обработан файл '$NAME'"; done



На следующем этапе нам понадобиться Scan Tailor - программа для подготовки электронных книг. В Ubuntu 9.10 и в более поздних релизах она есть в репозитории. Для пользователей других дистрибутивов: ищите в своих репозиториях, если нет, то Scan Tailor легко собирается из исходников, предварительно почитайте, что нужно установить по зависимостям. Есть версия для Windows.
sudo apt-get install scantailor

Запускаем Scan Tailor, добавляем все png/tiff файлы в проект и проходим по нужным пунктам оптимизации. Поскольку программа локализована, не вижу смысла подробно останавливаться на всех пунктах оптимизации. Scan Tailor позволяет: исправлять ориентацию страниц, разрезать развороты отсканированных страниц, корректировать угол наклона страниц, выделять полезную область страниц, при этом очищая поля, поменять разрешение документа, выбрать способ компресии для изображения: черно-белое, цветное-оттенки серого, смешанное. Наиболее важный и интересный пункт это "Разрезка страниц". Насколько я знаю, есть еще одна программа для обработки отсканированных изображений под nix системы, позволяющая разрезать развороты книг - unpaper. Однако добиться ее корректной работы у меня не получилось (страницы не резались, если кто то работает с unpaper оставьте в коментах рабочие опции при разрезании разворотов страниц). Наилучший, самый чистый результат получается при выборе в пункте "Вывод" режима "Черно-белый". Однако этот способ коррекции не подходит, если в книге есть фотографии, тут нужно подбирать режим: "Цветной-серый" либо "Смешанный".
После завершения работы результаты складываются в папку "out".
В консоли переходим в папку out и запускаем скрипт сборки djvu файла.
На выходе получаем такой результат (файл output.djvu):


Разница в качестве исходного и обработанного файла заметна невооруженным глазом.

7 комментариев:

  1. Анонимный09.02.2010, 18:40

    Реквестирую оригинал и результат обработки в натуральном разрешении. Что-то подозрительно много преобразований делается, есть подозрение, что качество таки пострадает.

    ОтветитьУдалить
  2. конечно ухудшиться, я преобразовал в дуплекс,
    но если нет оч мелкого шрифта и фото, то читается легче и вообще приятно смотриться

    ОтветитьУдалить
  3. Анонимный09.02.2010, 19:44

    спасибо за статью, кстати а нельзя ли сразу из djvu преобразовать в png? тем же imagemagick-ом?

    ОтветитьУдалить
  4. >unpaper … страницы не резались…
    unpaper -op 2 ...

    ОтветитьУдалить
  5. Анонимный09.02.2010, 20:02

    Насколько Я помню, djvu не растровый формат, а комбинированный. Преобразования в tiff теряют не растровую информацию, что, естественно, отражается на качестве

    ОтветитьУдалить
  6. Спасибо за наводку! По роду деятельности время от времени приходится сканировать книги, и scantailor -- гораздо быстрее и удобнее, чем пакетная обработка imagemagick'ом.

    ОтветитьУдалить
  7. Анонимный10.02.2010, 08:01

    думаю, что качество нигде не потеряется. и тифф и пнг - это форматы без потери.

    ОтветитьУдалить