Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Разработка приложения для быстрого распознавания примитивов






Библиотека компьютерного зрения OpenCV

OpenCV - библиотека компьютерного зрения с открытым исходным кодом (Open Source Computer Vision Library), содержащая более 500 функций, заточенных под выполнение в реальном времени. Библиотека содержит алгоритмы для обработки, реконструкции и очистки изображений, распознания образов, захвата видео, слежения за объектами, калибровки камер и др.

Изначально перед OpenCV ставились следующие цели:

· Исследование машинного зрения, разработка и оптимизация кода.

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

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

Для загрузки доступны версии для Windows, Mac, Linux. Поддерживается множество языков, включая C/C++, Python, Java.

OpenCV состоит из нескольких модулей:

1. CXCORE – Ядро, содержит:

· Базовые структуры

· Матричную алгебру

· Алгоритмы работы с памятью

· Алгоритмы преобразования типов

· Алгортмы для обработки ошибок

· Функции для записи/чтения XML файлов

· Функции для работы с 2D графиками

2. CV – Модуль обработки изображений, работа с компьютерным зрением, содержит:

· Функции для работы с изображениями (преобразование, фильтрация и т.д.)

· Функции для анализа изображений (поиск контуров, гистограммы и т.д.)

· Алгоритмы анализа движений, слежение за объектами

· Алгоритмы распознания объектов (лиц, предметов)

· Алгоритмы для калибровки камер

3. ML – Машинное обучение:

· Функции для классификации и анализа данных

4. HighGUI – Модуль для создания пользовательского интерфейса, отвечает за:

· Создание окон

· Вывод изображений

· Захват видео из файлов и камер

· Чтение/Запись изображений

5. CVCAM – Захват видео с цифровых камер

6. CVAUX – Устаревшие функции:

· Пространственное зрение

· Нахождение и описание черт лица

· Поиск стерео соответствий

· Описание текстур[13]

Примечание: руководство по установке библиотеки OpenCV находится в приложении 1.

Постановка задачи

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

Будущее приложение должно уметь распознавать 8 типов геометрических примитивов. Каждому примитиву ставится в соответствии номер от 0 до 7. При распознавании приложение должно выводить на экран цифру, соответствующее номеру примитива. По возможности, реализовать распознавание цветов примитивов.

Табл. 1. Нумерация примитивов

Примитив Номер
 
 
 
 
 
 
 
 

Разработка алгоритма

Последовательность работы программы можно представить в виде блок-схемы (рис. 10).

Рис. 10. Блок-схема процесса работы программы

Процесс распознавания состоит из двух процессов: распознавание фигуры и распознавание цвета. Схематичное представление этих процессов показано на рисунках 11, 12.

Рис. 11. Блок-схема процесса распознавания фигуры

Рис. 12. Блок-схема процесса распознавания цветов

Алгоритм распознавания реализован на языке C++ с использованием среды разработки MS Visual Studio 2010. Перенос программы с алгоритмического языка на язык C++ не вызвал больших проблем, за исключением сложности при работе с памятью. В этих местах отладка программы становится весьма трудной. В написании алгоритма помогли статьи и учебники по OpenCV, указанные в библиографическом списке.

Алгоритм распознавания цветов не был реализован, т.к. он напрямую зависит от координат контуров. В OpenCV за хранение контуров отвечает класс CvSeq.

Код C++ typedef struct CvSeq { CV_SEQUENCE_FIELDS() } CvSeq;

Если заглянуть в исходные файлы библиотеки, то можно увидеть следующее описание CV_SEQUENCE_FIELDS():

Код C++ #define CV_SEQUENCE_FIELDS CV_TREE_NODE_FIELDS(CvSeq); int total; /*Total number of elements. */ int elem_size; /*Size of sequence element in bytes. */ schar* block_max; /*Maximal bound of the last block. */ schar* ptr; /*Current write pointer. */ int delta_elems; /*Grow seq this many at a time. */ CvMemStorage* storage; /*Where the seq is stored. */ CvSeqBlock* free_blocks; /*Free blocks list. */ CvSeqBlock* first; /*Pointer to the first sequence block.*/

Отсюда видно, что доступа к этим координатам нет.

Примечание: исходный код модуля распознавания фигуры находится в приложении 2.

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

Тестирование алгоритма производилось на наборе изображений, созданных в графическом редакторе (без шумов), и на наборе изображений, полученных при помощи Web-камер и камеры мобильного телефона (присутствует шум).

Фигуры на изображениях без шумов располагались под углами от -5° до +5°, применялись различные сочетания цветов фигуры и фона. Стоит отметить, что точность распознавания составила в этом случае 0, 95. Анализ показал, что некоторые сочетания цветов при переводе изображения в градации серого дают один и тот же оттенок. Поэтому алгоритм не может выделить контуры и провести сравнение с шаблонами.

При тестировании алгоритма на снимках с камер был получен ожидаемый результат: распознавание во многом зависит от качества снимка. Камеры с большим разрешением производят меньше шумов. Также большое влияние на распознавание оказывает угол наклона – происходит искажение изображения. Из-за этого снижается вероятность распознавания.

Примечание: изображения для тестов находятся на электронном носителе.


 

Заключение

Компьютерное распознавания – это современная наукоёмкая область информатики. Её изучение с каждым привлекает всё больше и больше молодых исследователей. Так, российские разработчики компании «Itseez», решают вопросы распознавания на протяжении уже 13 лет. Их исследования стали общедоступными благодаря созданию библиотеки компьютерного зрения OpenCV. Она имеет открытый исходный код, что позволяет использовать её как для крупных коммерческих проектов, так и для изучения студентами. Именно поэтому в рамках курсового проекта были использованы методы указанной библиотеки.

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

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

Таким образом, задачи курсового проекта были решены, а цели достигнуты.


 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.