Маногаров
А.И., Дробязко А.Н., Забара И.С., Значко В.Н., Ковальчук М.А., Парфенова
И.А., Хилько Е.А., Цой Д.Д.
Кубанский
государственный университет, Россия
Построение сцен и изображений объектов при помощи программируемого
бесконтактного активного 3D-сканера
3D-сканирование – это создание модели
реального объекта на основе данных о его форме и размере. 3D-сканирование может
оказаться полезным при решении задач реинжиниринга, проектирования
приспособлений, оснастки, запасных частей при отсутствии оригинальной
компьютерной документации на изделие, а также при необходимости перевода в
цифровой вид поверхностей сложной формы, в том числе художественных форм и
слепков. 3D-сканирование может использоваться в целях сравнения реально изготовленного
объекта с его CAD-моделью. Современные сканеры можно поделить на две группы:
контактные и бесконтактные. Последние более перспективны – они могут
отсканировать предмет, находящийся на большом расстоянии. Бесконтактные сканеры
имеют не менее двух камер, которые анализируют объект и находят его координаты,
а затем по ним создают трёхмерную модель предмета. К сожалению, с помощью
только двух камер невозможно создать такое чёткое изображение, которое
необходимо для фильмов и видеоигр. В настоящее время создано множество контактных
и бесконтактных 3D-сканеров, но существует
необходимость разработки доступных программных кодов для распространенных
аппаратных средств. В Кубанском государственном университете разрабатывается
бесконтактный активный 3D-сканер, используемый совместно с устройством Kinect,
выпущенным компанией Microsoft для игровой приставки Xbox. Kinect включает в
себя инфракрасный излучатель, инфракрасный приёмник, камеру, 4 микрофона,
корректировщик наклона (±27°) по вертикали. Kinect может получать трёхмерное
изображение при любом естественном освещении. Сенсор подключается к компьютеру
через USB, одновременно можно подключить до четырех сенсоров. Диапазон рабочих
расстояний от 0.5 до 3 метров.
При написании программного кода нами
использовалась PCL (Point Cloud Library) – открытая библиотека для обработки 3D
геометрии, содержащая алгоритмы фильтрации, функции оценки, реконструкции
поверхности, регистрации, подгонки моделей, сегментации.
Сначала преобразуем показания камеры
глубины, каждый кадр глубины перед обработкой проходит фильтрацию билатеральным
фильтром для сглаживания. Билатеральный фильтр изучает каждый воксель и
пересчитывает его значение в матрице функции TSDF на основе значений соседних
вокселей в этой же функции. Важной особенностью билатерального фильтра является
то, что он сохраняют острые края модели. Фильтр не сглаживает модель в том месте,
где воксели имеют большие различия.
На следующем шаге определяем смещение
камеры в пространстве относительно предыдущего фрейма. Для этого используем ICP
– Iterative Closet Point – алгоритм, использующийся для сведения к минимуму
разницы между двумя облаками точек, обрабатывая два облака точек – с текущего и
предыдущего кадров глубины, а также знание о предыдущей позиции камеры в глобальном
пространстве. Расхождение между двумя фреймами глубины незначительны, что
позволяет использовать в ICP не облака точек, а их проективную проекцию на
матрицу глубины. Получаем матрицу преобразования, характеризующую положение
камеры в глобальном пространстве. Эта матрица аккумулирует в себе данные не
только с текущей карты глубины, но и ее масштабированных вариаций, полученных
на первом шаге.
Производится проверка – изменила ли камера
свое положение по сравнению с предыдущими замерами (небольшие сдвиги не
принимаются во внимание) – на основе метода Родригеса и матриц преобразования
на текущем и предыдущем шаге. В качестве результата имеем обновленное
представление глобальной сцены в виде TSDF функции. Данные этой функции
хранятся в виде воксельной сетки. Функция представляет физическое пространство
как куб, по умолчанию размером 3 метра,
и разделяет его в воксельные сетки с определенным количеством вокселей на ось,
равным в нашем случае 512. Отношение размера куба в метрах и количества вокселей
на ось дают разрешение нашего куба. Качество модели пропорционально этим двум
параметрам. Тем не менее, их модификации непосредственно отражаются на объеме
используемой памяти. Функция TSDF имеет значение, соответствующее величине
расстояния до ближайшего пересечения нулевой линии.
Результаты усреднения TSDF в нескольких 3D
облаках точек выстраиваются в глобальный кадр и являются глобальным
объединением. На момент извлечения данных сетка исследуется в направлении
спереди назад, а значения функции TSDF проверяются для каждого вокселя. В
памяти GPU функция TSDF хранится как матрица из чисел в диаппазоне от –1 до 1.
Каждый элемент в матрице представляет собой воксель, а значение в нем
представляет значение TSDF. Этим значение является расстояние до ближайшей
изоповерхности. Функция имеет положительное значение, когда мы «снаружи»
поверхности, а отрицательное значение, когда внутри. Во время использования
данных, полученных функцией, мы игнорируем воксели со значением 1, так как они
представляют пустое пространство, и, следовательно, не относятся к нашей модели.
Последний шаг это восстановление общей
сцены. Для рендеринга используется метод бросания лучей “ray casting“. Сцена
строится на основе замеров пересечения лучей с визуализируемой поверхностью.
Каждый луч – направление взгляда с определенной точки на воксельный куб. Каждое
ядро GPU занимается поиском вокселя, сквозь который проходит луч, в котором, при
этом, значения TSDF функции меняет знак, т.е. там находится некоторая
поверхность.
Разработанное программное обеспечение для
контроллера Kinect позволяет использовать его как сканер 3D моделей и сцен.