Вот сделанный мною пример работы ClearScan (скан взят самый препоганейший):
До ClearScan:
После ClearScan:
На этом примере хорошо виден принцип действия ClearScan: это -
векторизатор растрового изображения. PDF после ClearScan становится
векторным (из растрового) - потому что при увеличении (отклиарсканенного скана) угловатость (ступенчатость контура) букв не увеличивается (а это признак векторного объекта).
Хотя полученные векторные объекты -
это не буквы! В смысле, это не буквы из некоего обычного векторного шрифта (типа Times New Roman и т.п.). Видимо, в этом и причина того, что ClearScan не делает ошибок в буквах - он просто подменяет зубчатый растровый контур буквы (или небуквенного объекта) аппроксимирующей его кривой векторной линией. Векторной - потому что она описывается неким математическим уравнением (типа сплайна что-то).
Хотя не сказать, что ClearScan действует только на контур букв. Он воздействует (сглаживающим образом) и на тело буквы - убирая светлые крапинки с чёрного фона буквы, к примеру. На картинках это хорошо видно.
Вот ещё пример работы ClearScan:
На этом примере видно, что ClearScan векторизирует и межбуквенное пространство - между буквами "п" и "р" (и "р" и "е") видна бледно-серая градиентная тень.
Конечно, было бы очень заманчиво сделать самодельный алгоритм, аналогичный ClearScan - но для DjVu, а не для PDF. В принципе, нечто аналогичное, наверное, можно сделать. Причём этот аналог может быть гораздо проще алгоритмически - ClearScan же создаёт по-настоящему векторный объект (что для DjVu абсолютно излишне) - для DjVu достаточно будет лишь суметь сгладить контур - точнее, максимально точно аппроксимировать растровый контур букв векторными кривыми.
Теперь понятно, почему ClearScan не делает "ошибок распознавания", как обычный OCR. ClearScan - это вообще не OCR ни разу. ClearScan не распознаёт буквы, он просто максимально точно аппроксимирует растровый контур (буквы или любой закорючки) векторной кривой (сочленённым набором отрезков разнообразных векторных кривых), и всё. У OCR ошибки распознавания возникают оттого, что там надо сопоставить растровому образу логическую букву - это гораздо более высокий уровень абстракции, нежели чем у ClearScan (потому и чреватый ошибками (распознавания).
Из всего этого вытекает важнейший вывод:
результат работы ClearScan можно не проверять на правильность преобразования!
- в отличие от обычного OCR, где могут возникать ошибки распознавания. У ClearScan нет и не может быть в принципе "ошибок распознавания". Конечно, при условии достаточного качества встроенных алгоритмов векторной аппроксимации - но я думаю, что это условие, несомненно, соблюдается в ClearScan (потому что его реально выразить чисто математически). Другими словами, очевидно, что ClearScan практически не может совершить ошибки векторной аппроксимации - это очевидно из простых математических соображений.
Единственная проблема ClearScan - это "пропадание слов" (и даже целых абзацев):
http://ug.bu.edu/blog/lingtech/2009/02/23/acrobat-9s-clearscan-is-great-but-er-selective/Возможно, в последних версиях Adobe эта проблема уже устранена - я не знаю. Эта проблема - чисто программный глюк (обычный баг), допущенный по недосмотру программистов Adobe, сам по себе математический алгоритм ClearScan явно не может порождать такой нелепый глюк.
И теперь ещё остаётся такой вопрос - всегда ли следует делать ClearScan над любыми сканами или нет? Действительно ли ClearScan всегда улучшает внешний вид текста, или в некоторых случаях это не так?
По крайней мере, ClearScan точно уменьшает размер DjVu - в этом может легко убедиться каждый.
Ещё у меня мелькнула такая мысль насчёт ClearScan: сейчас мы сканируем на 300 dpi, затем интерполируем до 600 dpi - ради более сглаженного текста. Но это увеличивает размер DjVu в 2 раза (это очень много). Что если сканировать на 300 dpi, затем делать ClearScan - и сразу после этого дежавючить? Может, качество текста будет не хуже? (по сравнению с ресемплированием до 600 dpi) C другой стороны, ClearScan лучше делать как минимум на 600 dpi - для лучшего качества. Может, после ClearScan делать снижение разрешение с 600 dpi до 300 dpi (маленькими шагами - для меньшей деградации качества). Тут надо подумать - возможно, придумается какое-то оптимальное решение. Всё же очень жаль сейчас терять в 2 раза в размере DjVu только лишь ради сглаживания букв.
Ещё одно достоинство ClearScan - это полностью автоматическая работа.
В общем, краткий ответ на вопрос "Что такое ClearScan" звучит так: "
Это векторное сглаживание контура букв" (сканированного текста).
Кстати, официальные объяснения на тему "Что такое ClearScan" вроде этого
http://blogs.adobe.com/acrolaw/2009/05/better_pdf_ocr_clearscan_is_smal/ , оказывается,
неверны, и поэтому вносят только путаницу в понимание сути работы ClearScan. ClearScan - это не OCR, и ClearScan не генерирует новый векторный шрифт! Большей чуши трудно было бы даже и придумать. Как, спрашивается, он мог бы генерировать новый векторный шрифт (сходный по начертанию со сканированным) - такая задача была бы гораздо сложнее даже чем просто обычный OCR!
Вот что там написано:
Each character on the page is compared and all matching characters are replaced with a an outline character:
Чушь это полнейшая, ничего подобного ClearScan не делает. ClearScan просто обходит в цикле периметр контура буквы и для каждого очередного участка контура подбирает кусочек аппроксимирующей векторной линии, наиболее близкой к оригиналу. Это обычная задача из области анализа экспериментальных данных и мат. статистики.
Rather,a custom font it is created to match the visual appearance of the pixels.
Ну тоже - бред полный и чушь. Никакой специальный новый фонт не создаётся - потому что понятие "фонт" - это именно набор
БУКВ, а не набор логически-бессмысленных векторных объектов (который ClearScan и вправду создаёт фактически).
ClearScan OCR is not the default in Acrobat 9, so you’ll need to change a setting to use it.
Сам термин "ClearScan OCR" является полной бессмыслицей - как "горячий лёд" или "сухая вода". ClearScan не имеет ничего общего с OCR - ClearScan на порядок "тупее", нежели чем OCR.
Другое дело, что, по-видимому, в Акробате OCR делается автоматически сразу же после ClearScan - и результат распознавания тут же внедряется в PDF. Так что более правильным было бы назвать эту процедуру (которую и выполняет фактически Adobe Acrobat) "ClearScan + OCR", а не "ClearScan OCR".
P.S. Я думаю, что нам нужно поставить (перед нами самими) такую долгосрочную задачу, как создание самодельного аналога алгоритма ClearScan с открытыми исходниками. Пусть он будет хотя бы вполовину хуже - всё равно это ИМХО будет иметь смысл.
Программы-векторизаторы с открытыми исходниками в принципе существуют - например,
AutoTrace http://opennet.ru/prog/info/976.shtml :
AutoTrace - converts bitmap to vector graphics
Автоматически преобразует растровые изображения BMP, TGA, PNM, PPM, PGM, PBM в векторные форматы Postscript, svg, xfig, swf, pstoedit, emf and sk. Качество преобразования значительно лучше, чем у коммерческих аналогов CorelTrace и Adobe Streamline.
http://autotrace.sourceforge.net/ http://sourceforge.net/projects/autotrace/
Этот или аналогичный проект, возможно, мог бы стать отправной точкой в поисках пути создания самодельного ClearScan.