Вернуться к разделу "Материалы по сканированию и оцифровке бумажных книг".


Использование DjVu Imager


ВНИМАНИЕ:

Это - старая версия статьи. Новая версия находится здесь.


1. Введение

Программа DjVu Imager v2.9 (1,17 МБ) предназначена для кодирования в DjVu сканов книг, содержащих иллюстрации (полутоновые и/или многоцветные - см. термины в Приложении ниже). Программа имеет cвободно-бесплатную лицензию "GPL 2 и выше" и полностью открытые исходные коды (73 КБ).

DjVu Imager представляет из себя дальнейшее развитие идей, заложенных в программу DjVu Sep (которую уже следует считать устаревшей и не рекомендуемой к использованию).

DjVu Imager использует комбинацию методов подклейки фона и раскраски маски. Я предлагаю назвать её условно "технология вклейки иллюстраций". Возможный английский вариант: "Pic-paste technology".

Смысл этих методов заключается в 2-х-ступенчатом кодировании в DjVu сканов книг, содержащих иллюстрации:

1. Сначала отделяем вручную иллюстрации от сканов (например, при помощи связки Scan Tailor 0.9.9.1 + ST Split v1.3 или ScanKromsator 5.92 - используя механизм Picture-зон) и кодируем сканы-без-иллюстраций в DjVu (например, при помощи DjVu Small v0.4 и выше). Получаем т.н. "DjVu-заготовку" - т.е. DjVu-книгу, лишённую иллюстраций (как правило, DjVu-заготовка получается чисто чёрно-белой - хотя она может иметь и цветной текст).

2. Затем отдельно кодируем иллюстрации в формат DjVu и вставляем их в соответствующие "пустые" места DjVu-заготовки (всё это делается посредством DjVu Imager).

Таким образом, рекомендуемая общая схема обработки сканов с иллюстрациями выглядит так:

Для Scan Tailor (рекомендуемый вариант):


Scan Tailor v0.9.9.1 (и выше) -> ST Split v1.3 -> DjVu Small v0.4 (и выше) -> DjVu Imager v2.9

Для ScanKromsator:


ScanKromsator v5.92 -> DjVu Small v0.4 (и выше) -> DjVu Imager v2.9


ВАЖНО: Наиболее рекомендуемой является схема работы через Scan Tailor v0.9.9.1 или выше (кратко именуемый "СТ" или "ST") - поскольку он, в отличие от ScanKromsator v5.92 (кратко именуемый "СК" или "SK"), имеет механизм авто-определения зон иллюстраций - что радикально упрощает технологию вклейки иллюстраций. В ScanKromsator v5.92 зоны иллюстраций - чисто ручные.

Можно сказать, что DjVu Imager не может работать "сам по себе" - а только в связке с двумя другими программами: СТ или СК (или с любым другим графическим редактором) и DjVu Small v0.4 и выше (или с любым другим DjVu-кодировщиком).

Смысл используемого подхода состоит в том, чтобы подменить (при кодировании в DjVu) автоматическую сегментацию иллюстраций (с использованием documenttodjvu - обычный вариант) ручной (с использованием СК или СТ). Это даёт полный контроль над сегментацией, обеспечивающий следующие преимущества:

1. Исключение ошибок кодирования (визуальных артефактов).

2. Возможность подобрать вручную для каждой иллюстрации оптимальное соотношение сжатия "размер-качество".

3. Оптимальное сжатие (в DjVu) различных по своей сути объектов - текста и полутоновых рисунков.

DjVu Imager следует применять для сканов, например, всевозможных каталогов (см. рис. 1), или же учебников по использованию компьютера с изображениями диалоговых окон (см. рис. 2) и т.п. - то есть для всех книг с иллюстрациями (полутоновыми и многоцветными).

sep01.jpg (31595 bytes)

Рис. 1. Каталог продукции с фотографиями.

sep02.jpg (18426 bytes)

Рис. 2. Компьютерный учебник с изображениями диалоговых окон.


2. Описание обработки

Рассмотрим весь процесс кодирования в DjVu сканов с иллюстрациями подробнее (на примере случая серых сканов (Greyscale) - как наиболее типичный). Рассмотрим 2 варианта - с использованием СТ и с использованием СК (выбирайте любой по желанию, но вариант с СТ проще и удобнее).


2.1.a. Вариант 1: обработка в Scan Tailor v0.9.9.1 (рекомендуемая)

1. Загружаем в Scan Tailor v0.9.9.1 сырые сканы книги (в режиме Greyscale или Color - т.е. не в чёрно-белом). Обрабатываем их как обычно до стадии "Вывод". Для тех, кто сталкивается со Scan Tailor впервые: читайте инструкцию к нему.

2. На стадии "Вывод" сканы, содержащие полутоновые иллюстрации, обрабатываем особым образом. Для этого (на стадии "Вывод") делаем следующее:

