Разработка приложения для трёхмерной реконструкции сцены с помощью RGB-D камеры
Трёхмерная реконструкция сцены с использованием RGB-D камеры. Программные продукты для трёхмерной реконструкции. Создание полигональной модели алгоритмом KinFu. Псевдокод алгоритма вычисления цвета вершин. Архитектура программы и особенности реализации.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.01.2016 |
Размер файла | 2,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 1. Трёхмерная реконструкция сцены с использованием RGB-D камеры
- 1.1 RGB-D камера
- 1.2 KinectFusion
- 1.3 Программные продукты для трёхмерной реконструкции
- 1.4 Проблемы при вычислении цвета вершин
- 1.5 Выбор алгоритмов для реализации
- 2. Алгоритмы трёхмерной реконструкции
- 2.1 Создание полигональной модели алгоритмом KinFu
- 2.2 Вычисление цвета вершин полигональной модели
- 2.3 Алгоритм Q.-Y. Zhou и V.Koltun для вычисления цвета вершин модели
- 2.3.1 Коррекция положения камеры
- 2.3.2 Коррекция наложения изображения
- 2.3.3 Преобразование изображений
- 2.3.4 Псевдокод алгоритма вычисления цвета вершин
- 2.4 Отбор изображений
- 3. Архитектура программы и особенности реализации
- 3.1 Выбранные инструменты
- 3.2 Архитектура приложения
- 3.3 Процесс реконструкции
- 3.3.1 Инициализация и геометрическая реконструкция
- 3.3.2 Вычисление цвета вершин
- 3.4 Пример реконструкции
- Заключение
- Список использованных источников
- Приложения - том 2
Введение
Трёхмерная реконструкция и трёхмерное сканирование в настоящее время быстро развиваются и находят широкое применение в робототехнике, медицине, производстве, 3D печати и 3D моделировании. Распространению применения трёхмерных реконструкций способствует повышение доступности устройств, пригодных для трёхмерного сканирования и печати, и применение новых алгоритмов трёхмерной реконструкции.
Существует множество различных технологий, применяемых для трёхмерного сканирования. В основном применяются лазерные сканеры, позволяющие проводить реконструкцию с высокой точностью. Но лазерные сканеры являются дорогими устройствами, пока недоступными для обычных пользователей. Появление Microsoft Kinect - устройства, совмещающего в себе обычную RGB (Red-Green-Blue) камеру и сенсор глубины (Depth), использующий инфракрасный свет для получения информации о расстоянии до поверхности объекта - существенно расширило круг пользователей, имеющих возможности для трёхмерного сканирования.
Распространение устройств, подобных Kinect, привело к повышению интереса к трёхмерному сканированию и к развитию новых алгоритм трёхмерной реконструкции. Несмотря на многочисленные недостатки сенсора, такие как невозможность его использования вне помещений, ограниченная дистанция применения, высокая погрешность измерений, невысокая стоимость привела к его широкому распространению.
В связи с более высокой доступностью данных камер появились приложения, позволяющие использовать их для трёхмерной реконструкции. Несмотря на простоту пользовательского интерфейса и быстроту работы, эти приложения имеют ряд общих недостатков. Будучи сфокусированными главным образом на геометрической реконструкции, они уделяют меньше внимания точности передачи цвета сцены или объекта. Такие факторы как неточность наложения изображений на трёхмерную модель, искажения и размытия изображения отражаются на визуальном качестве реконструкции.
Целью данной работы является разработка приложения для трёхмерной реконструкции сцены с помощью RGB-D камеры. Приложение должно использовать поток снимков глубины для построения полигональной модели сцены и поток цветных RGB снимков для реконструкции цвета вершин полигональной модели. В программе будет применён недавно опубликованный алгоритм Q.-Y. Zhou и V. Koltun [13], позволяющий получить более качественную реконструкцию цвета по сравнению с существующими аналогами.
Задачи данной работы:
· Изучение существующих решений, программных продуктов, применяющихся для трёхмерной реконструкции с помощью RGB-D камеры;
· Выбор технических средств, алгоритмов и инструментов разработки программы;
· Реализация программы для трёхмерной реконструкции сцены:
o Реализация взаимодействия с RGB-D камерой;
o Реализация геометрической реконструкции сцены;
o Реализация алгоритма для вычисления цвета вершин модели;
o Реализация пользовательского интерфейса;
· Разработка технической документации к программе.
В первой главе данной работы описан процесс трёхмерной реконструкции с помощью RGB-D камер, рассмотрены программные продукты и алгоритмы, применяемые для трёхмерной реконструкции с помощью таких устройств. Во второй главе описаны алгоритмы, применяемые в разрабатываемом приложении: алгоритм KinectFusion и алгоритм Zhou&Koltun. В третьей главе дано описание реализации - использованные инструменты, архитектура и описание приложения и процесса трёхмерного сканирования с его помощью.
1. Трёхмерная реконструкция сцены с использованием RGB-D камеры
1.1 RGB-D камера
Рисунок 1. RGB-D камера Asus Xtion Pro Live. A- IR-прожектор, B - RGB-камера, C - IR-камера [5]
трехмерный реконструкция полигональный программа
Реконструкция сцены с использованием Red-Green-Blue-Depth (RGB-D) камер производится путём обработки данных поступающих с сенсора глубины и цветной камеры.
Сенсор глубины работает следующим образом: прожектор излучает шаблон из инфракрасных точек на поверхность объекта. Инфракрасная камера создаёт снимок и преобразует его в карту глубины, в которой яркость каждого пиксела показывает расстояние от камеры до поверхности объекта.
Рисунок 2. Инфракрасный шаблон точек, излучаемый прожектором камеры [5].
С использованием внутренних параметров камеры (фокусного расстояния) снимок глубины преобразуется в облако точек, в котором каждой точке соответствуют координаты в 3D пространстве. Путём триангуляции облако точек преобразуется в полигональную модель. После наложения цветных изображений на полигональную модель получается трёхмерная реконструкция сцены.
Данная технология не лишена недостатков. Во-первых, сенсор глубины работает на ограниченном диапазоне от 0,5 м до 3,5-4 м. Во-вторых, погрешность измерения растёт по мере удалённости от камеры и составляет около 3 см на расстоянии 4 м [5]. Эти факторы сильно ограничивают применимость алгоритмов реконструкции, основанных на использовании небольшого количества снимков. Для реконструкции с использованием таких устройств применяются алгоритмы, обрабатывающие последовательный поток снимков глубины, что позволяет компенсировать погрешность измерения большим количеством данных.
1.2 KinectFusion
Алгоритм KinectFusion разработан Microsoft Research и опубликован в 2011 году, вскоре после появления Kinect [4]. В опубликованной статье описан алгоритм для трёхмерной реконструкции сцены по потоку снимков глубины и использовании реконструкции для проектирования взаимодействия модели с пользователем. Алгоритм представляет сканируемое пространство как воксельный объём, внутри которого проводится реконструкция. Качество геометрической реконструкции зависит от разрешения воксельной сетки, разбивающей объём на отдельные воксели. После инициализации на первом снимке глубины проводится отслеживание смещения камеры относительно реконструируемой модели. KinectFusion не использует для геометрической реконструкции цветные снимки и обрабатывает только данные глубины. Алгоритм обновляет реконструируемую модель по потоку снимков глубины в реальном времени с помощью параллельных вычислений на графическом процессоре (GPU).
KinectFusion реализован в составе Kinect SDK и несовместим с другими RGB-D камерами. После публикации алгоритма появилось несколько отдельных реализаций, наиболее известной из которых является KinFu. KinFu [8] входит в состав Point Cloud Library - многофункциональной кроссплатформенной библиотеки для работы с облаками точек. KinFu позволяет использовать для реконструкции сцены другие устройства, такие как Asus Xtion Pro Live и PrimeSense Carmine. Данная реализация алгоритма используется в различных исследованиях и проектах, например в HouseScan [3] - полуавтоматической системе сканирования многокомнатных помещений.
В PCL имеется пользовательский интерфейс для KinFu (рис.3), но он обладает множеством недостатков. Во-первых, интерфейс разделён на 4 окна, которые могут перекрываться, если разрешение экрана недостаточно высокое. Во-вторых, управлять можно только вводом с клавиатуры, который действует не во всех окнах. В-третьих, в получаемой полигональной модели вершины дублируются для каждого полигона, что приводит к увеличению списка вершин в 3-4 раза. Пользователь также не может поменять в интерфейсе разрешение камеры или отключить автоматическое изменение баланса белого и экспозиции, из-за которых возникает дополнительная разница между изображениями. И, наконец, параметры запуска, такие как размер пространства, интеграция цвета, необходимо указывать при запуске в командной строке.
Рисунок 3. Интерфейс PCL KinFu.
В PCL есть расширение KinFu - KinFu Large Scale, которое позволяет расширить область сканирования путём сдвига воксельного объёма. Но дополнительные вычисления замедляют скорость обработки снимков глубины, а для получения полигональной модели и её текстурирования необходимо запускать две дополнительные программы kinfu_largeScale_mesh_output и kinfu_largeScale_texture_output.
1.3 Программные продукты для трёхмерной реконструкции
Программные продукты, разработанные для трёхмерного сканирования c использованием RGB-D камер, имеют много сходств в организации процесса сканирования и построении пользовательского интерфейса, поскольку основаны на алгоритме KinectFusion. В качестве примера таких продуктов будут рассмотрены Scanect [11] и RecFusion [10].
Процесс сканирования проходит следующим образом: после первоначальной настройки параметров (объём сканируемого пространства, детализация) производится процесс сканирования: камера плавно перемещается пользователем, охватывая поверхность сканируемого объекта. Полигональная модель строится в режиме реального времени, используя поступающие с камеры снимки глубины для обновления. В программе визуализируется текущая карта глубины и реконструируемая модель. Отслеживается смещения камеры относительно предыдущего положения. После геометрической реконструкции производится вычисление цвета вершин модели. Пользователю предлагается экспорт полученной модели в файл. Дополнительно есть функции для заполнения дыр в полигональной модели, обрезки, сглаживания и подготовки к 3D печати.
Программные продукты являются платными (стоимость лицензии на одного пользователя Scanect или RecFusion - 99€), но обладают широкой функциональностью и удобным пользовательским интерфейсом. Программы также позволяют выполнять вычисления как на GPU, так и на CPU.
1.4 Проблемы при вычислении цвета вершин
У рассмотренных ранее программ для трёхмерной реконструкции имеются несколько недостатков при вычислении цвета модели. Выражаются они в том, что цвет реконструируемой модели становится сильно смазанным, а части изображений одних объектов накладываются на поверхность других объектов. Возникают они по следующим причинам:
Во-первых, цветное изображение и карта глубины не делаются одновременно, а производятся с разницей в 10-100 миллисекунд, поэтому точку съёмки цветного изображения нужно корректировать для корректного наложения. Во-вторых, неточности реконструкции, неизбежно возникающие из-за погрешности измерений и алгоритмических преобразований, также ухудшает качество наложения. В-третьих, при сканировании возможно получение смазанных или искажённых изображений, которые, если их не отбросить, перенесут искажения на реконструкцию. И, наконец, в программах нет прямой регулировки разрешения снимков камеры. Программы настроены на работу с разрешением QVGA (320х240) или VGA(640x480), а, например, максимально возможное разрешение цветного снимка для камеры Asus Xtion Pro Live (1280х1024)[5] не используется, что приводит к меньшей детализации.
1.5 Выбор алгоритмов для реализации
Приложение, которое необходимо разработать, должно производить геометрическую реконструкцию сцены и вычисление цвета вершин модели. Для геометрической реконструкции будет использована реализация алгоритма KinectFusion в библиотеке PCL - KinFu [8] (без модификации largeScale), так как он позволяет использовать для сканирования различные RGB-D камеры, совместимые с OpenNI [7]. Для вычисления цвета вершин модели будет использован алгоритм Q.-Y.Zhou и V.Koltun [13], который устраняет недостатки реконструкции цвета, характерные для аналогичных приложений, путём проведения коррекции положения камеры при съёмке изображения и коррекции наложения изображения на полигональную модель
Выбранные алгоритмы и средства будут использованы для реализации приложения, обладающего следующей функциональностью:
· Первичная настройка (выбор разрешения съёмки, размера сцены);
· Получение данных с RGB-D камеры - снимка глубины и цветного изображения;
· Последовательная трёхмерная реконструкция сцены по потоку изображений с камеры с контролем перемещения камеры относительно сцены;
· Вычисление цвета вершин полигональной модели на основе набора цветных снимков, полученных в процессе сканирования;
· Визуализация полученной модели;
· Сохранение модели в файл формата PLY [9].
·
2. Алгоритмы трёхмерной реконструкции
Для создания трёхмерной реконструкции сцены или объекта необходимо создать его трёхмерную модель и вычислить цвет её вершин. Для геометрической реконструкции будет использоваться алгоритм KinectFusion, реализованный в библиотеке PCL как KinFu.
2.1 Создание полигональной модели алгоритмом KinFu
Алгоритм KinFu производит постепенную геометрическую реконструкцию сцены по потоку снимков глубины. Алгоритм состоит из следующих основных шагов:
1. Получение снимка глубины с RGB-D камеры и его конвертация в облако точек. Для конвертации используются параметры камеры:
- фокусные расстояния камеры;
- координаты центра изображения.
Координаты каждой точки из облака рассчитываются по формуле:
где - координаты на снимке глубины, - глубина в миллиметрах (в KinFu - 16-битное число). Нормалью для каждой вершины в облаке является векторное произведение двух векторов: вектора, соединяющего текущую вершину с вершиной, расположенной над ней на снимке глубины, и вектора, соединяющего текущую вершину с вершиной, расположенной справа на снимке глубины.
2. Отслеживание перемещения камеры относительно реконструируемой модели. На этом шаге необходимо новое облако точек A совместить с текущей реконструкцией. Для этого текущая реконструкция переводится в формат облака точек . С помощью алгоритма Iterative-Closest-Points (ICP) итеративно вычисляется матрица преобразования (размерность ), минимизирующая квадрат расстояний между вершинами преобразованного облака и ( и представлены как матрицы , где - количество вершин). В KinFu применяется модификация алгоритма ICP, устойчивая к погрешностям и делающая предположение, что углы поворота камеры являются небольшими, позволяя принять и [8]. Упрощенный алгоритм позволяет ускорить вычисления, но не находит решения при больших углах поворота. Полученная матрица используется для определения текущего положения камеры.
3. Интеграция нового облака точек в текущую реконструкцию. Текущая реконструкция представлена в виде трёхмерного равномерного воксельного пространства ограниченного объёма. В каждом вокселе хранится значение, называемое Truncated Signed Distance Function (TSDF). Это значение показывает скользящее среднее расстояния от центра вокселя до предполагаемой поверхности объекта. Значение функции отрицательное, когда воксель находится за поверхностью сцены, и положительное, когда воксель находится перед поверхностью. Через те воксели, в которых функция меняет знак, проходит поверхность реконструируемой сцены. Преобразованное новое облако точек, полученное на предыдущем шаге, используется для обновления значений TSDF.
4. Визуализация текущей реконструкции. Визуализация используется для контроля над процессом реконструкции и для получения текущей карты глубины, которая используется алгоритмом ICP для оценки смещения камеры. Визуализация представляется в виде двумерного изображения, каждый пиксель которого вычисляется путём прохождения луча через воксельный объём до ближайшего вокселя (raycasting), в котором функция TSDF меняет знак. В этой точке вычисляются координаты и нормаль, по которым генерируется трёхмерное изображение.
5. Получение готовой реконструкции. Воксельный объём преобразуется в облако точек с нормалями и триангулируется для получения полигональной модели. Для триангуляции в KinFu применяется алгоритм Marching Cubes [6].
В реализации KinFu в PCL все шаги алгоритма выполняются параллельно на графическом процессоре, что позволяет достичь скорости, приемлемой для реконструкции в реальном времени.
Результатом работы данного алгоритма является трёхмерная полигональная модель, состоящая из списка вершин и списка полигонов, задаваемых тремя точками.
2.2 Вычисление цвета вершин полигональной модели
Для вычисления цвета могут быть использованы различные подходы. Вычисление цвета может проводиться одновременно с геометрической реконструкцией, интегрируя цвет в каждом вокселе. Другой подход использует сохранённые при сканировании снимки и соответствующие им положения камеры для последующего их наложения на готовую полигональную модель. В PCL реализованы и первый, и второй подход. Но во втором случае вычисляются текстурные координаты, а не сам цвет, следовательно, на каждый полигон накладывается только часть одного из изображений, и реализован второй подход только в KinFu LargeScale.
Алгоритм Zhou&Koltun [13], описанный далее, использует второй подход, но вычисляет именно цвет вершин, а не текстурные координаты.
2.3 Алгоритм Q.-Y. Zhou и V.Koltun для вычисления цвета вершин модели
Алгоритм Zhou и Koltun наложения цветных изображений, сделанных в процессе сканирования, на полигональную модель с вычислением цвета для каждой вершины подробно изложен в статье [13]. Целью алгоритма является повышение точности наложения изображения на модель. Для этого применяется два подхода, выполняемых одновременно: коррекция положения камеры (Camera pose optimization) и коррекция изображения (Non-rigid correction).
На вход алгоритма подаётся полученная в результате сканирования полигональная модель и набор цветных изображений. Для каждого изображения в процессе сканирования записываются следующие параметры: вектор смещения камеры в системе координат модели , матрица поворота камеры (размерность - ), фокусное расстояние камеры.
Далее используются следующие обозначения:
· - исходная полигональная модель, задаваемая списком 3D вершин и списком полигонов.
· - множество вершин полигональной модели .
· - набор цветных снимков, - отдельное изображение. .
· - матрица преобразования вершин модели для изображения . Матрица состоит из вектора смещения и матрицы поворота камеры , размерность матрицы - :
- исходная матрица преобразования, изменяется в процессе работы алгоритма.
· - вершина полигональной модели , задаваемая координатами в 3D пространстве. .
· - набор вершин, спроецированный на изображение .
· - набор изображений, на который проецируется вершина .
· - цвет вершины p, полученный путём усреднения цвета проекций вершины на все изображения. В алгоритме для расчёта отклонений используются только градации серого, для чего все изображения преобразовываются в grayscale формат.
· - цвет проекции (оттенок серого) вершины на изображение с использованием матрицы преобразования .
2.3.1 Коррекция положения камеры
Задачей данной части алгоритма является коррекция матрицы для каждого изображения из набора .
Задача формулируется как задача наименьших квадратов для каждого изображения:
(1)
Где
подробнее представляется как , где функция - преобразование вершины матрицей , а функция - проекция вершины на изображение :
- фокусные расстояния камеры, , - координаты центра изображения.
Для решения задачи применяется метод Гаусса-Ньютона. Для каждой матрицы производится итерационное вычисление вектора , выражающего частичное изменение матрицы. Параметры определяют смещение, а параметры - поворот. Требуемая коррекция матрицы рассчитывается по формуле (3):
(3)
Шесть первых значений вектора образуют вектор . Вектор вычисляется следующим образом:
- вектор из 6 элементов, все элементы которого равны нулю.
Обновление происходит на каждой итерации:
(4)
где - вектор на предыдущей итерации, является решением уравнения:
(5)
где
- вектор-столбец отклонений, .
- матрица Якоби для функции r, вычисляемая по следующей формуле:
(6)
- транспонированная матрица .
- градиент функции, вычисляемый путём применения нормализованного фильтра Щара к изображению (см. 3.3.3).
- матрица Якоби функции . Размерность матрицы - .
- матрица Якоби функции . Размерность матрицы -.
Размерность матрицы - ( - количество вершин в )
вычисляется перед каждой итерацией по формуле:
(7)
Где .
После вычисления вектор обновляется. На основе обновлённого вектора рассчитывается новая матрица по формуле (3), которая используется на следующей итерации алгоритма.
На каждой итерации выполняется решение систем линейных уравнений с 6-ю переменными (n - количество изображений, 6 - количество параметров в векторе ).
2.3.2 Коррекция наложения изображения
В данной части алгоритма производится коррекция наложения изображения. Коррекция представляют собой деформацию сетки изображения . - прямоугольная равномерная сетка, наложенная на изображение (размер сетки в данной реализации ячеек - 99 вершин). Для каждой вершины сетки функция деформации определяется как
(8)
где - двумерный вектор. Для всех значений функции u F(u) определяется как
(9)
Где - коэффициент билинейной интерполяции по сетке для . Для любого ненулевыми могут быть не более четырёх коэффициентов.
Задача наименьших квадратов при добавлении деформации изображения переформулирована следующим образом:
(10)
Где - основная задача, а - регуляризатор. Параметр регуляризации .
К вектору добавляются дополнительные параметры для всех Новое уравнение выглядит следующим образом:
(11)
где
- единичная матрица размерности , в которой первые 6 единиц заменены на 0;
рассчитывается как объединение в каждой строке и для всех .
Обновлённая формула :
Формула :
Матрица является разреженной, так как в каждой строке ненулевыми могут быть не более 14 элементов (6 в и 8 в , так как для любых количество ненулевых коэффициентов не превышает 4). Поэтому возможно использование алгоритмов, учитывающих разреженность матриц, что позволит ускорить вычисления.
При совместной оптимизации положения камеры и коррекции изображения на каждой итерации производится решение систем линейных уравнений с неизвестными. В данной реализации будет проводиться 50 итераций метода Гаусса-Ньютона
2.3.3 Преобразование изображений
В алгоритме Zhou&Koltun при вычислении отклонений цвета используется изображение, переведённое в градации серого. В данной реализации используется следующая формула для перевода RGB-значения пикселей в градации серого:
Для вычисления градиента функции к grayscale изображению применяется фильтр Щара (Scharr filter [12]). Для расчёта градиента по X и по Y для каждого пикселя применяется следующие ядра:
2.3.4 Псевдокод алгоритма вычисления цвета вершин
Вход: Полигональная модель , набор изображений , матрицы преобразования .
Фокусные расстояния , , координаты центра изображения .
Выход: RGB значения цвета для каждой вершины .
1. определить видимые вершины для каждого изображения ;
2. преобразовать изображения в градации серого, вычислить градиенты по и ;
3. - нулевой вектор для всех , где - номер камеры (изображения);
4. for k from 1 to <количество итераций> do
Вычислить для каждой вершины ;
for each do
for each in do
Вычислить: (
Добавить строку в матрицу ;
Транспонировать матрицу .
A =
Найти решение уравнения ;
Обновить вектор для камеры: ;
Обновить матрицы и функции деформации.
5. Для каждой вершины вычислить значения RGB, используя скорректированные матрицы и деформации изображения.
Цвет проекции вершины вычисляется по координатам с использованием билинейной интерполяции по ближайшим пикселям изображения. Окончательный цвет вершин рассчитывается как средний по всем проекциям на изображения .
2.4 Отбор изображений
Для отбора цветных снимков в процессе сканирования применяется алгоритм Crete [1] определения размытия изображения. На каждом временном интервале процесса сканирования из всех цветных изображений отбирается одно изображение , для которого значение наименьшее. Значение рассчитывается по алгоритму:
Вход: Изображение F- переведённое в градации серого изображение . Размер изображения .
Выход: значение .
1. Вычисление изображения размытого по и : , , где - фильтр:
2. Вычисление
3. Вычисление :
4. Суммирование:
5. Вычисление
В данной реализации интервал - 2 секунды.
3. Архитектура программы и особенности реализации
3.1 Выбранные инструменты
Для реализации программы были использованы следующие инструменты и программные средства:
· Для взаимодействия с RGB-D камерой используется OpenNI Framework 2.
· Для геометрической реконструкции сцены используется KinFu - реализация алгоритма KinectFusion в библиотеке PCL.
· Для построения пользовательского интерфейса используется Qt Framework 5.1 и OpenGL.
· Для операций с матрицами и решения систем уравнений в алгоритме вычисления цвета вершин, включая операции с разреженными матрицами, используется библиотека Eigen [2].
Приложение написано на языке программирования C++ в среде разработки Microsoft Visual Studio 2012.
3.2 Архитектура приложения
Рисунок 4. Диаграмма классов приложения
Приложение состоит из трёх основных компонентов:
1. Интерфейс приложения, представленный классами Scanelium и glWidget:
· Scanelium - интерфейс приложения. Содержит обработчики событий и обеспечивает взаимодействие с пользователем.
· glWidget - интерфейсный объект для отображения 3D графики в интерфейсе. Отображает облако точек с камеры на этапе инициализации, текущее состояние модели на этапе сканирования, полученную трёхмерную модель после сканирования и расцвеченную трёхмерную модель после выполнения алгоритма вычисления цвета вершин.
2. Компонент геометрической реконструкции, состоящий из классов KinfuController, ONICapture и ImageProcessThread:
· KinfuController предназначен для управления процессом трёхмерного сканирования, проводит инициализацию, запуск и получение реконструкции. KinfuController использует компонент KinfuTracker, который является реализацией алгоритма KinectFusion. Класс запускается в отдельном потоке от интерфейса.
· ONICapture предназначен для взаимодействия с RGB-D камерой. Проводит инициализацию OpenNI и получает снимки глубины и цветные изображения с камеры.
· ImageProcessThread проводит отбор цветных снимков в отдельном потоке. Отбор производится путём выбора изображений с наименьшим уровнем размытия (см. 2.4). Запускается в отдельном от KinfuController потоке, чтобы не влиять на скорость геометрической реконструкции.
3. Компонент вычисления цвета вершин полигональной модели, представленный классами ColorMapper и CameraThread:
· ColorMapper содержит реализацию алгоритма Zhou&Koltun. Так как на каждой итерации алгоритма системы уравнений для каждого изображения вычисляются независимо, вычисления распределяются по нескольким потокам с помощью класса CameraThread.
· CameraThread проводит вычисление матриц и решение уравнений для одного изображения. Используются компоненты библиотеки Eigen SparseMatrix для представления матрицы и SimplicialCholesky для решения уравнения (11).
Режимы работы программы (ProgramState):
1. INIT - выбор параметров сканирования сцены, отображение текущего облака точек с устройства для выбора необходимого расположения камеры.
2. KINFU - выполнение сканирования сцены по заданным параметрам. Процесс сканирования можно завершить или начать заново. Результатом сканирования является трёхмерная модель и набор цветных изображений с информацией о положении камеры для каждого снимка.
3. COLOR - просмотр полученной на предыдущей стадии модели и запуск алгоритма вычисления цвета вершин.
4. FINAL - просмотр итоговой полигональной модели. Сохранение итоговой модели в файл формата PLY.
3.3 Процесс реконструкции
3.3.1 Инициализация и геометрическая реконструкция
Процесс реконструкции сцены с помощью данного приложения производится следующим образом: подключив RGB-D камеру к компьютеру, пользователь запускает приложение. На первоначальном этапе пользователь имеет возможность настроить параметры реконструкции, такие как размер сцены, точность сканирования, разрешение снимков глубины и цветных изображений. Также пользователь может указать, как расположена камера относительно сцены в момент начала сканирования, например, можно указать её начальное расположение в центре сканируемой сцены, либо на боковой грани. Во втором случае камера будет направлена на сцену с центра задней грани. Далее пользователь запускает процесс сканирования. На этой стадии компонент KinfuController выполняет следующие действия:
· Загрузка в KinFu нового снимка глубины;
· Получение от KinFu визуализации текущей трёхмерной реконструкции;
· Сохранение цветных снимков.
Во время сканирования пользователь видит визуализацию и использует её для слежения за процессом реконструкции, чтобы проконтролировать охват сцены. На визуализацию дополнительно наложена карта глубины и красноватым цветом подсвечены участки, которые не могут быть просканированы при текущем положении камеры (рис. 5) (поверхность слишком далеко, слишком близко, поверхность обрывается, либо присутствуют другие помехи).
Рисунок 5. Процесс реконструкции
При сканировании следует соблюдать следующие правила:
1. Перемещать камеру необходимо плавно, без рывков, так как алгоритм ICP, используемый в KinFu, не рассчитан на быстрое перемещение. Плавное перемещение также помогает избежать размытия цветных изображений, получаемых параллельно с реконструкцией.
2. Необходимо избегать ситуаций, когда в кадр попадает только плоская стена, так как это может привести к неверному определению смещения;
Когда пользователь охватил все интересующие его области сцены, он может прервать сканирование. На этом этапе он получает трёхмерную полигональную модель и набор цветных снимков, для которых известно приблизительное положение камеры. Модель можно осмотреть перед переходом к следующему шагу.
3.3.2 Вычисление цвета вершин
Для полученной на предыдущем шаге модели, на данном этапе производится вычисление цвета вершин. Пользователь может указать количество итераций алгоритма Zhou&Koltun и запустить вычисление.
Вычисление цвета происходит в отдельном от интерфейса потоке, поэтому пользователь может осматривать предварительную бесцветную модель, пока выполняется алгоритм. Внизу интерфейса показан статус выполнения алгоритма, что позволяет следить за выполнением. Начало алгоритма (определение видимых вершин для каждого изображения) и начало итерации (вычисление по формуле (7)) не выполняется параллельно. Вычисление матриц и решение уравнения для одного изображения выполняются в отдельных потоках (максимально 8 одновременных потоков - одновременно обрабатываемых изображений).
Цветную полигональную модель, полученную после выполнения алгоритма, пользователь может осмотреть и сохранить в файл формата PLY, содержащий данные о координатах и цвете вершин и список полигонов.
3.4 Пример реконструкции
Рисунок 6. Реконструкция сцены разработанной программой.
Параметры реконструкции:
· В реконструируемой сцене содержится несколько объектов, в том числе с глянцевыми поверхностями.
· Длительность сканирования - 34-35 секунд.
· Объём сканируемого пространства - 1 .
· RGB-D камера Asus Xtion Pro Live. Разрешение цветного изображения 1280х1024, разрешение снимка глубины - 640х480.
· Количество вершин - 469982, количество полигонов - 923122, количество цветных изображений - 17, количество итераций алгоритма Zhou&Koltun - 50.
Рисунок 7. Сравнение модели до и после работы алгоритма Zhou&Koltun. Слева - 0 итераций, в центре - 25 итераций, справа - 50 итераций.
Сравнение визуального качества трёхмерной реконструкции разработанной программы и реконструкций Scanect и RecFusion приведено в приложении Д.
Заключение
В работе приведён обзор алгоритмов и технологий трёхмерной реконструкции с помощью RGB-D камер, программных продуктов для трёхмерного сканирования и нового алгоритма повышающего качество реконструкции.
Результатом работы является программа, позволяющая проводить трёхмерную реконструкцию сцены по снимкам глубины и изображениям, поступающим с RGB-D камеры. Создан пользовательский интерфейс, упрощающий проведение геометрической реконструкции с помощью KinFu, полностью реализован недавно опубликованный алгоритм вычисления цвета вершин Zhou&Koltun, позволяющий улучшить визуальное качество трёхмерной модели, разработана техническая документация к программе.
Программа обладает большим потенциалом расширения функциональности. Добавление дополнительных функций, таких как коррекция модели, обрезка, подготовка модели к 3D печати, экспорт модели в дополнительные форматы файлов, существенно расширит применимость приложения к современным задачам трёхмерной реконструкции.
Среди первоочередных задач по улучшению программы - оптимизация работы KinFu , достижение максимального распараллеливания алгоритма Zhou&Koltun с использованием вычислений на GPU, повышение устойчивости применяемого в KinFu алгоритма ICP и улучшение интерфейса. Эти улучшения позволят сделать процесс создания трёхмерной реконструкции более быстрым и удобным.
Список использованных источников
1. Crete, F. The Blur Effect: Perception and Estimation with a New No-Reference Perceptual Blur Metric // SPIE Electronic Imaging Symposium Conf Human Vision and Electronic Imaging, Jan 2007, San Jose, United States. XII, pp.EI 6492-16.
2. Eigen - C++ template library for linear algebra [Электронный ресурс]
URL: http://eigen.tuxfamily.org/index.php?title=Main_Page Дата обращения: 20.05.15.
3. Hambuchen, N. HouseScan: Building-scale interior 3D reconstruction with Kinect Fusion. Master's Thesis, 2014. [Электронный ресурс]. URL: http://www.doc.ic.ac.uk/teaching/distinguished-projects/2014/n.hambuechen.pdf Дата обращения: 1.02.2015.
4. Izadi, S., Newcombe, R. KinectFusion: real-time 3D reconstruction and interaction using a moving depth camera // UIST'11, 2011.
5. Litomisky, K. Consumer RGB-D Cameras and their applications, 2012. [Электронный ресурс]. URL : http://alumni.cs.ucr.edu/~klitomis/files/RGBD-intro.pdf Дата обращения: 1.02.15.
6. Lorensen, W., Cline, H. Marching cubes: A high resolution 3D surface construction algorithm // ACM Siggraph Computer Graphics, 1987, vol. 21.
7. OpenNI [Электронный ресурс] URL: https://en.wikipedia.org/wiki/OpenNI Дата обращения: 20.04.15.
8. Pirovano, M. Kinfu - an open source implementation of Kinect Fusion + case study: implementing a 3D scanner with PCL, 2012. [Электронный ресурс]. URL: http://homes.di.unimi.it/~pirovano/pdf/3d-scanning-pcl.pdf Дата обращения: 1.02.15.
9. PLY - Polygon File Format [Электронный ресурс] URL: https://en.wikipedia.org/wiki/PLY_(file_format) Дата обращения: 20.04.15
10. RecFusion: Real-Time 3D Reconstruction [Электронный ресурс]. URL: http://www.recfusion.net/ Дата обращения: 1.02.15.
11. Scanect 3D Scanning Software by Occupital [Электронный ресурс]. URL: http://skanect.occipital.com/ Дата обращения: 1.02.15.
12. Sobel operator - Scharr operator [Электронный ресурс] URL: http://en.wikipedia.org/wiki/Sobel_operator#Alternative_operators Дата обращения: 20.05.15.
13. Zhou, Q.-Y., Koltun, V. Color map optimization for 3D reconstruction with consumer depth cameras // SIGGRAPH'14.
Размещено на Allbest.ru
...Подобные документы
Изучение моделирования и визуализации трехмерных динамических сцен в пакете 3Ds Max на примере создания анимированной сцены, содержащей мышь, стул, чашку, чайную ложку и море. Создание материалов, камер и анимации, постановка света и визуализация сцены.
курсовая работа [1,2 M], добавлен 26.02.2012Разработка программы на платформе Microsoft Vusial С#, реализующая ряд задач: реализация движения 3D-модели и освещения сцены, изменение вида камеры с третьего на первый и обратно при помощи клавиатуры, запись работы с моделью в видео файл фомата *.avi.
курсовая работа [407,9 K], добавлен 07.07.2012Программирование с использованием библиотеки ОреnGl: возможности, работа с матрицами, синтаксист команд, освещение, спецификация материалов, создание эффекта тумана. Разработка визуализации трехмерной сцены. Информационное и программное обеспечение.
курсовая работа [39,2 K], добавлен 23.06.2011Программирование приложения с использованием библиотеки OpenGL и функции для рисования геометрических объектов. Разработка процедуры визуализации трехмерной сцены и интерфейса пользователя. Логическая структура и функциональная декомпозиция проекта.
курсовая работа [1,1 M], добавлен 23.06.2011Функциональные возможности библиотеки OpenGL. Разработка процедуры визуализации трехмерной сцены, интерфейса пользователя и подсистемы управления событиями с целью создания приложения для построения динамического изображения 3D-модели объекта "Самолет".
курсовая работа [1,7 M], добавлен 28.06.2011Разработка с использованием приложения Mathcad алгоритма и программы решения нелинейного уравнения методами касательных, половинного деления и хорд. Решение с помощью ее заданных нелинейных уравнений. Создание графической иллюстрации полученных решений.
курсовая работа [665,7 K], добавлен 22.08.2013Принципы программирования и приоритеты использования библиотеки OреnG1, ее архитектура, описание математического аппарата и проекции. Разработка процедуры визуализации трехмерной сцены, подсистемы управлениями событиями и руководства пользователя.
курсовая работа [1,0 M], добавлен 26.06.2011Разработка и практическая апробация программы для соответствия поставленным требованиям: реализация трассировки лучей с просчетом теней, освещения, отражения, преломления лучей, что является несомненным достоинством данной спроектированной программы.
курсовая работа [662,7 K], добавлен 14.04.2011Принципы и основные закономерности конвертации моделей и экспорт в 3Ds Max. Постановка сцены и установка источников света. Используемые текстуры и материалы, требования к ним. Описание основных параметров рендеринга с использованием плагина V-Ray.
реферат [2,1 M], добавлен 20.12.2015Обзор стрелковых тренажеров, их достоинств и недостатков. Выбор веб-камеры, разработка общего алгоритма программы. Реализация спускового крючка. Создание пристрелки для настройки тренажера. Линейная аппроксимация, нахождение координат точки прицеливания.
дипломная работа [3,4 M], добавлен 26.12.2014Измерение и определение количества цвета с помощью электронной схемы. Анализ принципа действия генераторных и параметрических датчиков цвета. Разработка программы для управления системой определения цвета. Описания модуля датчика распознавания цвета.
контрольная работа [489,4 K], добавлен 21.04.2015История возникновения и использования трёхмерной компьютерной графики в рекламе. 3D-технологии и кинематограф. Способы создания трёхмерных сцен. Проектирование рекламного выставочного стенда. Экономический расчет затрат и цены рекламного продукта.
дипломная работа [67,0 K], добавлен 26.04.2014Математический алгоритм вычисления корней нелинейного уравнения и его решение методом касательных. Особенности программной реализации решения таких уравнений. Процедура подготовки и решения задачи на ЭВМ, характеристика алгоритма и структуры программы.
курсовая работа [96,6 K], добавлен 02.06.2012Построение динамической трехмерной сцены, включающей заданные тело и поверхность определенного вида средствами графической библиотеки. Наложение текстур на тела, поверхности с помощью функции SetupTextures. Графическое представление тела с текстурой.
курсовая работа [582,9 K], добавлен 24.12.2010Разработка трехмерной модели приложения "Гоночный автомобиль" на языке С++ с использованием библиотеки OpenGL и MFC, создание программы в среде Visual Studio 6.0. Информационное обеспечение, логическая структура и функциональная декомпозиция проекта.
курсовая работа [3,9 M], добавлен 29.06.2011Рассмотрение методов прямоугольников и трапеций как способов вычисления определенных интегралов. Характеристика графика зависимости погрешности от числа разбиений N. Создание приложения по вычислению интеграла с помощью методов приближенного вычисления.
курсовая работа [1,6 M], добавлен 20.06.2012Разработка структур данных. Иерархия объектов в пространстве. Пользовательские типы данных, преимущества, недостатки подхода. Разработка графических алгоритмов: управление обзором сцены, отрисовка модели, эффект тумана и снегопада, динамическое освещение.
курсовая работа [194,7 K], добавлен 15.05.2014Исследование особенностей системного и прикладного программного обеспечения. Обзор языков программирования Pascal, Delphi и Assembler. Проектирование динамической трехмерной сцены в нестандартном графическом режиме. Составление математической модели.
курсовая работа [1,0 M], добавлен 17.02.2013Формулы поверхностей, матрицы основных и перспективных преобразований. Этапы проектирования трехмерной сцены в нестандартном графическом режиме 320х200 точек на 256 цветов. Блок-схема головной программы, процедуры отрисовки линии и поворота всей фигуры.
курсовая работа [565,5 K], добавлен 21.12.2012Сущность основных понятий объектно-ориентированного программирования: объект, класс, полиморфизм. Блок-схема алгоритма и текст программы для вычисления площади круга, прямоугольника и трапеции. Принцип работы и результаты тестирования приложения.
курсовая работа [588,7 K], добавлен 17.07.2012