Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по практике1.docx
Скачиваний:
12
Добавлен:
15.08.2019
Размер:
4.24 Mб
Скачать

Сегментирование строк

После определения угла наклона строк можно переходить непосредственно к сегментированию. Выделение строк происходит аналогично определению точек пересечения с текстовыми линиями в 1-м методе поиска угла (формулы (4), (5), (6)). Только теперь в качестве строки мы считаем не горизонтальный массив пикселей, а наклонную строку.

(12)

Где - элемент выделенной косой i – й строки, – элемент исходного изображения

Сегментирование слов

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

1) Для всех пиксельных столбцов исходного изображения строки находим их средние значения яркости согласно формуле (13)

(13)

где m – высота текущей строки в пикселях, – яркость, i – номер текущего пикселя в столбце, j – номер столбца.

2)Затем определяем среднее значение яркости для данного изображения строки согласно формуле (14)

(14)

где n – количество пикселей в строке

3)Средняя яркость в межсловных интервалах должна быть невелика (в идеальном случае она равна нулю). Поэтому ее левую границу (начало слова) можно выразить через среднюю яркость изображения строки согласно формуле (15)

(15)

где - коэффициент.

4)Аналогично яркость правой границы (конец слова), также может быть выражена через среднюю яркость всего изображения согласно формуле (16)

(16)

где - коэффициент.

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

Программная реализация: Язык и среда исполнения

В качестве языка программирования был выбран C#.

Язык C# заслужил большое уважение и популярность среди некоторых разработчиков самых разных программных продуктов. Последнюю пару лет C# играл важную роль в производстве устойчивых к сбоям продуктов — от настольных приложений до Web сервисов, от высокоуровневых решений в автоматизации бизнес-процессов до программ системного уровня и от однопользовательских продуктов до корпоративных решений в сетевых распределенных средах.

Язык С# включает в себя поддержку структурного, компонентно - ориентированного и объектно - ориентированного программирования, которую только можно ожидать от современного языка, «стоящего на плечах» C++ и Java. С# также позволяет программисту непосредственно обращаться к участкам памяти с помощью указателей в стиле C++ и ключевых слов, помечающих подобные действия как небезопасные. Кроме того, программист может предупреждать сборщик мусора, что объекты, на которые ссылается указатель, нельзя удалять, пока они не будут освобождены.

Выбранный язык позволяет наиболее удобно и гибко работать в среде исполнения .NET Framework, которая включает множество реализованных функций и процедур. Набор базовых классов платформы, а над ним расположены слой классов данных и XML, а также слой классов для создания веб – служб (Web Services), веб- и Windows-приложений (Web Forms и Windows Forms). Собранные воедино, эти классы известны под общим именем FCL (Framework Class Library). Это одна из самых больших библиотек классов в истории программирования. Она предоставляет объектно-ориентированный API-интерфейс ко всем функциональным возможностям, инкапсулированным платформой .NET. Имея в своем составе более 4000 классов, библиотека FCL способствует быстрой разработке настольных, клиент – серверных и других приложений и веб – служб.

Несмотря на то, что обычно С# применяется для программирования GUI- и Web-компонентов, его вполне можно использовать и для научных вычислений.

Как и остальные .NET-ориентированные языки, C# компилируется в MSIL (Microsoft intermediate language), который выполняется в общеязыковой исполняющей среде (CLR). CLR можно упрощенно представить как комбинацию оптимизирующего JIT компилятора и сборщика мусора. C# предоставляет и использует большую часть функциональности CLR, поэтому важно детальнее рассмотреть, что происходит в исполняющей среде.

JIT компиляция — значимая часть технологии, открывающей возможности для широкого спектра оптимизаций. Хотя текущая версия по временным рамкам ограничена в количестве выполняемых оптимизаций, теоретически она может превзойти все существующие статические компиляторы. Конечно, причина в том, что динамические свойства критичного к быстродействию кода или его контекст не полностью известны или проверены до периода выполнения. JIT компилятор способен использовать собранную информацию, генерируя более эффективный код, который теоретически может заново оптимизироваться при каждом запуске. Сейчас компилятор генерирует машинный код лишь раз для каждого метода. После генерации машинный код выполняется с той скоростью, на которую способен данный компьютер.

В научном программировании это может быть удобно. Код научных расчетов в основном выполняет операции над числами. Чтобы осуществлять такие вычисления за приемлемое время, следует корректно использовать некоторые аппаратные ресурсы. Хотя многие статические компиляторы хорошо оптимизируют код, динамическая природа JIT компилятора позволяет ему оптимизировать использование ресурсов с помощью таких методов, как распределение регистров на основе приоритета (priority-based register allocation), «ленивая» выборка кода (lazy code selection), подстройка кэша (cache-tuning) и специфичные для процессора оптимизации (CPU-specific optimizations). Эти методы также открывают возможности для более тонкой оптимизации вроде разложения сложных команд (strength reduction), подстановки значений констант (constant propagation), избыточной загрузки после записи (redundant load-after-store), исключение общих подвыражений (common sub-expression elimination), исключение проверки границ массивов (array bounds check elimination), подстановки тел методов (method inlining) и т. д.

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

Обработка изображений WPF предоставляет значительные усовершенствования возможностей обработки изображений в Microsoft Windows. Функции работы с изображениями, например вывод растрового изображения или использование изображения в обычных элементах управления, были ранее реализованы в библиотеках Интерфейс графических устройств (GDI) Microsoft Windows и Microsoft Windows GDI+. Эти интерфейсы API-интерфейс обеспечивают базовые функции для работы с изображениями, однако не обеспечивают поддержку расширяемости кодеков и изображений высокого разрешения. При разработке библиотеки Обработка изображений WPF были учтены недостатки библиотек Интерфейс GDI и GDI+; в нее был включен новый набор интерфейсов API-интерфейс для вывода и использования изображений в приложениях.

Существует два способа доступа к Обработка изображений WPFAPI-интерфейс — управляемому компоненту и неуправляемому компоненту. Неуправляемый компонент предоставляет следующие возможности.

  • Расширяемость для новых или собственных форматов изображений.

  • Улучшенная производительность и повышенный уровень безопасности для собственных форматов изображений, включая BMP (bitmap — точечный рисунок), Формат JPEG (Joint Photographics Experts Group), Формат PNG (Portable Network Graphics), Формат TIFF (Tagged Image File Format), Microsoft Windows Media Photo, Формат GIF (Graphics Interchange Format) и значков (ICO).

  • Сохранение данных изображения с высокой глубиной цвета до 32 бит на канал.

  • Неразрушающее масштабирование, обрезка и повороты.

  • Упрощенное управление цветом.

  • Поддержка собственных метаданных в файле.

  • Управляемый компонент использует неуправляемую инфраструктуру для предоставления плавной интеграции изображений с другими возможностями WPF, например, пользовательский интерфейс, анимацией и графикой. Управляемый компонент также использует преимущества модели расширяемости кодека для работы с изображениями WPF (Windows Presentation Foundation), которая позволяет автоматически распознавать новые форматы изображений в приложениях WPF.