а. При выбранном в списке миниатюр скане с полутоновой иллюстрацией в группе элементов управления "Режим" переключаемся в режим "Смешанный" (для обычных сканов - т.е. без полутоновых иллюстраций - используем режим "Черно-белый"):

Рис.3. Выбор "смешанного" вывода для текущего скана в Scan Tailor.

В результате этого произойдёт переобработка текущего скана - в режим "Смешанный". А именно, программа сама, полностью автоматически, распознает зоны полутоновых (цветных) иллюстраций на текущем скане (автор этого алгоритма - U235, используется детектирование растрового зерна иллюстраций за счёт морфологических операций).

ВАЖНО: Обратите внимание - параметр "Режим" ("Чёрно-белый" - "Цветной / Серый" - "Смешанный") - это странично-зависимый параметр! То есть, каждый скан из загруженных может иметь свой режим (любой на выбор из этих 3-х). Это распространённая ошибка - пользователи зачастую не понимают этот момент, им кажется, что если самый первый скан в списке имеет режим (к примеру) "Чёрно-белый" - то, значит (якобы) и все остальные сканы имеют этот же режим. В общем случае это не так.

б. Переключитесь на вкладку "Зоны картинок". Автоматически распознанные зоны полутоновых иллюстраций выделятся пульсирующим синим цветом:


Рис. 4. Исходный скан с полутоновой
картинкой (взято с сайта U235).
Картинка выделяется (в Scan Tailor v0.9.9.1)
пульсирующим синим цветом.

в. В случае, если зоны иллюстраций распознались неправильно (неточно), их следует подправить вручную (путём расстановки корректирующих ручных зон в виде произвольных многоугольников - по правой кнопке мыши). Подробнее о корректирующих ручных зонах смотрите тут.

3. На этом работа в СТ окончена. Закройте программу (сохранив проект на всякий случай). Готовые (обработанные) сканы окажутся в выходной папке СТ-проекта (с именем "out" по умолчанию).

 

 

 

 

 

 

 

 

 

 

4. Далее используем программу ST Split v1.3 (642 КБ) - для разделения сканов, полученных в СТ в режиме "Смешанный", на пары субсканов - передний и задний (что необходимо для дальнейшей работы).

ВАЖНО: Обратите внимание, что версия программы ST Split должна быть не ниже 1.3, а версия программы Scan Tailor должна быть не ниже 0.9.9.1 - иначе ничего не будет работать.

Рис. 5. Окно программы ST Split.

