Открытые
кроссплатформенные библиотеки (OpenGL, OpenAL, OpenCV) в курсах, читаемых по кафедре медиасистем и технологий
А.В. Самохина,
канд. техн. наук, доцент
В этой статье речь идет о двух предметах: «Компьютерная геометрия и графика» и «Основы обработки визуальной информации».
Компьютерная геометрия и графика - раздел науки, посвященный генерации (моделированию и воспроизведению) трехмерных сцен и преобразованию изображений.
«Основы обработки визуальной информации» - предмет, посвященный компьютерному зрению.
OpenGL
Open Graphics Library - библиотека, с помощью функций которой осуществляют моделирование, текстурирование и визуализацию (рендеринг) 3D-сцен.
OpenAL
Библиотека OpenAL (Open Audio Library) представляет собой бесплатную, кроссплатформенную библиотеку с открытым кодом для работы с 3D-звуком.
Большими плюсами этой библиотеки являются ее простота и то, что по стилю она очень сильно напоминает библиотеку OpenGL. В рамках изучения вышеназванных предметов OpenAL используется как дополнительная библиотека.
Библиотека OpenAL позволяет задавать в трехмерном пространстве различные источники звука и слушателя. И для каждого источника звука, и для слушателя можно задать ряд параметров (таких
как, положение, скорость и т. п.), влияющих на получающийся в результате звук.
OpenCV
Библиотека OpenCV (Open Computer Vision) является открытой библиотекой с набором функций для обработки, анализа и распознавания изображений и, кроме того, численных методов общего назначения.
Она является одной из наиболее известных open source библиотек, распространяющихся в условиях лицензии BSD, и может свободно использоваться для академических и коммерческих целей.
В версии 2.2 структура библиотеки реорганизована - теперь вместо больших универсальных модулей (cxcore, Cvaux, Highgui, Cvaux) библиотека OpenCV разделена на небольшие модули по функциональному использованию:
• opencv_core - ядро: базовые структуры, вычисления (математические функции, генерация псевдослучайных чисел, DFT, DCT, ввод/вывод в XML и т. п.);
• opencv_imgproc - обработка изображений (фильтры, преобразования и т. д.);
• opencv_highgui - простой UI, загрузка/сохранение изображений и видео;
• opencv_ml - методы и модели машинного обучения (SVM, деревья принятия решений и т. д.);
• opencv_features2d - различные дескрипторы (SURF);
• opencv_video - анализ движения и отслеживание объектов (оптический поток, шаблоны движения, устранение фона);
• opencv_objdetect - детектирование объектов на изображении (вейвлеты Хаара, HOG и т. д.);
• opencv_calib3d - калибровка камеры, поиск стерео-соответствия и элементы обработки трехмерных данных;
• opencv_flann - библиотека быстрого поиска ближайших соседей (FLANN);
• opencv_contrib - сопутствующий код, еще не готовый для применения;
• opencv_legacy - устаревший код, сохраненный ради обратной совместимости;
• opencv_gpu - ускорение некоторых функций OpenCV за счет CUDA (NVidia).
Интеграция OpenCV в мультимедиа-проекты
Библиотека OpenCV используется совместно:
1) с низкоуровневыми библиотеками (OpenGL, OpenAL и др);
2) со среднеуровневыми платформами, включающими в себя
большой набор функций и библиотек для удобного программирования (openFrameworks и др.);
3) со средами «визуального программирования», позволяющими расширять себя плагинами, сделанными в низкоуровневых средах.
Об одной задаче переноса траектории с карты
на рельеф (пример применения OpenGL)
В этом параграфе рассказывается об одной из задач, при решении которых используются методы и технологии компьютерной графики, реализуемые с помощью функций библиотеки OpenGL (вернее, с помощью группы разноуровневых библиотек: OpenGL, glaux, glu, glut).
Исходные данные задачи
Задан рельеф местности набором 3D-точек на равномерной сетке по хи y И есть карта этой местности.
Требуется создать программный продукт, в котором были бы реализованы следующие возможности:
а) визуализировать рельеф с наложенной картой;
б) отдельно визуализировать карту;
в) при воздействии на карту получать отклик на рельефе.
Описание решения задачи
Работать будем, используя средства и методы объектно-ориентированного программирования. Цикл обработки сообщений нашего приложения создадим с помощью функций библиотеки glut. Эта же библиотека обеспечивает возможность иметь несколько окон приложения. Воспользуемся этой возможностью.
Для визуализации карты создадим 2D-окно. Загрузим оцифрованную карту и выведем ее в наше 2D-окно.
Для визуализации рельефа создадим 3D-окно. Заданную дискретную функцию (рельеф) будем аппроксимировать поверхностью Безье. На полученную 3D-сетку натянем уже подгруженную текстуру (карту).
Воздействие на карту реализуем в виде нескольких кликов мыши по карте в 2D-окне (проложим маршрут). В функции-обработчике сообщений от мыши реализуем вывод прокладываемого маршрута в 3D-окно на рельеф.
В это время заботимся о правильной передаче управления от одного окна к другому.
Вышеописанный алгоритм реализован в виде законченного программного продукта (.exe-файла), созданного в среде разработчика Visual Studio 2008 на языке C++ с подключенными библиотеками OpenGL, glaux, glu, glut.
На рис. 1 изображено 2D-окно с картой местности, на которой кликами мыши намечается маршрут. Обозначения: черная точка -город, белая пиния - дорога, звездочка - место клика мыши.
Рис. 1
На рис. 2 изображено 3D-окно с рельефом той же местности. В этом окне маршрут визуализируется уже на рельефе (черная линия).
аш
Рис. 2
В программе реализована свойственная 3D-приложениям возможность «поразглядывать» проложенный маршрут (масштабирование, повороты).
Обсуждение результатов
При проверке на различных рельефах оказалось, что в некоторых случаях тропинка частично прорисовывается «под землей».
Вывод
Аппроксимация по Безье здесь не совсем уместна. Лучше взять какой-нибудь из интерполяционных методов приближения многочленами небольшой степени.
Библиографический список
1 Никулин Е.А. Компьютерная геометрия и алгоритмы машинной графики / Е.А. Никулин. - СПб. : БХВ-Петербург, 2005.
2. ФрэнсисХилл. OpenGL. Программирование компьютерной графики / Хилл Фрэнсис. - СПб. : Питер, 2002.
3. Андре Ламот. Программирование игр для Windows / Ла-мот Андре. - M. : Вильямс, 2003.
4. АндреЛамот. Программирование трехмерных игр для Windows / Ламот Андре. - М. : Вильямс, 2004.
5. ЭдвардЭйнджел. Интерактивная компьютерная графика / Эйнджел Эдвард. - М. : Вильямс, 2001.
6. Форсайт Д Компьютерное зрение. Современный подход / Д. Форсайт, Ж. Понс. - М. : Вильямс, 2004.
7. Шапиро Л. Компьютерное зрение / Л. Шапиро, Дж.Сток-ман. - М. : БИНОМ Лаборатория знаний, 2006.
8. GaryBradski, Adrian Kaehler. Learning OpenCV. Computer vision with the OpenCV library. - O'Reilly, 2008.
Сайты
http://opengl.org.ru
http://openal.org
http://robocraft.ru/page/opencv/
http://opencv.willowgarage.com /documentation/cpp/
index.html