Главная страница

Фан_Ногк_Хоанг_Диссертация. Алгоритмы обработки и анализа символов вейвлетпреобразованием, методом главных компонент и нейронными сетями


Скачать 3.2 Mb.
НазваниеАлгоритмы обработки и анализа символов вейвлетпреобразованием, методом главных компонент и нейронными сетями
Дата13.10.2022
Размер3.2 Mb.
Формат файлаpdf
Имя файлаФан_Ногк_Хоанг_Диссертация.pdf
ТипДиссертация
#732105
страница4 из 7
1   2   3   4   5   6   7
Глава 3.
Разработанное программное
обеспечение для распознавания символов и
фрагментов печатных текстов
В данной главе описываются программные средства, разработанные для реализации алгоритмов распознавания символов и фрагментов печатных текстов, описанных в главе 2. Проводится анализ инструментальных библиотек по обработке изображений и осуществляется выбор средств для разработки ПО.
Приведены основные переменные и методы реализующих классов для распознавания символов и фрагментов печатных текстов. Для конечных пользователей предусмотрено два варианта интерфейса. Первый вариант предназначен для исследователей, а второй вариант – для обычных пользователей.
3.1
Выбор средств разработки
В настоящее время существует ряд платформ, использующихся для реализации ПО. Широкое распространение получили такие платформы как
.Net и Java. При этом программы на платформе Java разработаны на языке программирования Java, а программы на платформе .Net могут реализовываться на различных языках программирования, таких как Visual
C++, Visual C#, Visual Basic .Net и другие.
Таким образом, представляет интерес рассмотреть следующие языки программирования: Java, Visual C++ и Visual C#. Эти перечисленные языки являются объектно-ориентированными языками программирования.
В работе [66] проведено сравнение между этими языками программирования и показано, что у языков Java и Visual C# имеются некоторые преимущества перед языком Visual С++, например в языке Visual
С++, когда используется ключевое слово new, данные нового экземпляра класса создаются в стеке. Если позже забыли использовать ключевое слово
delete, то это приводит к возникновению проблемы «утечки памяти». У