а. Открываем ST Split v1.3 и нажимаем кнопку Source в правом верхнем углу программы. В открывшемся окне выбираем папку со сканами (по умолчанию она имеет имя "out"), выведеными из СТ (в этой папке часть сканов была сделана в СТ в режиме "Смешанный"). При этом автоматически сформируется и заполнится поле слева от кнопки Dest (к исходному пути добавится подпапка "splitted", что означает "разделённые" по-английски (аналогично (уже) русскому слову "сплит", означающее бытовой кондиционер, поделённый на 2 блока).

Если Вам не нравится путь вывода по умолчанию - Вы можете его изменить по кнопке Dest.

б. Нажмите на кнопку Convert и подождите. Программа полностью автоматически создаст из каждого "смешанного" СТ-скана соответствующую ему пару субсканов: субскан переднего плана (foreground subscan) и субскан заднего фона (background subscan). (см. рис. 6 и 7).

- Субскан переднего плана (в чёрно-белом формате) - это исходный скан за вычетом полутоновой картинки.

- Субскан заднего фона (в сером или цветном формате) - это исходный скан за вычетом всего, что не относится к полутоновой картинке (если на исходном скане 2 или более Picture-зоны, то все они адекватно переносятся на субскан заднего фона).

Таким образом, субсканы получаются такими, чтобы при прозрачном наложении второго на первый получился исходный скан.

При этом не-"смешанные" СТ-сканы останутся как были (программа их просто игнорирует). ST Split создаст в выводной папке (на рисунке это C:\scans\out\splitted) две папки с именами "1" и "2"- соответственно для передних и задних субсканов - и автоматически поместит туда эти субсканы.

Рис. 6. Субскан переднего плана (foreground subscan) - чёрно-белый.

Рис. 7. Субскан заднего фона (background subscan) - серый.

Скачать эту пару субсканов (2,10 МБ) (исходный сырой скан взят с сайта U235)

Вот и всё. Программа ST Split в сущности крайне проста - вся работа в ней сводится буквально к нажатию 2-х кнопок (Source и Convert). ST Split работает сразу с папками - возможность открыть отдельные файлы не предусмотрена (для простоты).

Дополнительно можно ещё генерировать передние субсканы в режиме серого (цветного) - через флажок "Create Grey/Color 1-st subscans". Эта возможность предназначена для продвинутых пользователей (она позволяет потом сделать выравнивание освещённости (и бинаризацию) передних субсканов в Book Restorer), подробнее об этой опции читайте во встроенной в программу русскоязычной инструкции (вызываемой нажатием на кнопку Help).

Программа ST Split обсуждается на форуме здесь. Там можно задать любой вопрос по использованию программы и решить любое затруднение.

Примечания:

1. Вообще я считаю целесообразным встроить весь функционал ST Split напрямую в СТ - но автор СТ (Tulon) наотрез отказывается это сделать (несмотря на мои огромные усилия убедить его в необходимости этого шага). Возможным решением я вижу вариант, когда кто-нибудь (не я; поскольку у меня нет времени на это) создаст самодельный "клон" СТ с требуемым функционалом (а также возьмётся в дальнейшем сопровождать этот "клон" - т.е. регулярно вносить в него обновления из основной версии СТ).

2. Принцип работы ST Split состоит в следующем: Scan Tailor в режиме "Смешанный" производит такие сканы в режиме серого (Greyscale), где изображение текста приводится к 2-цветному (номера цветов - чёрный (0) и белый (255), а полутоновое изображение на том же скане насильно приводится в диапазон цветов 1-254. Благодаря этому ST Split однозначно разделяет исходный "смешанный" скан на соответствующую пару субсканов.

3. В будущем я планирую сделать русскоязычный интерфейс к ST Split.


2.1.b. Вариант 2: обработка в ScanKromsator v5.92


Рис. 8. Исходный скан с полутоновой
картинкой (взято с сайта U235).
Картинка заключена в Picture-зону
(в СканКромсаторе v5.92) - прямоугольник
из редкого красного пунктира.

1. Загружаем в ScanKromsator v5.92 сканы книги (в режиме Greyscale), содержащие полутоновые иллюстрации (как обычно).

2. Составляем задание для кромсания: расставляем опции, резаки и т.п. (как обычно).

3. В процессе составления задания заключаем попадающиеся на сканах полутоновые иллюстрации в Picture-зоны (выделяем на глаз мышкой и по правой кнопке назначаем тип зоны как Picture-зона) (см. рис. 8).

4. Пройдя по всем сканам и составив задание, нажимаем на кнопку Process!.

5. Переходим в главное окно и в меню Zones -> Picture zone -> Merge zones... ставим флажок Create separate files for non-b/w zones и жмём ОК.

6. ScanKromsator v5.92 обработает каждый скан, где присутствует хоть одна Picture-зона, особым образом:

- Каждый такой скан будет "разбит" на 2 т.н. "субскана" - субскан переднего плана (foreground subscan) и субскан заднего фона (background subscan). (см. рис. 9 и 10).

- Субскан переднего плана (в чёрно-белом формате) - это исходный скан за вычетом полутоновой картинки.

- Субскан заднего фона (в сером или цветном формате) - это исходный скан за вычетом всего, что не относится к полутоновой картинке (если на исходном скане 2 или более Picture-зоны, то все они адекватно переносятся на субскан заднего фона).

Рис. 9. Субскан переднего плана (foreground subscan) - чёрно-белый.

Рис. 10. Субскан заднего фона (background subscan) - серый.

Скачать пример для DjVu Imager с этими файлами (664 КБ) (взято с сайта U235) (Содержит 1 небольшую DjVu-заготовку и 1 TIF-иллюстрацию для неё).

Таким образом, субсканы получаются такими, чтобы при прозрачном наложении второго на первый получился исходный скан.

7. На выходе из ScanKromsator v5.92 мы получаем папку out, в которой находится смесь простых сканов, пар субсканов, и т.п.

ИТОГ: Таким образом, ScanKromsator v5.92 разбивает каждый исходный скан с иллюстрацией (где есть Picture-зоны) на соответствующую ему пару субсканов.

Примечание: Для создания пар субсканов вовсе не обязательно использовать именно ScanKromsator v5.92 - можно применить любой иной графический редактор. Причём в DjVu Imager предусмотрен настраиваемый фильтр имён задних субсканов - что позволяет настроить его на работу со сторонним графическим редактором.


2.2. Обработка в DjVu Small v0.4 и выше

DjVu Small v0.4 и выше в данном контексте применяется для того, чтобы создать DjVu-заготовку - т.е. DjVu-книгу без иллюстраций (тех самых, которые мы обрабатывали в предыдущем пункте). DjVu-заготовка - это всегда чёрно-белый DjVu-файл (может быть ещё и с цветным текстом) - с белыми "бельмами" (пустыми местами) на месте будущих иллюстраций (которые мы вклеим потом через DjVu Imager).

2.2.а. Вариант 1. Обработка после Scan Tailor

Это наиболее простой вариант. При нём кодирование (т.е. создание) DjVu-заготовки ничем не отличается от обычного использования DjVu Small при кодировании чёрно-белых сканов. Для получения DjVu-заготовки нужно просто закодировать в DjVu содержимое папки "1" после ST Split (рекомендуемый профиль кодирования - "user B/W (300 dpi)"). И всё. DjVu-заготовка готова! На этом участие DjVu Small завершено.

2.2.а. Вариант 2. Обработка после ScanKromsator

В этом варианте всё выглядит немного посложнее.

Для этого варианта в DjVu Small, начиная с версии 0.3.2, добавлена новая опция - "DjVu Imager". Эта опция включена по умолчанию.

При использовании этой опции подразумевается, что субсканы имеют имена в базовой нотации СканКромсатора 5.92, а именно:

- Субсканы переднего плана: 0001.tif, 0002.tif, ..., 0100.tif, ...
- Субсканы заднего фона 0001.sep.tif, 0002.sep.tif, ..., 0100.sep.tif, ...

Однако, в DjVu Small, начиная с версии v0.4.1 совместимость с DjVu Imager расширена ещё больше: DjVu Small v0.4 и выше включает в себя настраиваемый фильтр имён DjVu Imager-файлов, отсеиваемых при открытии - чтобы не ограничиваться одной-единственной ScanKromsator-схемой именования файлов. Теперь Вы можете сделать, например, так:

- Субсканы переднего плана: 0001.tif, 0002.tif, ..., 0100.tif, ...
- Субсканы заднего фона 0001.back.tif, 0002.back.tif, ..., 0100.back.tif, ...

или так:

- Субсканы переднего плана: 0001.tif, 0002.tif, ..., 0100.tif, ...
- Субсканы заднего фона back0001.tif, back0002.tif, ..., back0100.tif, ...

или так:

- Субсканы переднего плана: 0001.fore.tif, 0002.fore.tif, ..., 0100.fore.tif, ...
- Субсканы заднего фона back0001.tif, back0002.tif, ..., back0100.tif, ...

Допускаются любые буквенные (точнее, нецИфровые) приставки-суффиксы к цИфровым именам файлов.

Последовательность работы с программой выглядит как обычно:

1. Загружаем папку out, полученную в ScanKromsator v5.92 в предыдущем пункте - прямо "как есть", т.е. без какой-либо рассортировки её содержимого по сортам сканов (обычные, картинки, и т.п.). Благодаря опции "DjVu Imager", DjVu Small v0.4 и выше автоматически отсеет на входе всё "лишнее" для него содержимое папки out (задние субсканы и вырезанные из них иллюстрации) и загрузит в программу только обычные сканы и передние субсканы с вырезанными из них иллюстрациями (из папки out). Можно просто "перетащить" и "бросить" (через Drag-n-Drop) папку out в окошко "Введите файл(ы):".

2. Выбираем профиль кодирования (обычно это user B/W (600 dpi)) и нажимаем кнопку "Пуск".

3. Через некоторое время получаем (по умолчанию на Рабочем столе) файл "DjVu Encoded.djvu". Это - DjVu-заготовка - т.е. DjVu-книга без иллюстраций.

Примечание: При обычной работе (без иллюстраций) DjVu Small v0.4 и выше используется точно также. Опцию "DjVu Imager" отключать не обязательно.

Программа DjVu Small обсуждается на форуме здесь. Там можно задать любой вопрос по использованию программы и решить любое затруднение.


2.3. Обработка в DjVu Imager

DjVu Imager создаёт из задних субсканов (полученных в СТ или СК в п. 2.1) DjVu-картинки (см. термины в Приложении ниже) при помощи консольной утилиты fi_c44.

Затем DjVu Imager извлекает из них чанки BG44 и вставляет их в соответствующие страницы DjVu-заготовки - методом подклейки фона. При этом DjVu Imager создаёт и вставляет на эти же страницы чанк-раскраску маски FGbz  - методом раскраски маски (чтобы обеспечить валидность изменяемого DjVu-файла - страницы DjVu-книги).

При этом, если данная страница DjVu-заготовки уже имеет чанк переднего плана FG44 или чанк-раскраску FGbz (как правило, так бывает, если имеется цветной текст)- то чанк FGbz не создаётся и не вставляется (за ненадобностью).

Если же данная страница DjVu-заготовки уже имеет чанк заднего плана BG44 (паразитный фон; так быть категорически не должно) - то он отбрасывается и заменяется на новый BG44-чанк, содержащий вставляемую иллюстрацию. (Остальные (необрабатываемые) страницы DjVu-заготовки могут иметь задний фон).

Последовательность работы с программой выглядит так (пункт 1 разнится в зависимости от того, что мы использовали на предыдущих шагах - СТ или СК):

Вариант п.1 (при использовании Scan Tailor):

1. Загружаем папку "2", полученную в ST Split (т.е. субсканы заднего фона - которые содержат полутоновые иллюстрации).

Вариант п.1 (при использовании ScanKromsator):

1. Загружаем папку out, полученную в ScanKromsator v5.92 в п. 2.1 - прямо "как есть", т.е. без какой-либо рассортировки её содержимого по сортам сканов (обычные, картинки, и т.п.). Можно просто "перетащить" и "бросить" (через Drag-n-Drop) папку out в окошко "Введите файл(ы):".

DjVu Imager автоматически отсеет на входе всё "лишнее" для него содержимое папки out (обычные сканы, передние субсканы и вырезанные из них иллюстрации) и загрузит в программу только задние субсканы (из папки out).

При этом по умолчанию подразумевается, что субсканы имеют имена в базовой нотации СканКромсатора 5.91, а именно:

- Субсканы переднего плана: 0001.tif, 0002.tif, ..., 0100.tif, ...
- Субсканы заднего фона 0001.sep.tif, 0002.sep.tif, ..., 0100.sep.tif, ...

Если Ваши задние субсканы имеют какие-то специфические префиксы или суффиксы - то Вам необходимо сначала ЯВНО их (префиксы-суффиксы) задать в разделе "Опции" (флажок Произвольные файлы) - и только после этого загружать задние субсканы в программу - в противном случае программа просто не поймёт, где какие субсканы и куда их вставлять. Можете сделать, скажем так:

- Субсканы переднего плана: 0001.tif, 0002.tif, ..., 0100.tif, ...
- Субсканы заднего фона 0001.back.tif, 0002.back.tif, ..., 0100.back.tif, ...

или применить любые иные варианты именования файлов - точно также, как и в пункте 2.2.

Далее различие между вариантами для Scan Tailor и ScanKromsator исчезает.

2. В столбце автоматически сформируются номера загруженных файлов (исходя из цифр, содержащихся в их именах). Каждый такой номер обозначает номер той DjVu-страницы, куда будет вклеен данный загруженный графический файл (в качестве иллюстрации). При необходимости можно изменить вручную любой такой номер (по двойному щелчку мыши на нём, т.е. на ячейке столбца, содержащей номер):

sep06.GIF (3191 bytes)

Рис.11.
Дважды щёлкните мышью по номеру файла (обведённому красным кружком) и введите свой номер страницы (если хотите исправить автоматически определённый номер). Этим Вы измените номер той страницы в многостраничной DjVu-заготовке, куда будет вклеена данная иллюстрация.

ВАЖНО: Наиболее рекомендовано ВСЕГДА загружать в DjVu Imager сканы (т.е. задние субсканы - будущие иллюстрации) в таком формате имён:

0001.tif, 0002.tif, 0003.tif, ..., 0010.tif, ..., 0100.tif, ... (формат файлов неважен, допускается, к примеру, BMP и т.п., а также номера не обязаны ни начинаться с единицы, ни идти подряд).

То есть с такими именами, которые легко и однозначно могут быть преобразованы в натуральные числа.

Пример: 0002.bmp, 0018.bmp, 0100.bmp - эти задние субсканы вставятся как иллюстрации соответственно на страницы номер 2, 18 и 100 многостраничной DjVu-заготовки.

Этим Вы всегда гарантированно избежите возможных проблем (с неправильной вставкой иллюстраций).

Неправильный пример: 001_scan_23.tif - по такому имени файла DjVu Imager'у будет трудно определить номер той страницы многостраничной DjVu-заготовки, куда следует подклеить данный задний субскан в качестве иллюстрации.

Прошу обратить на это особое внимание.

Я называю формат имён 0001.tif, 0002.tif, 0003.tif, ..., 0010.tif, ..., 0100.tif, ... условно как "нотация Файнридера" (потому что по такой схеме именуются сканы в ABBYY FineReader). При использовании ST Split такие имена формируются автоматически (т.е. ST Split всегда переименовывает входящие сканы у себя на выходе в нотацию Файнридера). Нотация Файнридера гарантирует на 100% правильность автоматического определения номеров файлов (что избавляет пользователя от необходимости править вручную неправильно определённые номера файлов).

3. Выставляем параметры кодирования. Их 2: ДЗФ (делитель (разрешения) заднего фона) и Качество задн. фона (качество заднего фона). Рекомендуемое значение для ДЗФ - от 2 до 4.

4. Для каждого субскана заднего фона в списке можно задать индивидуальные значения параметров кодирования (ДЗФ и Качество задн. фона). Для этого кликните мышкой на нужный элемент списка загруженных файлов, выберите селектор Текущий файл и установите желаемые значения ДЗФ и Качество задн. фона. При этом текущий файл выделится жирным шрифтом в списке. Для сброса индивидуальных значений параметров кодирования (данного файла - т.е. того, который выделен в списке) выберите селектор Все файлы. Для сброса индивидуальных значений (параметров кодирования) всех файлов предусмотрена кнопка С - при её нажатии всем "индивидуальным" файлам выставятся текущие настройки "общих" файлов (т.е. "индивидуальные" файлы полностью уравняются с "общими" - тем самым перестав быть "индивидуальными").

5. Нажмите кнопку Пуск и подождите. DjVu Imager создаст для каждого заднего субскана 1-слойный DjVu-файл в режиме "DjVuPhoto" - только задний фон без маски и без переднего плана (я называю их условно "DjVu-картинка"). В результате получится множество одностраничных DjVu-картинок. Сразу после окончания кодирования программа автоматически сгенерирует временный многостраничный DjVu-файл, в который будет "склеено" всё полученное множество одностраничных DjVu-картинок, и откроет его на просмотр в установленом в системе DjVu-просмотрщике. Этот временный файл нужен лишь для удобства просмотра полученного результата - чтобы сразу "оптом" просмотреть результат.

6. Для визуального подбора индивидуальных значений параметров кодирования (для отдельных элементов списка) предусмотрена кнопка Текущий - она кодирует текущий элемент списка файлов с его текущими параметрами (т.е. фактически независимо от того, "индивидуальный" это файл или "групповой") и тут же открывает его на просмотр в установленом в системе DjVu-просмотрщике.

7. Варьируя и комбинируя по-разному параметры кодирования (ДЗФ и Качество задн. фона) то ли для всех сразу, то ли для каждого отдельного заднего субскана, и просматривая получающийся результат в установленом в системе DjVu-просмотрщике, добейтесь оптимального соотношения "размер/качество" получаемого множества одностраничных DjVu-картинок.

Для облегчения этой задачи между кнопками Просмотр и Текущий выводится суммарный файло-размер всех наличествующих в данный момент DjVu-картинок - и этот показатель авто-изменяется после каждого кодирования (по кнопкам Пуск и Текущий).

8. Нажмите кнопку Источн. и выберите в появившемся окне DjVu-заготовку, полученную в предыдущем пункте (по умолчанию - файл "DjVu Encoded.djvu" на Рабочем столе). Нажмите на кнопку Вставить в DjVu. Программа соберёт копию DjVu-заготовки (по пути, указанному в поле слева от  кнопки Назнач. - по умолчанию это Рабочий Стол - и с суффиксом "out" по умолчанию) и автоматически вклеит одностраничные DjVu-картинки из полученного множества (из п. 2.3.6) в соответствующие места копии DjVu-заготовки (ориентируясь по именам DjVu-картинок).

В результате мы получим полностью готовую к употреблению DjVu-книгу с иллюстрациями.

Программа DjVu Imager обсуждается на форуме здесь. Там можно задать любой вопрос по использованию программы и решить любое затруднение.

Технические подробности (для продвинутых пользователей):

1. Краткое описание принципа работы DjVu Imager.

Для понимания сущности работы DjVu Imager нужно иметь общее представление о структуре формата DjVu. DjVu-файлы могут быть как одностраничными, так и многостраничными. Многостраничный DjVu-файл - это просто последовательность одностраничных DjVu-файлов в "одном флаконе". Я их называю условно "DjVu-страницы" или "страницы DjVu-файла".

Каждая страница в многостраничном DjVu-файле может быть в следующем варианте:

1. Только слой маски (чёрно-белый). Как правило, это текст (но ещё в маске бывают штриховые картинки).
2. Только задний фон (серый или цветной). Это полутоновая (цветная) иллюстрация или просто цветной фон.
3. Сразу все 3 слоя: расцветка маски (хотя бы просто сплошно-чёрная), маска, и задний фон.
4. Нет ни одного стандартного DjVu-слоя - а только как бы пустая ссылка (точнее, один лишь чанк INFO). Это выглядит как чисто белая страница в WinDjView.

Одностраничный DjVu-файл может быть только в вариантах с 1 по 3-ий.

DjVu Imager берёт вариант №1 ("Только слой маски") и превращает его в вариант №3 ("Сразу все 3 слоя") - попутно делая сплошно-чёрную расцветку маски (без этого нельзя по стандарту DjVu). Делается всё это, естественно, только на тех страницах в многостраничном DjVu-файле, куда нужно вклеить иллюстрации - остальные не трогаются (чаще всего они идут в варианте без иллюстраций, т.е. "Только слой маски" - но это не обязательно, они могут быть хоть со всеми 3 слоями). Также ещё бывает, когда DjVu Imager выполняет вариант №2 ("Только задний фон") - над страницей в варианте №4 ("Нет ни одного стандартного DjVu-слоя") - но это довольно редкий случай.

Если же DjVu Imager'у нужно вклеить иллюстрацию на уже 3-слойную DjVu-страницу - то тогда DjVu Imager'у приходится насильно отбрасывать имеющийся задний фон и вставлять свой новый (в качестве иллюстрации). В принципе, можно как-то усовершенствовать DjVu Imager - чтобы он каким-либо способом комбинировал старый задний фон с новым (чтобы старый задний фон не пропадал) - но едва ли это кому-нибудь нужно.

2. О формуле соответствия размеров субсканов.

В соответствии со спецификацией формата DjVu (DjVu, 456 КБ), DjVu Imager налагает определённые требования к пиксельным размерам передних и задних субсканов. Они должны быть либо равны (самый частный и наиболее простой случай, достигаемый автоматически при использовании ST Split), либо задний субскан может быть меньше переднего в 2..12 раз. В этом случае пиксельные размеры заднего субскана вычисляются по формуле из http://djvu.cvs.sourceforge.net/viewvc/djvu/djvulibre-3.5/tools/csepdjvu.cpp?revision=1.29&view=markup строка 1080 и 1081:

// Check background reduction
for (bgred=1; bgred<=12; bgred++)
{
     int subw = (w + bgred - 1) / bgred;
     int subh = (h + bgred - 1) / bgred;
     if (subh == (int)pix->rows() && subw == (int)pix->columns())
     // Found reduction factor
     return pix;
}
// Failure
     G_THROW("Background pixmap size does not match foreground");
     return 0;
}

где subw и subh - ширина и длина заднего субскана, w и h - ширина и длина переднего субскана, bgred - фактор уменьшения (от 1 до 12).

Т.е. взяв длину в пикселях переднего субскана и зная фактор уменьшения (от 2 до 12), мы можем по этой формуле вычислить длину в пикселях уменьшенного в фактор раз заднего субскана (то же самое касается ширины). DjVu Imager допускает ввод задних субсканов, заведомо уменьшенных по указанной формуле (а не только задних субсканов, равных по размеру передним субсканам). Параметр ДЗФ в этом случае не следует использовать - поскольку задние субсканы уже изначально уменьшены пользователем (а обычно это делается через ДЗФ - т.е. когда субсканы одинакового размера).

В любом случае, если размеры текущего заднего субскана не соответствуют размерам соответствующего ему переднего субскана (по указанной формуле), то DjVu Imager выдаёт следующее сообщение об ошибке:

Размеры иллюстрации такой-то не коррелируют с размерами соответствующей обклеиваемой DjVu-страницы. Вставка прервана.

Такая ошибка никогда не возникнет, если Вы использовали ST Split. Если такая ошибка возникла - то Вам нужно вручную сравнить размеры переднего и заднего текущих субсканов - с целью удостовериться, соответствует ли соотношение между ними (размерами) указанной формуле. Наверняка окажется, что какой-нибудь размер заднего субскана (длина или ширина) неправилен на один-два пикселя.


3. Заключение

Использование DjVu Imager сильно напоминает использование DjVu Sep и метод разделённых сканов (МРС). Например,  и в том, и другом случае создаются 2-х-слойные DjVu-файлы.

Однако, на мой взгляд, DjVu Imager и использумый им подход более перспективен, чем DjVu Sep и даже чем МРС.

Комбинация методов подклейки фона и раскраски маски (используемая в DjVu Imager) - это гораздо более гибкий в работе инструмент, нежели чем МРС. Рассмотрим детали подробнее:

Преимущества DjVu Imager:

1. Использование полнофункцинальной консольной утилиты fi_c44 для создания DjVu-картинок (в DjVu Sep для этого используется csepdjvu, у которого данная функциональность немного обрезана по богатству опций (то же самое - в msepdjvu). (Все опции fi_c44 пока не реализованы в текущей версии DjVu Imager).

2. Распространение действия словаря разделённых символов на передние субсканы (этого нет в DjVu Sep, но есть в msepdjvu).

3. ВАЖНО: Полная ликвидация необходимости использования коммерческой консольной утилиты msepdjvu (её функциональность полностью и эквивалентно подменяется функциональностью documenttodjvu).

4. Большая скорость работы DjVu Imager по сравнению с DjVu Sep (за счёт применения консольной утилиты fi_c44 и отсутствия кодирования в DjVu переднего субскана).

5. Возможность иллюстрирования чужого готового DjVu-файла без его (частичного) декодирования (и небольшого ухудшения) (DjVu Sep так не может).

Недостатки DjVu Imager:

1. Проверка на соответствие между DjVu-заготовкой и вставляемыми в неё DjVu-картинками выдаёт не слишком подробное сообщение об ошибке (это можно реализовать в будущих версиях).

2. Проблема паразитного фона:

Те страницы DjVu-заготовки, куда подклеиваются иллюстрации, не должны иметь задний фон (разве что пустой белый). Это принципиальный недостаток DjVu Imager, обусловленный закрытостью исходного кода documenttodjvu.

Для обеспечения этого условия (отсутствие заднего фона) важно правильно производить разбиение Picture-зон на этапе обработки в СТ или в СК (в п.2.1) - следя за тем, чтобы на передний субскан не попало ничего такого, что классификатор documenttodjvu мог бы впоследствии автоматически и самостоятельно отправить в задний фон. Как правило, это могут быть всякого рода не-текстовые объекты с большим количеством цветов. Их нужно вручную выделять в зоны иллюстраций - не оставляя их на самом скане.

Или же взамен можно включить (в п. 2.2) опции подавления заднего фона в documenttodjvu:

--threshold-level=<0-100>

Опция threshold-level взаимодействует с опциями pix-filter-level и shape-filter-level с целью определить, какие объекты изображения принадлежат переднему плану, а какие - заднему фону. Величина 0 указывает, что все объекты должны быть помещены на передний план; а величина 100 указывает, что все объекты должны быть помещены в задний фон. Значение по умолчанию - 75, что подходит для большинства документов.

--pix-filter-level=<0-100>

Опция pix-filter-level определяет баланс между пикселями переднего плана и заднего фона. Величина 0 указывает, что максимальное число пикселей должно попасть на передний план, а величина 100 указывает, что максимальное число пикселей должно попасть в задний фон. Величина 50 является оптимальной для большинства 300 dpi документов. Значение по умолчанию - 25.

Увеличьте pix-filter-level, чтобы убрать очень маленькие объекты из переднего плана, смягчить края и убрать растрирование. Уменьшите, чтобы избежать выпадения пикселей букв. Это наиболее эффективная опция для управления сделкой между передним планом/задним фоном; всегда старайтесь регулировать её в первую очередь.

Для большей информации о переднем плане и заднем фоне см. "Процесс сегментации".

--shape-filter-level=<0-100>

Опция shape-filter-level определяет баланс помещения спорных объектов на передний план или в задний фон. Спорный объект имеет характеристики, подходящие как для переднего плана, так и для заднего фона. Во время сегментации этот объект может оказаться в ненадлежащем слое, потому что documenttodjvu должен "угадать", куда его поместить. Объекты на переднем плане имеют более низкое цветовое разрешение, так что сомнительные объекты, помещённые в этот слой, могут выглядеть ненатурально. (Брови, например, могут выглядеть так, как если бы кто-то нарисовал их от руки). Объекты в заднем фоне имеют более низкое разрешение в целом, так что края сомнительных объектов, помещённых в этот слой, могут выглять размазанными.

Назначьте shape-filter-level целое число между 0 и 100. Величина 0 указывает, что каждый сомнительный объект должен быть помещён на передний план. Величина 100 указывает, что каждый сомнительный объект должен быть помещён в задний фон.

Определение того, какие объекты лучше выглядят на переднем плане / в заднем фоне, требует экспериментов. Если Вы не удовлетворены видом закодированного изображения, закодируйте его снова с другим значением shape-filter-level, чтобы найти подходящий баланс между объектами переднего плана / заднего фона.

ПРИМЕЧАНИЕ: Объекты переднего плана в целом занимают меньше места, и только они попадают на вход модуля IRIS OCR.

Для большей информации о переднем плане и заднем фоне см. "Процесс сегментации".

Это единственный скользкий момент в использовании комбинации методов подклейки фона и раскраски маски (применяемых в DjVu Imager). Однако для обычных случаев работы с DjVu Imager такая ситуация крайне редка и нехарактерна.

Данная проблема нуждается в дополнительном исследовании - т.к. комбинация методов подклейки фона и раскраски маски является перспективной технологией, которую можно применить не только в DjVu Imager, но и в других гипотетических самодельных DjVu-программах.

Преимущества DjVu Sep:

1. Отсутствие проблемы паразитного фона.


4. Приложение.

Термины статьи:

1. Субскан - одна из 2 компонент исходного скана после "разбиения" скана с полутоновой иллюстрацией в ST Split или в СканКромсаторе. Прототип какого-либо слоя будущего DjVu-файла.

4. Субскан переднего плана (передний субскан) (foreground subscan) - чёрно-белый (малоцветный) субскан - прототип слоя переднего плана будущего DjVu-файла.

5. Субскан заднего фона (задний субскан) (background subscan) - серый (цветной) субскан - прототип слоя заднего фона будущего DjVu-файла.

6. Пара субсканов - совокупность переднего и заднего субсканов, вместе соответствующих одному и тому же исходному скану.

7. DjVu-картинка - 1-слойный одностраничный DjVu-файл в режиме "DjVuPhoto" (только задний фон, без маски и без переднего плана).

8. DjVu-заготовка - DjVu-книга без страниц, содержащих иллюстрации (полутоновые или многоцветные).

9. DjVu-книга - готовый к использованию многостраничный DjVu-файл с иллюстрациями.

grey_image.jpg (6737 bytes)

bw_image.gif (32913 bytes)

Рис. 12. Полутоновая иллюстрация Рис. 13. Чёрно-белый рисунок

Полутоновые иллюстрации - это серые фотографии объектов реального мира или иные реалистичные рисунки, состоящие (на вид) из объектов различных оттенков серого цвета (не путать с чёрно-белыми рисунками - т.е. состоящими только из объектов чёрного и белого цветов).

color_image.jpg (11496 bytes)

lowcolor_image.gif (5363 bytes)

Рис. 14. Многоцветная иллюстрация Рис. 15. Малоцветный рисунок

Многоцветные иллюстрации - это цветные фотографии объектов реального мира или иные реалистичные рисунки, состоящие (на вид) из объектов различных оттенков разных цветов (не путать с малоцветными рисунками - состоящими только из объектов монохромных цветов).


Обсуждение программы ведётся на форуме здесь.


Автор: monday2000.

9 июня 2009 г.

E-Mail  (monday2000 [at] yandex.ru)

Hosted by uCoz