LINUX.ORG.RU

История изменений

Исправление Truf, (текущая версия) :

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

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

Bundled 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, который это умеет.

Исходная версия Truf, :

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

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

Bundled 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 словари он делать не умеет.