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


Проблема "инь" при кодировании в DjVu

Введение

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

Пример проблемы "инь" в DjVu-файле

Это довольно серьёзная проблема формата DjVu - и она порой отвращает от этого формата людей, пытающихся с ним разобраться. Кроме текста, инь нередко портит математические и прочие формулы, что очень существенно.

Причина этой проблемы - ошибки классификации символов в DjVu-кодировщике, помноженные на использование кодировщиком "словарей разделённых символов" ("shared shapes dictionary", "djbz-словарь").

Официальное название "проблемы инь" - Transposed Letters (термин, используемый LizardTech). Эта проблема не зависит от языка текста, кодируемого в DjVu, а также она может возникать не только в отношении букв - но также и цифр, и вообще любых мелких повторяющихся объектов на сканах.

При DjVu-кодировании изображение на скане сегментируется на текст и фон, после чего текст попадает в слой маски, которая кодируется в подформат JB2. Для снижения размера получаемого DjVu-файла JB2-кодировщик разбивает всё множество кодируемых сканов на группы по 10-20 сканов (это количество регулируется параметром pages-per-dict), и создаёт для каждой такой группы словарь разделённых символов.

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

Если изображения двух разных букв визуально схожи - то при lossy-режиме кодировщик может ошибочно решить, что это одна и та же буква. Это особенность lossy-режима - обозначать достаточно визуально-близкие мелкие образы одним и тем же образом - в djbz-словаре. В результате в djbz-словаре вместо двух символов окажется один - и он будет растиражирован по всем позициям, занимаемыми в тексте обоими символами. Так и возникает ошибка инь.

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


Возможности решения

К счастью, проблема инь не является неустранимой. Есть 2 принципиальных способа её решения (всё это разработал Arcand):

1. Отказ от "усреднения" символов словаря

2. Борьба с ошибками классификации символов

Рассмотрим эти способы решения подробнее.


Отказ от усреднения символов словаря - это отключение режимов, при которых могут возникать ошибки инь. К этому виду решения относятся следующие приёмы:

1. Отказ от lossy в пользу lossless. (В DjVu Solo 3.1 это достигается путем выбора "clean", в DEE 5.1 надо выставить Text Quality как lossless).

2. Отказ от использования словаря разделённых символов.

3. Кодирование сканов через виртуальный DjVu-принтер, а не через documenttodjvu. (Придумал Astra55, но этот приём - под большим вопросом, т.к. с теоретической точки зрения это не должно давать желаемого эффекта).

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


Борьба с ошибками классификации символов - это применение разнообразных приёмов, направленных на снижение ошибок классификации символов в DjVu-кодировщике. Сюда относится следующее:

1. Снижение степени "жирности" текста. Этого можно добиться разными способами: подбор особых режимов сканирования/обработки, или же программная обработка "утоньшение букв" (например, в RasterID).

2. Применение повышающего ресемплинга (удобно в Irfan View) с шагом 50-100 dpi (начиная с 350 dpi, инь практически не проявляется). Как правило, ресемплинг делают с 300 до 600 dpi.

3. Кодировать проблемные участки отдельно, хорошие отдельно - с разными опциями, а потом объединять их в единый файл.

4. Делать немного непропорциональный ресемплинг (пикселей на 5 больше по вертикали).

5. Отказ от использования аггрессивных режимов кодирования.

6. Уменьшение размера словаря (это повышает статистические шансы правильной классификации символов).

7. Для изображений, преобразованных по схеме "300 dpi Greyscale -> 600 dpi BW" использовать параметр resolution-multiplier = 1 в профиле кодирования DEE 5.1 - это снижает количество ошибок "инь" у них.

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

Примечание:

Выдержка из хелпа к DEE 5.1

--resolution-multiplier=<1-2>

The resolution-multiplier option decreases (or maintains) the size of the image for segmentation purposes. The Document Express segmenter is designed to be most effective with images that are 300 dpi. If you are encoding an image that is over 400 dpi, assign a value of 2 to the resolution-multiplier option. Doing so alerts the segmenter that it should skip every other pixel and row when it analyzes the image, thereby reducing the image's scanned resolution by half. If you are encoding an image that is below 400 dpi, assign a value of 1 to this option to maintain the current resolution.


Советы

Чем мельче и жирнее текст, тем больше буквы в нём похожи друг на друга, тем больше вероятность инь. Эти критерии позволяют заранее оценить сканы с точки зрения возникновения инь.

На 600 dpi инь практически не возникает даже при наиболее агрессивном режиме DjVu-кодирования. Исключение составляет случай, когда книга сканируется на 300 dpi Greyscale, а затем ресемплируется до 600 dpi BW. В этом случае могут возникнуть единичные ошибки "инь".


Приложение

Вот упоминание проблемы "инь" на сайте LizardTech - у них это называется Transposed Letters in Group 4 (G4) TIFF Text or Color Documents:

http://www.lizardtech.com/support/kb/viewtopic.php?t=73

Их решение:

Where possible, scan at a resolution of at least 300 dpi.

When converting documents with critical numbers (e.g. financial docs) or from low-quality scans (e.g. faxes), use the "lossless" option in the Advanced Text Settings in the GUI version, and the --lossless switch in the command line.

Т.е. это самое простое и радикальное из всех известных нам решений - отказ от lossy в пользу lossless.


Автор: monday2000.

7 декабря 2007 г.

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

Hosted by uCoz