63 языков Visual C# и Java нет такой проблемы из-за того, что оба языка имеют встроенный сборщик мусора.
В работе [66] также анализируются сходство и различие языков Visual
C# и Java. Сделан вывод о том, что если время разработки ограничено и программные средства будут работать на различных операционных системах, то язык Java является идеальным. А если время разработки не ограничено и программные средства будут работать только на Windows, то использование языка C# является превосходным решением.
В настоящее время существуют многие открытые платформы и библиотеки по обработке изображений, наиболее распространенными из них являются платформы AForge.NET и Accord.NET, библиотеки OpenCV и
Emgu CV.
AForge.NET является общедоступной платформой (на языке C#), разработанным для разработчиков и исследователей в областях компьютерного зрения и искусственного интеллекта. Платформа состоит из набора библиотек, которые имеют следующие особенности [20].

AForge.Imaging – наибольшая библиотека платформы, которая содержит различные процедуры обработки изображений, предназначенные для решения задач улучшения качества изображения, обработки изображений и компьютерного зрения.

AForge.Vision – библиотека, которая состоит из различных процедур обнаружения и обработки движения.

AForge.Math – библиотека, которая содержит различные алгоритмы, связанные с математикой.

AForge.Video – библиотека, которая состоит из различных классов, обеспечивающих доступ к видео данным и их обработку.

AForge.Robotics – библиотека, которая содержит классы, предназначенные для манипулирования робототехническими комплексами
(Robotics kits).

64

AForge.Neuro – библиотека, которая состоит из классов, предназначенных для создания нейронных сетей и их обучения.

AForge.Genetic – библиотека, которая состоит из классов, направленных на решение различных задач в областях генетических алгоритмов (Genetic Algorithms), генетического программирования (Genetic
Programming).

AForge.Fuzzy
– библиотека, которая содержит классы, предназначенные для выполнения различных нечетких вычислений.

AForge.MachineLearning – библиотека, которая состоит из некоторых классов для области машинного обучения.
Accord.NET (на языке C#) является расширением платформы
AForge.NET с новыми инструментами и библиотеками. Эта платформа предназначена для научных вычислений и состоит из следующих главных библиотек [19].

Accord.Math – содержит дополнительную библиотеку операций над матрицами, наряду с набором численных методов декомпозиции матриц, численные алгоритмы оптимизации, специальные функции и другие инструменты для научных приложений.

Accord.Statistics
– состоит из библиотек распределений вероятностей, статистических моделей и методов, таких как линейные и логистические регрессии, скрытых моделей
Маркова,
МГК, дискриминантного анализа и др.

Accord.MachineLearning – содержит SVM, деревья решений, сети
Байеса, алгоритм K-средних, алгоритм RANSAC и д.р.

Accord.Neuro – содержит алгоритмы обучения нейронных сетей, такие как Levenberg-Marquardt, Parallel Resilient Backpropagation, процедуры инициализации, такие как Nguyen-Windrow и другие методы, связанные с нейронными сетями.

Accord.Imaging – содержит алгоритмы выделения главных точек,

65 такие как Harris, SURF и FAST, методы для сшивания изображений (image
stitching) и сравнения изображений (image matching).

Accord.Audio – содержит методы преобразования, фильтрации и обработки аудио сигналов для машинного обучения и статистических приложений.

Accord.Vision – содержит методы для распознавания и отслеживания лиц в режиме реального времени, а также методы для обнаружения, отслеживания и трансформации объектов в потоке изображений.
OpenCV (Open Source Computer Vision Library) является наиболее полной и распространенной открытой библиотекой по компьютерному зрению и машинному обучению [21]. В библиотеке имеется более 2500 оптимизированных алгоритмов, который включает в себя полный набор классических и современных алгоритмов компьютерного зрения и машинного обучения. Эти алгоритмы могут быть использованы для того чтобы обнаруживать и распознавать лица, идентифицировать объекты, классифицировать действия человека на видеопоследовательностях, отслеживать движущиеся объекты, извлекать 3D-модели объектов, находить похожие изображения из базы изображений, удалять эффекты красных глаз от снимков и т.д.
Библиотека OpenCV широко используется в известных компаниях, таких как Google, Yahoo, Microsoft, Intel, IBM, Sony, Honda, Toyota и во многих других компаниях, таких как Applied Minds, VideoSurf и Zeitera.
Библиотека OpenCV также используется в больших проектах для решения таких задач, как: обнаружение вторжения в системах видеонаблюдения в
Израиле, контроль шахтного (mine) оборудования в Китае, помощь роботам в ориентировании, обнаружение утопших в бассейне в Европе, проверка состояния взлетно-посадочных полос в Турции.
Указанная библиотека имеет C++, C, Python и Java интерфейсы и

66 поддерживает операционные системы Windows, Linux, Android и Mac OS.
Для этой библиотеки также существует привязка (cross platform) Emgu CV, которая позволяет другим языкам программирования, таким как C#, VB,
VC++, IronPython и др. вызывать функции библиотеки OpenCV.
Исходя из вышеперечисленных особенностей, язык
C# с использованием библиотеки OpenCV через привязку Emgu CV был выбран для дальнейшей реализации программного средства распознавания символов и фрагментов печатных текстов.
3.2
Реализованные классы для распознавания
символов и фрагментов текстов
3.2.1
Классы для распознавания символов
В соответствии с описанием разработанного алгоритма распознавания символов, приведенным в разделе 2.1, модуль для распознавания символов должен решать следующие задачи: выделение признаков символов, уменьшение размерности вектора признаков символов и создание классификатора.
a.
Классы для выделения признаков символов
Для выделения признаков символов созданы следующие классы:
Wavelet, WaveletTransform и ImageFeature (рис. 3.1).
Класс Wavelet
Класс
Wavelet предназначен для сохранения информации о вейвлете. В классе содержатся коэффициенты для преобразования и указывается количество этих коэффициентов. Класс
Wavelet имеет конструктор, который загружает коэффициенты для преобразования из соответствующего текстового файла. Основные переменные и методы класса
Wavelet перечислены в табл. 3.1.

67
Рисунок 3.1.
Классы для выделения признаков символов
Таблица 3.1.
Основные переменные и методы класса
Wavelet
Название переменной/метода
Описание
public double[] HighCoefficicents
Высокочастотные коэффициенты для преобразования. public double[] LowCoefficients
Низкочастотные коэффициенты для преобразования. public int NumberOfCofficients
Количество коэффициентов. public Wavelet()
Загрузка высокочастотных и низкочастотных коэффициентов вейвлет-преобразования из текстового файла.
Класс WaveletTransform
Класс
WaveletTransform предназначен для сохранения информации, полученной на основе использования вейвлет-преобразования,

68 выполняющегося с помощью класса
Wavelet
. В классе
WaveletTransform содержатся полученные вейвлет-коэффициенты data2D
путем применения вейвлет-преобразования к входному изображению. Класс
WaveletTransform имеет конструктор, который выполняет вейвлет-преобразование на основе использования двух методов
HorizontalTransform2D
и
VerticalTransform2D,
которые горизонтально и вертикально преобразуют изображение для извлечения вейвлет-коэффициентов. В классе
WaveletTransform имеется метод
GetLLCoefficients
, предназначенный для возвращения полученных низкочастотных вейвлет-коэффициентов, использованных в качестве признаков символов.
Основные переменные и методы класса
WaveletTransform перечислены в табл. 3.2.
Таблица 3.2.
Основные переменные и методы класса
WaveletTransform
Название переменной/метода
Описание
private double[,] data2D
Полученные коэффициенты на основе применения вейвлет- преобразования к входному изображению. public WaveletTransform()
Применение вейвлет- преобразования к входному изображению. private void
HorizontalTransform2D()
Применение вейвлет- преобразования к столбцам входного изображения. private void
VerticalTransform2D()
Применение вейвлет- преобразования к строкам входного изображения. public float[,]
GetLLCoefficients()
Возвращение низкочастотных вейвлет-коэффициентов.

69
Класс ImageFeature
Класс
ImageFeature предназначен для выделения признаков символов.
Класс
ImageFeature имеет конструктор, который создает новые экземпляры этого класса. Для выделения признаков символов в классе созданы следующие методы:
SplitImage и
ExtractFeature
. Метод
SplitImage предназначен для разделения входного изображения на 12 локальных частей.
Метод
SplitImage также включает шаг изменения размера изображения символа до 64×64 пикселей. Метод
ExtractFeature осуществляет выделение признаков символа на основе применения вейвлет-преобразования
WaveletTransform к изображению символа размером 64×64 пикселей и к каждой из 12 полученных локальных частей изображения символа. Основные методы класса
ImageFeature перечислены в табл. 3.3.
Таблица 3.3.
Основные методы класса
ImageFeature
Название метода
Описание
public ImageFeature
()
Создание нового экземпляра класса. private void SplitImage()
Разложение изображения символа на локальные части. public Matrix
ExtractFeature()
Выделение характерных признаков символа.
b.
Классы для уменьшения размерности вектора признаков
символов
Для уменьшения размерности вектора признаков символов созданы следующие классы EigenSpace и EigenSpaceManager (рис. 3.2).

70
Рисунок 3.2.
Классы для уменьшения размерности вектора признаков
символов
Класс EigenSpace
Класс
EigenSpace предназначен для создания пространства собственных символов, применяемого для уменьшения размерности вектора признаков символов. В классе содержатся среднее изображение из набора М изображений, множество собственных символов и их собственных значений.
Класс имеет конструктор, который создает собственные символы с использованием метода
CalculateEigeinObjects
, предназначенного для вычисления собственных векторов ковариационной матрицы. В классе
EigenSpace содержатся метод
EigenDecomposite
, использующийся для разложения входного изображения по собственным символам, в результате которого получается вектор признаков с меньшей размерности. Основные методы класса
EigenSpace перечислены в табл. 3.4.
Таблица 3.4.
Основные переменные и методы класса
EigenSpace
Название переменной/метода
Описание
private Image[]
EigenImages
Множество собственных изображений символов.

71
Название переменной/метода
Описание
private Matrix[]
EigenValues
Множество собственных значений, соответствующих этим собственным изображениям. private Image
AverageImage
Среднее изображение набора M изображений символов. public EigenSpace()
Создание пространства собственных символов. public static void
CalculateEigenObjects()
Вычисление собственных векторов, их собственных значений и среднего изображения. public static float[]
EigenDecomposite()
Разложение входного изображения по полученным собственным векторам.
Класс EigenSpaceManager
Класс
EigenSpaceManager имеет конструктор, который создает новые экземпляры этого класса. В классе
EigenSpaceManager содержатся следующие методы:
SaveEigenSpace и
LoadEigenSpace
. Метод
SaveEigenSpace предназначен для сохранения созданного пространства собственных символов
EigenSpace в файле для его последующего использования. Метод
LoadEigenSpace загрузит пространство собственных символов
EigenSpace из файла. Основные методы класса
EigenSpaceManager перечислены в табл. 3.5.
Таблица 3.5.
Основные методы класса
EigenSpaceManager
Название метода
Описание
public void SaveEigenSpace()
Сохранение созданного пространства собственных символов в файле.

72
Название метода
Описание
public EigenSpace
LoadEigenSpace()
Загрузка пространства собственных символов из файла. public EigenSpaceManager()
Создание нового экземпляра класса.
c.
Классы для создания классификатора на основе нейронных
сетей
Для построения классификатора созданы следующие классы
NeuralNetwork, Classificator и ClassificatorManager (рис. 3.3).
Рисунок 3.3.
Классы для создания классификатора

73
Класс NeuralNetwork
Класс
NeuralNetwork предназначен для создания специальной нейронной сети, соответствующей только одному символу обучающей выборки. В классе
NeuralNetwork содержатся многослойная нейронная сеть типа класса
ANN_MLP
и соответствующая этой сети дополнительная информация типа класса
NNAdditionalData
. Класс
NNAdditionalData включает в себя название символа обучающей выборки, соответствующего нейронной сети, количество нейронов входного слоя и номер сети.
Класс
NeuralNetwork имеет конструктор, предназначенный для создания многослойной нейронной сети, которая обучается заданными изображениями символов обучающей выборки.В классе
NeuralNetwork содержится метод
Recognize
, который возвращает результат распознавания символов в виде класса
NNRecognitionResult
. Класс
NNRecognitionResult включает в себя название символа обучающей выборки, соответствующего нейронной сети, степень близости к символу и номер сети. Основные переменные и методы классов
NeuralNetwork
,
NNAdditionalData и
NNRecognitionResult перечислены в табл. 3.6–3.8.
Таблица 3.6.
Основные переменные и методы класса
NeuralNetwork
Название переменной/метода
Описание
private ANN_MLP network
Многослойная нейронная сеть типа класса
ANN_MLP
(
ANN_MLP
является классом нейронной сети библиотеки Emgu CV). private NNAdditionalData nnAddData
Дополнительная информация о нейронной сети. public NeuralNetwork()
Создание многослойной нейронной сети, обученной заданными изображениями символов.

74
Название переменной/метода
Описание
public NNRecognitionResult
Recognize()
Возвращение результата распознавания символов нейронной сетью в виде класса
NNRecognitionResult.
Таблица 3.7.
Основные переменные класса
NNAdditionalData
Название переменной
Описание
public string Label
Название символа обучающей выборки, соответствующего нейронной сети. public int InputCount
Количество нейронов входного слоя нейронной сети. public int Index
Номер нейронной сети.
Таблица 3.8.
Основные переменные класса
NNRecognitionResult
Название переменной
Описание
public string Label
Название символа обучающей выборки, соответствующего нейронной сети. public float Prediction
Степень близости к символу обучающей выборки, находящаяся в пределах от 0 до 1. public int Index
Номер нейронной сети.
Класс Classificator
Класс
Classificator предназначен для создания классификатора на основе специальных нейронных сетей
NeuralNetwork
. В классе
Classificator содержится множество специальных многослойных нейронных сетей и указывается количество нейронов их входного слоя. Класс
Classificator

75 имеет конструктор, который создает множество специальных многослойных нейронных сетей, количество которых соответствует количеству классов обучающих символов.В классе
Classificator содержится метод
Recognize
, который возвращает результат распознавания символов в виде класса
ClassificatorRecognitionResult
. Класс
ClassificatorRecognitionResult включает в себя название и степень близости символа первого предположения, а также название и степень близости символа второго предположения. Основные переменные и методы классов
Classificator и
ClassificatorRecognitionResult перечислены в табл. 3.9–3.10.
Таблица 3.9.
Основные переменные и методы класса
Classificator
Название переменной/метода
Описание
private List networkList
Множество специальных многослойных нейронных сетей. public int InputCount
Количество нейронов входного слоя нейронных сетей. public Classificator
()
Создание классификатора для распознавания символов, состоящего из специальных многослойных нейронных сетей. public
ClassificatorRecognitionResult
Recognize()
Возвращение результата распознавания символов нейронными сетями в виде класса
ClassificatorRecognitionResult.
Таблица 3.10.
Основные переменные класса
ClassificatorRecognitionResult
Название переменной
Описание
public string Label1
Название символа обучающей выборки первого предположения.

76
Название переменной
Описание
public float Prediction1
Степень близости к символу обучающей выборки первого предположения. public string Label2
Название символа обучающей выборки второго предположения. public float Prediction2
Степень близости к символу обучающей выборки второго предположения.
Класс ClassificatorManager
Класс
ClassificatorManager имеет конструктор, который создает новые экземпляры этого класса. В классе
ClassificatorManager содержатся следующие методы:
SaveClassificator и
LoadClassificator
. Метод
SaveClassificator предназначен для сохранения созданного классификатора
Classificator
, основанного на специальных многослойных нейронных сетях, в файле для его последующего использования. Метод
LoadClassificator осуществляет загрузку классификатора
Classificator для распознавания символов из файла. Основные методы класса
ClassificatorManager перечислены в табл. 3.11.
Таблица 3.11.
Основные методы класса
ClassificatorManager
Название метода
Описание
public void SaveClassificator
()
Сохранение созданного классификатора для распознавания символов в файле. public Classificator
LoadClassificator ()
Загрузка классификатора для распознавания символов из файла. public ClassificatorManager ()
Создание нового экземпляра класса.

77
3.2.2
Классы для распознавания фрагментов
печатных текстов
В соответствии с описанием алгоритма распознавания фрагмента печатного текста, приведенным в разделе 2.2, модуль для распознавания фрагментов печатных символов должен решать следующие задачи: поворот изображения фрагмента текста, выделение строк из фрагмента текста, выделение слов из строк, выделение символов из слов и распознавание выделенных символов. Для распознавания выделенных символов используются классы для распознавания символов, представленные в разделе
3.2.1.
a.
Классы для поворота изображения фрагмента текста
Для поворота изображения фрагмента текста созданы следующие классы: HorizontalHistogram и ImageProc (рис. 3.4).
Рисунок 3.4.
Классы для поворота изображения фрагмента текста
Класс HorizontalHistogram
Класс
HorizontalHistogram предназначен для построения проекции бинарного изображения фрагмента печатного текста на ось Y. В классе содержатся количество строк (высота) изображения; количество черных пикселей каждой строки и их максимальное значение; изображение, которое используется для представления данных проекции.
Класс
HorizontalHistogram имеет конструктор, с помощью которого проводится

78 построение проекции изображения фрагмента текста на ось Y, использующейся для его поворота. В классе
HorizontalHistogram также имеется метод
GetWhiteCount
, который вычисляет количество «белых точек».
Основные переменные и методы класса
HorizontalHistogram перечислены в табл. 3.12.
Таблица 3.12.
Основные переменные и методы класса
HorizontalHistogram
Название переменной/метода
Описание
private int[] blackCount
Матрица, значение каждого элемента которой равно количеству черных пикселей, расположенных на одной строке изображения фрагмента текста. private int size
Количество строк
(высота) изображения текста. private int max
Максимальное количество черных пикселей. public Image
HistogramImage
Изображение, представляющее данные проекции. public HorizontalHistogram()
Создание проекции изображения фрагмента текста на ось Y. public int GetWhiteCount()
Вычисление количества «белых строк» проекции изображения фрагмента текста.
Класс ImageProc
Класс
ImageProc предназначен для обработки изображения фрагмента текста. Класс
ImageProc имеет конструктор, который создает новые экземпляры этого класса. В классе
ImageProc содержится метод
RotateImage
,

79 предназначенный для поворота изображения фрагмента текста на основе использовании проекции изображения на ось Y
HorizontalHistogram
Поворот изображения фрагмента текста заключается в нахождении повернутого изображения текста, на котором расположено наибольшее количество «белых строк». Основные методы класса
ImageProc перечислены в табл. 3.13.
Таблица 3.13.
Основные методы класса
ImageProc
Название метода
Описание
public Image
RotateImage
()
Поворот изображения фрагмента печатного текста. public ImageProc()
Создание нового экземпляра класса.
b.
Классы для выделения строк фрагмента текста
Для выделения строк фрагмента текста созданы следующие классы
TextImageLayout и Line (рис. 3.5).
Рисунок 3.5.
Классы для выделения строк фрагмента текста

80
Класс TextImageLayout
Класс
TextImageLayout предназначен для сохранения информации об изображении фрагмента печатного текста. Класс содержит список выделенных строк; количество выделенных строк, слов и символов текста; результат распознавания текста. Класс
TextImageLayout имеет конструктор, с помощью которого класс извлекает информацию о бинарном изображении текста. В классе содержится метод
GetLines
, который выполняет выделение строк
Line из фрагмента текста на основе применения проекции изображения текста на ось Y, построенной с использованием класса
HorizontalHistogram
Основные переменные и методы класса
TextImageLayout перечислены в табл.
3.14.
Таблица 3.14.
Основные переменные и методы класса
TextImageLayout
Название переменной/метода
Описание
public List Lines
Список выделенных строк из изображения фрагмента текста. public int LineCount
Количество выделенных строк из изображения фрагмента текста. public int WordCount
Количество выделенных слов из изображения фрагмента текста. public int CharacterCount
Количество выделенных символов из изображения фрагмента текста. public string RecognitionResult
Результат распознавания фрагмента текста. public TextImageLayout()
Создание нового экземпляра класса. private List GetLines()
Выделение строк из изображения фрагмента текста.

81
Класс Line
Класс
Line предназначен для сохранения информации о выделенной строке текста. В классе содержатся координаты верхней и нижней границ выделенной строки; список слов в строке и их количество. Класс
Line имеет конструктор, который извлекает информацию о выделенной строке на основе использования метода
GetWords
, который выделяет слова в строке на основе использования проекции интенсивности строки на ось X. Основные переменные и методы класса
Line перечислены в табл. 3.15.
Таблица 3.15.
Основные переменные и методы класса
Line
Название переменной/метода
Описание
public int Up
Координата верхней границы строки. public int Bottom
Координата нижней границы строки. public List Words
Список слов строки. public int WordCount
Количество слов строки. public Line()
Создание нового экземпляра класса. private List GetWords()
Выделение слов строки.
c.
Классы для выделения слов из строк
Для выделения слов из строксозданы следующие классы
VerticalHistogram и Word (рис. 3.6).
Класс VerticalHistogram
Класс
VerticalHistogram предназначен для построения проекции интенсивности изображения текста на ось X. В классе содержатся количество столбцов (ширина) изображения; количество черных пикселей каждого столбца и их максимальное значение; изображение, которое используется для

82 представления данных проекции. Класс
VerticalHistogram имеет конструктор, с помощью которого строится проекция интенсивности изображения на ось X, использующаяся для выделения слов в строке текста.
Основные переменные и методы класса
VerticalHistogram перечислены в табл. 3.16.
Рисунок 3.6.
Классы для выделения слов из строк
Таблица 3.16.
Основные переменные и методы класса
VerticalHistogram
Название переменной/метода
Описание
private int[] blackCount
Матрица, значение каждого элемента которой равно количеству черных пикселей, расположенных на одном столбце изображения фрагмента текста.

83
Название переменной/метода
Описание
private int size
Количество столбцов изображения фрагмента текста. private int max
Максимальное количество черных пикселей. public Image
HistogramImage
Изображение, представляющее данные проекции. public VerticalHistogram()
Создание нового экземпляра класса.
Класс Word
Класс
Word предназначен для сохранения информации о выделенном слове в строке текста. Слова из строк выделяются с использованием метода
GetWords созданного класса
Line
. В классе содержатся координаты верхней, нижней, левой и правой границ выделенного слова; список символов в слове и их количество. Класс
Word имеет конструктор, который извлекает информацию о слове на основе использования метода
GetCharacters
, который выделяет символы в слове с использованием «соединяющихся столбцов», определяющихся методами
IsConnectedColumn и
GetPixelType
Основные переменные и методы класса
Word перечислены в табл. 3.17.
Таблица 3.17.
Основные переменные и методы класса
Word
Название переменной/метода
Описание
public int Up
Координата верхней границы выделенного слова. public int Bottom
Координата нижней границы выделенного слова. public int Left
Координата левой границы выделенного слова.

84
Название переменной/метода
Описание
public int Right
Координата правой границы выделенного слова. public List
Characters
Список символов в выделенном слове. public int CharacterCount
Количество символов в выделенном слове. public Word()
Создание нового экземпляра класса. private bool IsConnectedColumn()
Определение, является ли столбец изображения выделенного слова
«соединяющимся столбцом». private int GetPixelType()
Определение типа пикселя, использованного для определения
«соединяющегося столбца». private int GetCharacters()
Выделение символов слова.
d.
Классы для выделения символов из слов
Для выделения символов из словсозданы следующие классы
Character и Rect (рис. 3.7).
Класс Character
Класс
Character предназначен для сохранения информации о выделенном символе в словах текста. Символы из слов выделяются с использованием метода
GetCharacters созданного класса
Word
. В классе содержатся координаты верхней, нижней, левой и правой границ возможной области выделенного символа; список четырех областей символа и тип символа, использованного для отдельного распознавания похожих по написанию символов (см. раздел 2.2.3). Класс
Character имеет конструктор, который извлекает информацию о выделенном символе на основе

85 использования метода
GetRects
, который выделяет четыре области символа и возвращается тип символа. Основные переменные и методы класса
Character перечислены в табл. 3.18.
Рисунок 3.7.
Классы для выделения символов из слов
Таблица 3.18.
Основные переменные и методы класса
Character
Название переменной/метода
Описание
public int Up
Координата верхней границы возможной области выделенного символа. public int Bottom
Координата нижней границы возможной области выделенного символа. public int Left
Координата левой границы возможной области выделенного символа.

86
Название переменной/метода
Описание
public int Right
Координата правой границы возможной области выделенного символа. public Rect[] Rects
Список четырех областей выделенного символа
(раздел
2.2.3). public Character()
Создание нового экземпляра класса. private Rect[] GetRects()
Выделение четырех областей символа (раздел 2.2.3).
Класс Rect
Класс
Rect предназначен для сохранения информации об области выделенного символа
Character
. В классе содержатся координаты верхней, нижней, левой и правой границ области выделенного символа; ширина и высота области символа. Класс
Rect имеет конструктор, который получает информацию об области символа. Основные переменные и методы класса
Rect перечислены в табл. 3.19.
Таблица 3.19.
Основные переменные и методы класса
Rect
Название переменной/метода
Описание
public int Up
Координата верхней границы области выделенного символа. public int Bottom
Координата нижней границы области выделенного символа. public int Left
Координата левой границы области выделенного символа. public int Right
Координата правой границы области выделенного символа.

87
Название переменной/метода
Описание
public Rect()
Создание нового экземпляра класса.
3.3
Разработанные программные средства
При реализации разработанных алгоритмов распознавания символов и фрагментов печатных текстов были созданы программы, использующие классы, описанные в разделе 3.2. Данные классы предназначены как исследователям, так и обычным пользователям. Таким образом, были реализованы две программы, предназначенные для указанных категорий пользователей. Первая программа предназначена для исследования различных методов обработки изображений. Эта программа позволяет исследователям наблюдать результаты шагов разработанных алгоритмов.
Вторая программа предназначена для обычных пользователей, которые заинтересованы в первую очередь в удобстве использования, а не в гибкости.
3.3.1
Приложение для исследователей
Для исследования свойств разработанных алгоритмов распознавания символов и фрагментов печатных текстов было разработано приложение, позволяющее исследователям наблюдать и анализировать результаты обработки следующих задач.

Создание пространства собственных символов.

Уменьшение размерности вектора признаков символов.

Создание классификатора на основе нейронных сетей.

Распознавание рукописных цифр нейронными сетями.

Распознавание печатных символов нейронными сетями.

Поворот наклонного изображения фрагмента текста.

Выделение строк из фрагмента текста.

Выделение слов в строке.

88

Выделение символов в слове.

Распознавание печатных текстов нейронными сетями.
Для разработки приложения и классов, использовался ориентированный язык программирования Visual C#, библиотека OpenCV через привязку Emgu CV и среда Microsoft Visual Studio 2010. Интерфейс пользователя приложения для исследователей представлен на рис. 3.8.
Приложение состоит из вкладок, выполняющих вышеперечисленные задачи.
Рисунок 3.8.
Интерфейс пользователя приложения для исследователя
a.
Создание пространства собственных символов
Создание пространства собственных символов осуществляется с помощью вкладки «Пространство собственных символов» (рис. 3.9).
Вначале пользователю нужно вводить необходимые данные для создания собственных символов. На поле «Обучающая выборка» представлена папка, в которой содержатся изображения символов, используемые для создания собственных символов. Поле «Количество собственных символов» обозначает число собственных векторов ковариационной матрицы, которое соответствует числу использованных признаков при уменьшении

89 размерности вектора признаков. На поле «Папка для сохранения» представлено место для сохранения пространства собственных символов в файле. Кнопки «Загрузить…» открывают стандартный диалог для выбора папки изображений символов или места для сохранения пространства собственных символов. После заполнения всех полей пользователю необходимо нажать кнопку «Создать» для создания пространства собственных символов.
Рисунок 3.9.
Вкладка «Пространство собственных символов»
После того как создано пространство собственных символов, данные полученных собственных векторов представляются в виде таблицы, имеющей два столбца: «Собственный вектор» и «Собственное значение»
(рис. 3.9). На этих столбцах показываются номер собственного вектора и соответствующее ему собственное значение. Собственные векторы отсортированы по убыванию соответствующих им собственных значений.
Кроме того, поле «Значение элементов собственного вектора» позволяет исследователю наблюдать значения элементов выбранного собственного вектора.

90
Папка с изображениями символов состоит из папок, в каждой из которых содержатся изображения только одного класса символа. На рис. 3.10 представлен пример папки с изображениями символов, используемые для создания пространства собственных символов.
Рисунок 3.10.
Пример папки с изображениями символов
b.
Уменьшение размерности вектора признаков символов
Уменьшение размерности вектора признаков символов выполняется с помощью вкладки «Уменьшение размерности вектора признаков» (рис.
3.11). Вначале пользователю необходимо указать используемые изображения символов и пространство собственных символов, предназначенное для уменьшения размерности вектора признаков символов. Данные изображений символов представляются в виде таблицы, состоящей из трех столбцов:
«Номер», «Символ» и «Изображение». На этих столбцах показываются номер изображения, название символа и ссылка на изображение. На поле
«Пространство собственных символов» представлена ссылка на файл

91 пространства собственных символов. Кнопки «Загрузить…» открывают стандартный диалог для выбора изображений символов или файла пространства собственных символов.
Рисунок 3.11.
Вкладка «Уменьшение размерности вектора признаков»
После того как указаны необходимые данные, при выборе изображения символа программа автоматически выделяет вектор признаков выбранного символа и уменьшает его размерность. В результате этого на экране показываются изображение символов размером 64×64 пикселя и его 12 локальных частей. На поле «Низкочастотные вейвлет-коэффициенты» представлены значения полученных низкочастотных коэффициентов с использованием вейвлет-преобразования. На поле «Результат уменьшения
размерности вектора признаков» приведены значения элементов вектора с меньшей размерностью.
c.
Создание классификатора на основе нейронных сетей
Для создания классификатора для распознавания символов на основе нейронных сетей используется вкладка «Классификатор» (рис. 3.12).

92
Рисунок 3.12.
Вкладка «Классификатор»
Вначале пользователю нужно заполнить необходимые данные для решения этой задачи. На поле «Обучающая выборка» указана папка с изображениями символов, используемыми для обучения нейронных сетей.
Поле «Число входных нейронов» показывает количество нейронов входного слоя нейронных сетей. Минимальная ошибка и максимальное число итераций, использованные в качестве условия завершения обучения нейронных сетей, указаны на полях «Минимальная ошибка» и «Число
итераций». На поле «Пространство собственных символов» указана ссылка на файл пространства собственных символов, а на поле «Пака для
сохранения» – папка, в которой сохранятся обученные нейронные сети.
Кнопки «Загрузить…» открывают стандартный диалог для выбора папки с обучающими изображениями или файла пространства собственных символов или места для сохранения обученных нейронных сетей. После заполнения необходимых данных пользователь нажимает кнопку «Создать» для запуска

93 процесса создания классификатора.
В результате данные обученных сетей представлены на экране в виде таблицы, состоящей из трех столбцов:
«Нейронная
сеть»,
«Соответствующий символ» и «Файл». На этих столбцах приведены номер сети, соответствующий ей символ и ссылка на ее файл.
d.
Распознавание рукописных цифр
Для наблюдения результатов распознавания рукописных цифр используется вкладка «Распознавание рукописных цифр» (рис. 3.13).
Рисунок 3.13.
Вкладка «Распознавание рукописных цифр»
Вначале пользователю необходимо указать изображения распознаваемых цифр, пространство собственных символов и обученные нейронные сети. Данные изображений цифр представляются в виде таблицы, состоящей из трех столбцов: «Номер», «Символ» и «Изображение». На этих столбцах представлены номер изображения, название цифры и ссылка на

94 изображение. На поле «Пространство собственных символов» указана ссылка на файл пространства собственных символов, а на поле «Нейронные
сети» – папка, в которой сохранены обученные нейронные сети. Кнопки
«Загрузить…» открывают стандартный диалог для выбора изображений распознаваемых цифр или файла пространства собственных символов или папки с файлами обученных нейронных сетей.
После того как указаны необходимые данные, при выборе изображения цифры программа автоматически распознает его указанными нейронными сетями. В результате этого на экране показывается степень близости распознаваемой цифры к каждой цифре обучающей выборки. В дополнение приводятся результаты распознавания как без учета второго предположения, так и с его учетом.
e.
Распознавание печатных символов
Наблюдение результатов распознавания печатных символов осуществляется с помощью вкладки «Распознавание печатных символов»
(рис. 3.14).
Рисунок 3.14.
Вкладка «Распознавание печатных символов»

95
Вначале пользователю необходимо, как и во вкладке распознавания рукописных цифр (рис. 3.13), указать изображения распознаваемых символов, пространство собственных символов и обученные нейронные сети.
После того как указаны необходимые данные, при выборе изображения символа программа автоматически распознает его с использованием указанных нейронных сетей. В результате этого, на экране показывается степень близости распознаваемого символа к каждому обучающему символу.
Также приведены результаты распознавания как без учета второго предположения, так и с его учетом.
f.
Автоматическое тестирование процесса распознавания
рукописных цифр и печатных текстов
Для автоматического тестирования процесса распознавания рукописных цифр и печатных текстов используется вкладка «Тестирование»
(рис. 3.15).
Рисунок 3.15.
Вкладка «Тестирование»

96
Вначале пользователю необходимо указать папку с изображениями символов тестовой выборки, используемые пространство собственных символов и применяемые нейронные сети. Поле «Тестовая выборка» представляет ссылку на папку с изображениями символов тестовой выборки.
На поле «Пространство собственных символов» указана ссылка на файл пространства собственных символов, а на поле «Нейронные сети» – папка, в которой сохранены обученные нейронные сети. После заполнения необходимых данных, пользователь нажимает кнопку «Тестировать» для запуска процесса автоматического тестирования. Кнопки «Загрузить…» открывают стандартный диалог для выбора папки с изображениями символов тестовой выборки или файла пространства собственных символов или папки с файлами обученных нейронных сетей.
После того как завершено тестирование, на экране показывают результаты тестирования, представленные в виде таблицы. Таблица результатов тестирования имеет три столбца: «Символ», «Число
изображений», «Без учета» и «С учетом». На этих столбцах представляются название символа и соответствующие ему количество изображений, число правильных распознаваний как без учета второго предположения, так и с его учетом.
g.
Распознавание фрагментов печатных текстов
Для наблюдения результатов распознавания фрагментов печатных символов используется вкладка «Распознавание фрагментов текстов» (рис.
3.16). Вкладка позволяет пользователям наблюдать результаты не только задачи распознавания фрагментов печатных символов, но и результаты других задач, таких как поворот изображения фрагментов текстов, выделение строк, слов и символов фрагментов текстов.

97
Для поворота изображения наклонного фрагмента текста, вначале пользователю необходимо открыть исходное изображение фрагмента текста с помощью кнопки «Загрузить…». Затем пользователь нажимает на кнопку
«Повернуть» для поворота наклонного изображения фрагмента текста. В результате повернутое изображение появляется на поле «Обработанное
изображение», а размер изображения фрагмента текста, угол и время его поворота – на поле «Результат» (рис. 3.16).
Рисунок 3.16.
Поворот наклонного изображения фрагмента текста
Для выделения строк фрагмента текста после загрузки исходного изображения фрагмента текста пользователь нажимает на кнопку «Выделить
строки» для выделения строк фрагмента текста. В результате на поле
«Обработанное изображение» представляется изображение с границами областей выделенных строк, а на поле «Результат» – размер изображения фрагмента текста и время выделения его строк (рис. 3.17).

98
Рисунок 3.17.
Выделение строк
Для выделения слов фрагмента текста, вначале пользователю необходимо нажать на кнопку «Загрузить…», которая открывает стандартный диалог для выбора исходного изображения фрагмента текста.
Затем пользователь нажимает на кнопку «Выделить слова» для выделения слов фрагмента текста. После того как выделены слова, на поле
«Обработанное изображение» представляется изображение с границами областей выделенных слов, а на поле «Результат» – размер изображения фрагмента текста и время выделения его слов (рис. 3.18).
Для выделения символов фрагмента текста, после загрузки исходного изображения фрагмента текста с помощью кнопки «Загрузить…», пользователь нажимает на кнопку «Выделить символы» для выделения символов фрагмента текста. В результате на поле «Обработанное
изображение» представляется изображение с границами областей выделенных символов, а на поле «Результат» – размер изображения фрагмента текста и время выделения его символов (рис. 3.19).

99
Рисунок 3.18.
Выделение слов
Рисунок 3.19.
Выделение символов

100
Для распознавания фрагмента текста, после загрузки исходного изображения фрагмента текста, пользователю необходимо указать пространство собственных символов (поле «Пространство собственных
символов») и нейронные сети (поле «Нейронные сети») с помощью кнопки
«Загрузить…». Затем пользователь нажимает на кнопку «Распознать» для распознавания фрагмента текста.
В результате на поле «Результат» показываются размер изображения фрагмента текста, время его распознавания и результат распознавания (рис.
3.20).
Рисунок 3.20.
Распознавание фрагмента текста
3.3.2
Приложение для обычных пользователей
Приложение для обычных пользователей имеет внешний вид интерфейса, состоящей из следующих компонент: поля «Исходное
изображение» и «Результат распознавания», и две кнопки «Загрузить…» и

101
«Распознать» (рис. 3.21). Обычным пользователям не нужно указать используемые пространство собственных символов и нейронные сети.
Вначале пользователю необходимо загрузить изображение фрагмента текста в поле «Исходное изображение». Затем ему необходимо нажать на кнопку
«Распознать».
Результат распознавания представляется на поле
«Результат».
Рисунок 3.21.
Интерфейс приложения распознавания фрагмента
печатного текста для обычных пользователей

102
3.4
Основные результаты и выводы по главе 3
Произведен анализ и сравнение особенностей языков программирования: Java, Visual C++ и Visual C#. Сделан аналитический обзор распространенных открытых платформ и библиотек по обработке изображений. На основе анализа языков программирования, платформ и библиотек по обработке изображений произведен выбор средств разработки.
Предложена простая и гибкая архитектура библиотеки для реализации алгоритмов распознавания символов и фрагментов печатных текстов. Классы библиотеки разделены на две группы: классы для выделения символов фрагмента текста и классы для распознавания символов.
Разработаны программные средства, использующие реализованную библиотеку для решения задач распознавания символов и фрагментов печатных текстов. Созданы два приложения: первое используется для исследователей, а второе для обычных пользователей.

103
1   2   3   4   5   6   7


написать администратору сайта