Рассматриваются варианты использования устройств интерактивного взаимодействия. Предложен пошаговый алгоритм определения взаимного расположения сенсора глубины пространства и проектора изображения. Определены необходимые этапы процесса предварительной обработки, позволяющие осуществлять процесс калибровки в автоматическом режиме. Представлены механизмы проецирования, поиска и определения глубины. Описан принцип преобразования локальных координат датчика в глобальные координаты. Предложена методика определения координат расположения проектора и определения направления проецирования. Описан процесс трансформации из глобального пространства в локальное пространство проектора. Представлен вариант получения общего преобразования локальных координат датчика в локальные координаты проектора.
The task of automatic calibration of the projector and the sensor depth.pdf В настоящее время все большую популярность получают устройства, способные перевести интерактивное взаимодействие человека и вычислительной техники на качественно более высокий уровень. Такие устройства, как Microsoft Kinect - сенсорный игровой контроллер, разработанный компанией Microsoft для консоли Xbox 360 [1], Asus X-tion - игровой контроллер и платформа фирмы ASUS, применяемая для разработки приложений на основе распознавания движений [2], PrimeSense - сенсорный контроллер отслеживания движения, правами на который обладает Apple [3], находят применение в различных сферах деятельности: в оборонной промышленности, робототехнике, медицине, образовании, игровой индустрии. В системах дополненной реальности, где роль таких интерактивных устройств играют, с одной стороны, сенсорный контроллер, а с другой - проектор для визуальной модификации сцены, возникает необходимость решения задачи определения геометрии поверхности реального пространства и сопоставления этой поверхности с проецируемым изображением. Процесс калибровки обоих устройств обычно осуществляется в ручном режиме самостоятельно пользователем системы, что не позволяет достаточно точно получить необходимое преобразование и, как следствие, добиться желаемого уровня отображения виртуального представления. Существуют различные методики калибровки [4-6], каждая из которых обладает определенными преимуществами и недостатками. Так, применение одного из современных методов калибровки при помощи шахматной доски не всегда возможно в автоматическом режиме по причине необходимости периодического перемещения доски для более точной калибровки. В некоторых случаях процесс калибровки становится технически затруднительным или вообще невозможным. Задача калибровки может быть решена путем формализации алгоритма автоматической калибровки системы, программная реализация которого позволяет получить необходимое преобразование координат системой в автоматическом режиме. 1. Постановка задачи калибровки сенсора глубины и проектора Одним из вариантов использования технологии дополненной реальности является «Виртуальная песочница», представляющая собой комбинацию обычной песочницы, трехмерного датчика Microsoft Kinect, программного обеспечения моделирования и визуализации, а также с обычного проектора (иногда нескольких проекторов), обеспечивающего визуализацию представления изображения. Ландшафты, создаваемые из песка, выделяются в режиме реального времени цветами, соответствующими высоте возвышения, топографическими контурными линиями и виртуальной водой [7]. В процессе разработки сложных программных систем моделирования и визуализации, в основе которых лежит обработка графической информации [8], возникает необходимость сопоставления координаты облака точек, принимаемых с сенсора глубины, и координат пространства, проецируемых проектором. Такие действия позволят дополнять реальное изображение данными виртуального пространства. Для сопоставления координат необходимо выполнить преобразование ProjectorSpace = VPTramsform(SensorSpace), (1) где ProjectorSpace - проекционные координаты относительно проектора, SensorSpace - проекционные координаты относительно сенсора, VPTramsform - функция трансформации. Для получения преобразования VPTramsform предлагается следующий пошаговый алгоритм, выполняемый на этапе запуска системы: 1. Проецирование, поиск и определение глубины. 2. Преобразование локальных координат датчика в глобальные координаты. 3. Определение координат расположения проектора. 4. Определение направления проецирования. 5. Получение трансформации из глобального пространства в локальное пространство проектора. 6. Получение общего преобразования локальных координат датчика в локальные координаты проектора. Опишем порядок действия для решения задачи автоматической калибровки проектора и сенсора глубины для каждого шага алгоритма. 2. Проецирование, поиск и определение глубины Для поиска образов по изображению существует достаточное количество алгоритмов, от выбора которых и будет зависеть проецируемый образ. Использование в качестве образов изображений, имеющих информацию об изменении размера проекции, позволяет определить расстояния до исходной точки. Такой подход способствует уменьшению погрешности вычисления. К примеру, при проецировании круга значение радиуса проекции и значение радиуса проецируемого образа позволит вычислить длину луча. Сенсор Kinect считывает цветовые и глубинные данные одновременно на частоте до 30 кадров в секунду. Разрешение инфракрасного сенсора составляет 1,280 х 1,024 пикселей, при этом максимальный размер выходного изображения не превышает 640 х 480 пикселей. Это связано с привязкой к возможностям внутреннего процессора Kinect и пропускным возможностям шины USB [9]. Представленные характеристики, которыми обладает Microsoft Kinect, позволяют использовать его в качестве датчика для определения глубины изображения. Датчик глубины представляет собой инфракрасный проектор, объединенный со светочувствительной матрицей. Это дает возможность сенсору Microsoft Kinect получать трехмерное изображение движущегося объекта при естественном и искусственном освещении помещения. Специальная программа и сенсор диапазона глубины позволяют калибровать датчики с учетом условий окружающей среды [10]. Несмотря на то что существуют другие аналоги и алгоритмы получения стереоизображения на основе двух камер, в данной задаче важна точность получаемых данных и поэтому наилучшим вариантом является использование сенсора Microsoft Kinect. 3. Преобразование локальных координат датчика в глобальные координаты Для данного преобразования можно воспользоваться обратным способом: найдём трансформацию глобальных координат в локальные координаты сенсора. В общем случае трансформация описывается формулой SensorSpase = GlobalSpace * ViewTransform * ProjectionTransform, (2) где GlobalSpace - глобальные координаты, ViewTransform - матрица видового преобразования сенсора, ProjectionTransform - матрица проекционного преобразования сенсора. Соответственно, преобразование локальных координат в глобальные координаты описывается формулой GlobalSpace = SensorSpase 4 inverse (ViewTransform * ProjectionTransform), (3) где inverse (ViewTransform * ProjectionTransform) - обратная матрица от ViewTransform*ProjectionTransform. Матрица преобразования ProjectionTransform зависит он характеристик сенсора, таких как угол обзора, соотношение сторон обзора, коэффициенты искажения линзы. Коэффициентом искажения линзы в данной задаче можно пренебречь (как показала практика использования Microsoft Kinect, в данной задаче коэффициент искажения слабо влияет на результат). Остальные преобразования можно свести к стандартным преобразованиям, выполняемым в матрице проекции. Матрица преобразования ViewTransform зависит от точки в пространстве и направления сенсора. Задача значительно упрощается, если точка в пространстве, где находится сенсор, будет определена как центр координат и направления осей, соответствующих направлению лучей сенсора. Тогда матрица ViewTransform будет единичной, и данное преобразование можно учитывать. Стоит заметить, что в комбинации, где присутствует несколько сенсоров, такое упрощение невозможно. Используя в качестве сенсора устройство Microsoft Kinect и коэффициенты fx, fy, cx, cy, предоставленные для данного сенсора [11], матрицу inverse (ProjectionTransform) можно заменить на формулу (4): GlobalSpace = vec3 ((SensorSpace.x - cx) * depth * fX, (SensorSpace.y - cy) * depth * fy, depth), (4) где fx = 1,0 / 594,2143; fy = 1,0 / 591,0405; cx = 339,3078; cy = 242,7391. 4. Определение координат расположения проектора По аналогии для преобразования глобальных координат в локальные координаты проектора используется преобразование ProjectorSpace = GlobalSpace * PViewTransform * PProjectionTransform, (5) где PViewTransform - матрица видового преобразования проектора, PProjectionTransform - матрица проекционного преобразования проектора. Матрица PProjectionTransform также получается из характеристик проектора: угол обзора по одной из осей, соотношение сторон, коэффициенты искажения линзы. Для нахождения матрицы PViewTransform необходимы данные точек, не лежащих в одной плоскости, в количестве на одну больше, чем количество измерений пространства. При данном количестве точек уравнения, которыми будет описываться решение, данная задача будет иметь одно решение. Представим задачу калибровки в виде рисунка в двухмерном пространстве (рис. 1). При этом точками S, C, P0, Pi, P2 могут являться произвольные точки в пространстве. Следует отметить, что данные точки могут не лежать на одной плоскости. Для решения задачи необходимо получить локальное направление лучей для d0, соответствующей CP0; d1, соответствующей CP1; d2, соответствующей CP2, или углов между лучами, для которых выполняется следующие равенство: _ ,,. . ,/,ч ,, ч MaxYawAngle. , . MaxPitchAngleчч Р1 = arccos(((d0,d10) = asum((x - * (---X Cy - y0) * (----)) , (6) width height где x0, x1 - координаты проецирования по горизонтали; y0, y1 - координаты проецирования по вертикали; MaxYawAngle - угол обзора по горизонтали; MaxPitchAngle - угол обзора по вертикали. Представим задачу на рис. 2. Спроецируем точки на виртуальную плоскость в пространстве и нормализуем вектор направления луча. Таким образом, возможно применить преобразование координат, используя следующее равенство: где V - матрица преобразования координат; dx, dy, dz - координаты на плоскости проекции проектора; Px, Py, Pz - мировые координаты. d%Q dy0 dz0 1- ■Px0 РУо Pz0 1 dxx dy1 dzt 1 Pxx Pyi Pzi 1 dx2 dy2 dz2 1 Px2 Ру2 Pz2 1 dx3 dy3 dzz 1. Px2 РУз Pz 3 1 Рис. 1. Точки в пространстве, сенсор и проектор: S - точка координат сенсора, определенная как центр координат; C - искомая точка координаты проектора; P0, P1, P2 - проецируемые точки в глобальных координатах (в трёхмерном пространстве, соответственно, имеется ещё точка P3) Pi C Po Pi Bo B1 \ Pi Рис. 2. Графическое представление задачи Координату точки C получаем из матрицы V по следующему равенству (8) [12]: C = row(V\ 3), где row - функция, определяющая строку матрицы под определённым номером. 5. Определение направления проецирования После нахождения точки координаты проектора можно найти направление данного проектора. Направлением считаем луч, соответствующий центру локальных координат проектора. Задачу можно значительно упростить, если один из искомых лучей, используемый в определении координат расположения проектора, будет направлен строго по центру. Получим вектор направления ViewDirection = normalize (P - C), где P - координаты центральной точки. (8) Если требуется вычисление стандартной видовой матрицы, то в качестве точки плоскости наблюдения используется центральная точка. 6. Получение трансформации из глобального пространства в локальное пространство проектора Далее для нахождения матрицы PViewTransform необходимы координаты проектора и направление проецирования, найденные ранее. В качестве искомой матрицы используем стандартную видовую матрицу. Для получения матрицы проекции PProjectionTransform будем использовать следующую матрицу с возможностью выбора центра [12]: (9) PProjectio nTransform - 7 -7 ZJ p^p ZJ p^p 0 ХрГр У * 7 ~л Л p^^ Zi p^p 0 7 - 7 zj p^p ZJ p^p 1 prp Y * 7 l prp ^ ^Jprp 0 0 Sz T 'z 0 0 -1 7 pvp здесь (Xprp, Yprp, Zprp) - одна из точек направляющего вектора, где Zprp - некоторое выбранное случайным образом положение плоскости наблюдения на оси Z; Sz и Tz - коэффициенты масштабирования и трансляции для нормировки спроектированных значений координат Z. Заданные значения Sz и Tz зависят от выбранного диапазона нормировки. Таким образом комбинация матриц PViewTransform * PProjectionTransform является общей трансформацией глобальных координат в локальные координаты проектора. 7. Получение общего преобразования локальных координат датчика в локальные координаты проектора С учётом всех полученных преобразований развернём формулу (1) и получим следующее выражение: ProjectorSpase = SensorSpase * inverse(ViewTraqnsform * ProjectionTransform) * * PViewTransform * PProjectionTransform, где ViewTransform будет единичной матрицей, если сенсор глубины определен как центр координат; Pro-jectionTransform получается после приведения формулы (2) в матричный вид (при этом в конечном итоге не обязательно использовать матрицу); PViewTransform вычисляется при помощи четырех проецируемых точек; значение PProjectionTransform получается в зависимости от характеристик проектора. Заключение Предложенный в работе алгоритм наряду с другими существующими методиками [4-6] может быть использован для различных вариантов калибровки. Так, после единовременной автоматической калибровки системы имеются необходимые преобразования, которые позволяют разработчику в режиме реального времени производить сопоставление данных, получаемых сенсором или датчиком глубины, с виртуальными данными системы, проецируемыми с помощью проектора. В более сложной комбинации целесообразно использовать несколько сенсоров и проекторов для получения лучшего результата. При этом калибровка осуществляется аналогично (попарно) с добавлением этапа получения взаимного расположения координатных осей различных пар. Также рассмотренный алгоритм может быть взят за основу для использования в системах дополненной реальности в тех случаях, когда ручная калибровка устройств представляется затруднительной или невозможной.
Сенченко Павел Васильевич | Томский государственный университет систем управления и радиоэлектроники | кандидат технических наук, доцент кафедры автоматизации обработки информации, декан факультета систем управления | pvs@tusur.ru |
Ознабихин Дмитрий Анатольевич | Томский государственный университет систем управления и радиоэлектроники | аспирант кафедры автоматизации обработки информации | kvid06@mail.ru |
Тарасенко Владимир Феликсович | Томский государственный университет | доктор технических наук, профессор кафедры теоретической кибернетики факультета прикладной математики и кибернетики | vtara54@mail.ru |
Microsoft Kinect. URL: http://www.xbox.com/en-us/kinect (дата обращения: 30.11.2015).
Asus X-tion. URL: http://www.asus.com/ru/Multimedia/Xtion_PRO (дата обращения: 30.11.2015).
Beyond Television: How Apple Could Incorporate PrimeSense Technology Into Its Products. URL: http://www.macrumors.com/ 2013/11/25/beyond-television-how-apple-could-incorporate-primesense-technology-into-its-products (дата обращения: 03.12.2015).
Zhang Z. A flexible new technique for camera calibration // IEEE Transactions on Pattern Analysis and Machine Intelligence. 2000. V. 22, No. 11. P. 1330-1334.
Tsai R.Y. A Versatile Camera Calibration Techniaue for High-Accuracy 3D Machine Vision Metrology Using Off-the-shelf TV Cameras and Lenses Proceedings // IEEE Conference on Computer Vision and Pattern Recognition. Miami Beach, FL, 1986. P. 364-374.
Hrdlicka J. Kinect-projector calibration, human-mapping. URL: http://blog.3dsense.org/ programming/kinect-projector-calibrationhuman-mapping-2 (дата обращения: 03.12.2015).
Песочница дополненной реальности. URL: http://arpoint.ru/news/arconf_13_11_14.php (дата обращения: 03.12.2015).
Сенченко П.В., Жуковский О.И., Гриценко Ю.Б., Лазарев И.В., Милихин М.М. Интерфейс взаимодействия геоинформаци онной технологии ведения электронного генерального плана со сторонними программными системами // Доклады Томского государственного университета систем управления и радиоэлектроники. 2013. № 1 (27). С. 129-134.
Дусеев В.Р., Мальчуков А.Н., Мыцко Е.А. Фильтрация данных глубины с сенсора Kinect // Современные проблемы науки и образования. 2015. № 1. С. 153-160.
Как работает Kinect. URL: http://www.kakprosto.ru/kak-883127-kak-rabotaet-kinect (дата обращения: 03.12.2015).
Shiffman D. Getting Started with Kinect and Processing. URL: http://shiffman.net/p5/kinect/, свободный (дата обращения: 25.10.2015).
Херн Д., Бейкер П. Компьютерная графика и стандарт OpenGL : пер. с англ. М. : Вильямс, 2005. 1168 с.