Вернуться к разделу "Материалы по сканированию и оцифровке бумажных книг".
Параметры кодирования msepdjvu.exe задаются в
командной строке.
Имеются параметры, отвечающие за маску, и
параметры, отвечающие за фон.
Есть нюансы, в которых я не до конца разобрался.
При некоторых значениях
делителя дпи фона возникают проблемы: либо msepdjvu
отказывается кодировать, либо при просмотре
выскакивает ошибка (несооответствующие размеры
фона) и пустота.
Например, при 3 и 6 (иногда). Возможно, проблем не
будет, если пиксельные размеры скана будут
кратны делителю фона. Пока проблем не было при
значении делителя 4. При разрешении скана 600 дпи
разрешение фона будет равно 150 дпи - на мой взгляд
оптимальное значение. Оптимальное соотношение
размер-качество фона можно добится параметром
качества фона (ниже):
Основные параметры командной строки msepdjvu:
-dXXX - разрешение скана, например -d600.
-jSSS - качество кодирования маски, где SSS: lossless,
quasilossless, conservative, lossy, aggressive. Например -jaggressive.
-pXXX - число страниц в словаре. Например, -p1000.
-q<N> - качество кодирование фона (IW44 wavelets). По
умолчанию <N>=72+11+10+10 (четыре раздела). Это
качество для растровых рисунков избыточно и
размер фона большой. Можно уменьшать число
разделов-chunks (с конца) и изменять количество
частей-slices в разделе. Для растровых рисунков с
разрешением фона 150 dpi более оптимально с точки
зрения размер-качество <N>=72+11. Лучше подобрать
индивидуально - взять один скан с рисунком и
детально посмотреть, что будет при тех или иных
значениях этого параметра.
Что касается делителя фона, то он задается при
формировании sep файла.
Вот так, например, может выглядеть командная
строка:
msepdjvu -d600 -jaggressive -p1000 -q72+11 out.sep out.djvu
ЗЫ: Когда я выкладывал набор для создания и
кодирования разделенных сканов, то пропустил
исходник для функции ppmtodjvurle. Если нужно,
спрашивайте.
Цитата:
Есть нюансы, в которых я не до конца
разобрался. При некоторых значениях делителя дпи фона возникают проблемы: либо msepdjvu отказывается кодировать, либо при просмотре выскакивает ошибка (несооответствующие размеры фона) и пустота. |
Разобрался. Если пиксельные размеры скана кратны делителю фона, все нормально кодируется и смотрится. Чтобы не морочится, лучше делать размеры скана кратными 12. Тогда делитель может быть равен 1, 2, 3, 4 и 6. Наверное, этого будет достаточно :). Если сканы уже сделаны, то можно сделать небольшую обрезку (до нужной кратности), например, Ирфаном с помощью батника.
msepdjvu кодирует в дежавю файл специального
формата - sep-файл. sep состоит из страниц, каждая из
которых в свою очередь состоит из маски в формате
bw-rle (черно-белая) или color-rle (gray или color) и фона в
формате ppm. Из них обязательна только маска. Если
маска пустая, то она должна быть обязательно в
формате bw-rle, иначе msepdjvu вылетает с ошибкой.
Если в параметрах командной строки задан
параметр -fgsep для страниц, содержащих пустую
маску, сегментером msepdjvu будет выполнено
разделение на маску и фон. Параметры сегментера
задаются в файле профилей documenttodjvu.conf, который
должен лежать в той же папке, что и msepdjvu. Имя
профиля задается в командной стороке -profile
<имя_профиля>.
Параметры, заданные в командной строке, заменяют
параметры, прописанные в профиле в documenttodjvu.conf.
Сегментер msepdjvu работает аналогично сегментеру
documenttodjvu.
Попутно выяснилось, что опции сегментера,
которые, согласно справке, доступны только в SDK,
понимает и msepdjvu и documenttodjvu. Эти опции надо вручную
прописывать в профиле в файле профилей.
Вот эти дополнителные опции:
edge-size
render-size
blurring-size
block-size
block-overlap
thickening
Особого их влияния на работу сегментера не
заметил.
Таким образом, имеется два вида сегментера (если
не считать ручное разделение на маску и фон): типа
DEE (documenttodjvu, msepdjvu) и типа VPD.
В последнем сегментер имеет две опции. Одна
предварительно разделяет изображение на маску и
фон (по тону). Вторая опция окончательно
определяет, что останется в маске - объекты из
маски, имеющие число цветов больше заданного,
помещаются в фон.
Неплохо было бы иметь такой сегментер.
Использовать VPD для кодирования сканов не
оптимально: при печати сканы преобразуются в
формат emf (кажется так), которые потом снова
преобразуются в растровый формат. Потом, мне не
удалось получить пиксельные размеры сканов на
выходе VPD, такие же как на входе.
Т.е. сканы при кодировании в VPD как-то
деформируются. Мне это не очень нравится.
Поэтому появилась мысля :). Представляется, что
EmfToSep_NT.exe из VPD является типа диспетчером:
получает emf, передает изображение на
растеризацию (в dll), получает его обратно и
передает сегментеру (в dll) и т.д.
Если это происходит так или похожим образом, то в
принципе можно сделать свой диспетчер, который
бы брал напрямую тифы и передавал их сегментеру и
т.д. (т.е. исключить растеризацию).
Проблема в том, как разобраться со всем этим.
Может что-нибудь присоветуете.