MyTetra Share
Делитесь знаниями!
Как устроен формат DjVu
Время создания: 21.07.2021 10:08
Автор: Truf
Текстовые метки: djvu, формат
Раздел: Компьютер - Linux - Формат DJVU
Запись: xintrea/mytetra_syncro/master/base/1626851292q5h7qfw482/text.html на raw.github.com

Вопрос


DjVu — это же ведь формат для сканированных документов, правильно? Программа что, распознаёт сканы и делает из них текст?



Ответ


Не текст, а скорее алфавит изображений символов и «текст» из них.


Документ DjVu состоит из страниц. Страницы содержат (опционально) 2 слоя: foreground - слой иллюстраций и изображений сжатых с помощью IW44 wavelet encoder (c44 из пакета DjVuLibre); и background - слой «текста». Слой текста представляет собой изображение формата JB2 (cjb2 из пакета DjVuLibre).


Кодировщик берет ч/б изображение с текстом (скан), режет его на изображения символов (по белому цвету отделяет). Далее из них выкидывается слишком мелкий мусор. Далее символы приемлемого размера сравниваются друг с другом и тем самым классифицируются по степени похожести на n классов. Далее для каждого класса выбирается его представитель (усредненное изображение обычно). Из всего этого формируется локальный словарь (Sjbz) и набор инструкций. Каждая инструкция выводит символ из локального словаря, либо просто символ (если он уникален и в словарь не попал), по заданным координатам. Т.о. отсканированному тексту по сути делают алфавит типовых изображений и этим алфавитом заново его набирают. Просмотрщик DjVu документа (напр. DjView4) рендерит JB2 изображение опираясь на локальный словарь (Sjbz) и набор инструкций к нему.


Очевидно, что можно взять несколько страниц, и сделать общий для них словарь (+ локальный для того, что встречается только на одной странице, но по нескольку раз). Это будет словарь Djbz, который по сути является локальным словарем виртуального JB2 изображением размера (0,0) и без инструкций. Т.о. при рендеринге страницы, если она использует общий словарь, то берется словарь Djbz, на который она ссылается, добавляется к нему её личный Sjbz словарь и читаются её инструкции по отрисовке, которые ссылаются на символы этого общего составного словаря по индексам.


(На самом деле все немножко сложнее, т.к. символ может быть закодирован с использованием «прототипа», т.е. представлять собой другой символ с примененной к нему маской. Ну, типа «В» и «Р» могут одно из другого выводится. И нужно оговориться, что DjVu опирается только на внешний вид символов при реконструкции исходной страницы. Т.е. А и А курсивом или другим шрифтом или другим размером шрифта - это будут разные entry в словаре.)


Так вот, штатный cjb2 кодировщик ч.б. изображений (скана) в jb2 слой из пакета DjVuLibre умеет работать только с 1 изображением за раз и делает только Sjbz. Djbz словари он делать не умеет.


А minidjvu-mod - это аналог cjb2, который это умеет.


 
MyTetra Share v.0.65
Яндекс индекс цитирования