Вернуться к разделу "Реализация проекта BookScanLib".


Возможности GIMP-алгоритма Warp

Описание

Программа Book Restorer v4.1 умеет выпрямлять искривленные строки текста на скане. См. Устранение кривизны строк и перекоса текста в Book Restorer 4.1.

Эта возможность - практически уникальна и её нет в других графических редакторах. Можно ли воссоздать подобный алгоритм в своей самодельной программе?

В графическом редакторе GIMP v1.2.5 (под Windows) есть любопытный инструмент:

Фильтры - Искажения - Изгиб кривой...

Это - инструмент, управляющий искривлением изображения по задаваемому шаблону (кривой).

Я взял пример - контрольный кусочек скана с текстом, содержащим искривленные строки:

И попытался "выпрямить" этот текст желаемым образом. В окне Изгиб кривой есть несколько параметров настройки алгоритма искривления. Я использовал лишь один - кривую - задал там одну точку перелома и поднял левый конец кривой чуть вверх - чтобы "обратить" искривление строк, присутствующее на скане:

В окне Изгиб кривой есть окошко предпросмотра, которое показывает в уменьшенном масштабе результат работы алгоритма.

Результат получился следующим:

Как видно, строки выпрямились довольно неплохо - особенно самые верхние. Нижние - похуже. Попробуем ещё больше задрать левый конец шаблона-кривой вверх:

Результат 2:

Здесь нижние строки выпрямились как надо - но, правда, верхние изогнулись больше, чем требуется.


Выводы

Насколько я понял, описанный алгоритм содержится в файле warp.c в исходниках GIMP. На 2 примерах хорошо видно, что этот алгоритм принципиально похож на чаемый de-warping, который есть в Book Restorer v4.1. То есть принципиально он работает практически точно так же.

Правда, как сразу же понятно, степень искривленности строк меняется по высоте скана (а после середины скана - вообще меняет знак (направление)).

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

Таким образом, GIMP-алгоритм warp принципиально можно использовать для создания алгоритма de-warping. Надо лишь суметь автоматически вычислять степень искривленности строк (и по всей высоте скана), и подавать найденные значения на вход GIMP-warp'а.

Автоматическое вычисление степени искривленности строк - задача, отдалённо напоминающая алгоритм deskew. Возможно, это относится к области распознавания образов.


Скачать файлы-примеры к статье   (80 КБ)

Hosted by uCoz