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


Arcand о msepdjvu


О кодировании дежавю с помощью msepdjvu.exe

Параметры кодирования 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 и его сегментере

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) и т.д.
Если это происходит так или похожим образом, то в принципе можно сделать свой диспетчер, который бы брал напрямую тифы и передавал их сегментеру и т.д. (т.е. исключить растеризацию).
Проблема в том, как разобраться со всем этим. Может что-нибудь присоветуете.


Hosted by uCoz