RU2812950C1 - System for constructing three-dimensional space model - Google Patents

System for constructing three-dimensional space model Download PDF

Info

Publication number
RU2812950C1
RU2812950C1 RU2023110693A RU2023110693A RU2812950C1 RU 2812950 C1 RU2812950 C1 RU 2812950C1 RU 2023110693 A RU2023110693 A RU 2023110693A RU 2023110693 A RU2023110693 A RU 2023110693A RU 2812950 C1 RU2812950 C1 RU 2812950C1
Authority
RU
Russia
Prior art keywords
data
dimensional space
points
image
capture device
Prior art date
Application number
RU2023110693A
Other languages
Russian (ru)
Inventor
Дмитрий Владимирович Человьян
Original Assignee
Общество с ограниченной ответственностью "Визард Тим"
Filing date
Publication date
Application filed by Общество с ограниченной ответственностью "Визард Тим" filed Critical Общество с ограниченной ответственностью "Визард Тим"
Application granted granted Critical
Publication of RU2812950C1 publication Critical patent/RU2812950C1/en

Links

Abstract

FIELD: computer technology.
SUBSTANCE: invention relates namely to the modelling of three-dimensional space. A system for constructing a model of three-dimensional space, containing an image capturing device that moves in three-dimensional space, an interface for obtaining images of three-dimensional space and a system for modelling three-dimensional space, wherein the image capturing device is made in the form of an IOS-based phone with LIDAR, and before constructing the three-dimensional space, calibration of the optical part, the camera of the image capture device for each frame of the video image simultaneously captures RGB colour data, depth data, IMU data and odometry data, and the three-dimensional space modelling system translates the RGB colour data and depth data into a pixel matrix, calculates the exact positions for each frame received by a phone moving in space for subsequent reconstruction of three-dimensional space.
EFFECT: increasing the accuracy of constructing three-dimensional space models.
2 cl, 12 dwg

Description

Изобретение относится к моделированию трехмерного пространства.The invention relates to modeling three-dimensional space.

Основная цель предлагаемого решения - это создать систему для осуществления связи и коллаборативной работы нового поколения. Идея базируется на том, что многие рабочие задачи невозможно удаленно решать только с помощью видео (решения типа Skype, Zoom), так как оно недостаточно информативно и удобно по сравнению с личным присутствием на месте.The main goal of the proposed solution is to create a system for communication and collaboration of a new generation. The idea is based on the fact that many work tasks cannot be solved remotely using video alone (solutions like Skype, Zoom), since it is not informative and convenient enough compared to personal presence on site.

Для решения этой проблемы необходимо создать комплексное решение на базе пользовательского смартфона с LIDAR для потоковой передачи видео с данными глубины (RGB-D) и последующей трехмерной реконструкции на базе этих данных удаленным устройством в реальном времени.To solve this problem, it is necessary to create an end-to-end solution based on the user's smartphone with LIDAR for streaming video with depth data (RGB-D) and subsequent 3D reconstruction from this data by a remote device in real time.

Наиболее близким решением является патент РФ №2713611, от 05.02.2020 в котором раскрыто устройство и способ для генерации модели трехмерного пространства. Данное устройство для генерации модели трехмерного пространства, содержит: интерфейс для получения изображения, конфигурированный для получения данных изображения, генерируемых устройством захвата изображения, эти данные изображения представляют результат наблюдения, так что здесь имеет место относительное перемещение между трехмерным пространством и устройством захвата изображения во времени; и механизм моделирования, конфигурированный для обработки данных изображения, полученных интерфейсом для получения изображения, и для вычисления трехмерной модели трехмерного пространства, где этот механизм моделирования содержит: сегментатор модели, конфигурированный для сегментации трехмерной модели и разбиения ее, по меньшей мере, на активные и неактивные части на основе по меньшей мере одного свойства модели, в котором механизм моделирования конфигурирован для использования активных частей трехмерной модели с целью обновления модели во времени; и механизм совмещения конфигурирован для выравнивания активных частей трехмерной модели с неактивными частями трехмерной модели во времени.The closest solution is RF patent No. 2713611, dated 02/05/2020, which discloses a device and method for generating a three-dimensional space model. This device for generating a three-dimensional space model includes: an image acquisition interface configured to receive image data generated by an image capture device, this image data represents an observation result, so that there is a relative movement between the three-dimensional space and the image capture device in time; and a modeling engine configured to process the image data received by the imaging interface and to compute a three-dimensional model of the three-dimensional space, where the modeling engine comprises: a model segmenter configured to segment the three-dimensional model and partition it into at least active and inactive parts based on at least one property of the model, wherein the modeling engine is configured to use active parts of the three-dimensional model to update the model over time; and the alignment mechanism is configured to align active portions of the 3D model with inactive portions of the 3D model over time.

Недостатками данного устройства является недостаточная целостность получаемого трехмерной модели, а также ее качество, ввиду присутствия большого количества шумов.The disadvantages of this device are the lack of integrity of the resulting three-dimensional model, as well as its quality, due to the presence of a large amount of noise.

Предлагаемая система позволяет производить трехмерную реконструкцию в реальном времени и делать это значительно точнее, чем встроенными методами или другими аналогами, реализованными на базе мобильного устройства.The proposed system allows for three-dimensional reconstruction in real time and does this much more accurately than built-in methods or other analogues implemented on a mobile device.

Технический результат - повышение точности модели трехмерного пространства.The technical result is increasing the accuracy of the three-dimensional space model.

Технический результат достигается тем, чтоThe technical result is achieved by the fact that

Предлагаемая система поясняется фиг.1-5.The proposed system is illustrated in Figs. 1-5.

На фиг.1 показана схема работы предлагаемого решения по трансляции и обработке данных,Figure 1 shows a diagram of the operation of the proposed solution for data translation and processing,

на фиг.2 показана схема шагов и этапов предлагаемой системы для создания трехмерной реконструкции,Figure 2 shows a diagram of the steps and stages of the proposed system for creating a three-dimensional reconstruction,

на фиг.3 показан паттерн для калибровки камеры,Fig. 3 shows a pattern for camera calibration,

на фиг.4 показан пример определения ключевых точек в кадре и сравнения их с соседним кадром для определения траектории,Fig. 4 shows an example of determining key points in a frame and comparing them with an adjacent frame to determine the trajectory,

на фиг.5 показан пример реконструированной карты передвижения,Fig. 5 shows an example of a reconstructed movement map,

на фиг.6 показан пример реконструкции до срабатывания события Loop Closure. Красным отмечена область расхождения траектории,Figure 6 shows an example of reconstruction before the Loop Closure event fires. The area of trajectory divergence is marked in red,

на фиг.7 показана реконструкция после срабатывания алгоритма Loop Closure. Красными линиями выделены траектории коррекции точек из текущего кадра,Fig. 7 shows the reconstruction after the Loop Closure algorithm is triggered. Red lines highlight the trajectories of correction of points from the current frame,

на фиг.8 пример элемента датасета, кадр №10,Fig.8 is an example of a dataset element, frame No. 10,

на фиг.9 показана структура октодерева для хранения точек,Fig. 9 shows the structure of an octree for storing points,

на фиг.10 показана отрисовка в реальном времени с промежутками в 500 кадров,Fig. 10 shows real-time rendering at intervals of 500 frames,

на фиг.11 показан результат без исключения соседних точек, результат с фильтрацией,Fig. 11 shows the result without excluding neighboring points, the result with filtering,

на фиг.12 показаны результаты сверки измерений между реальным миром и реконструкцией.Fig. 12 shows the results of the measurement comparison between the real world and the reconstruction.

Для реализации предлагаемой системы в качестве устройство захвата изображения был выбран Iphone 13 pro Мах, который позволяет получать карту глубины разрешением 192 на 256 с частотой в 60 кадров в секунду. Сочетая это с подвижностью камеры, мы можем легко и быстро получать плотную и точную карту точек.To implement the proposed system, Iphone 13 pro Max was chosen as an image capture device, which allows you to obtain a depth map with a resolution of 192 by 256 with a frequency of 60 frames per second. Combining this with camera agility, we can easily and quickly obtain a dense and accurate map of points.

При этом передача данных с phone 13 pro Мах в систему моделирования трехмерного пространства осуществлялась с использованием интерфейса WebRTC по протоколу TCP см. фиг. 1.In this case, data transfer from phone 13 pro Max to the three-dimensional space modeling system was carried out using the WebRTC interface via the TCP protocol, see Fig. 1.

С точки зрения архитектуры был реализован программный комплекс из трех компонентовFrom an architectural point of view, a software package of three components was implemented

1) Приложение для смартфона "ARstream"1) Smartphone application "ARstream"

2) Серверное приложение для сигнализирования "Signal"2) Server application for signaling "Signal"

3) Клиентское приложение для получения и обработки данных "Viewer"3) Client application for receiving and processing data "Viewer"

Основная часть задач реализуется непосредственно на устройстве отправки в приложении ARstream.The main part of the tasks is implemented directly on the sending device in the ARstream application.

На нем с помощью использования ARkit 6 и его встроенных функций была реализована возможность получения данных с LIDAR с присвоением параметров глубины и степени уверенности для каждого пикселя.On it, using ARkit 6 and its built-in functions, the ability to obtain data from LIDAR was realized with the assignment of depth parameters and a degree of confidence for each pixel.

LIDAR устройства Iphone 13 pro Мах позволяет получать карту глубины разрешением 192 на 256 с частотой в 60 кадров в секунду. Сочетая это с подвижностью камеры мы можем легко и быстро получать плотную и точную карту точек. Тем не менее требуется внимательная фильтрация по краям физических объектов, так как при таком разрешении карты глубины в этих областях находятся потенциальные источники ошибок реконструкции. Для этого помимо глубины каждого пикселя мы передаем и степень уверенности в диапазоне от 0 до 1, которая вычисляется методами встроенными в ARkit 6.LIDAR devices iPhone 13 pro Max allows you to obtain a depth map with a resolution of 192 by 256 with a frequency of 60 frames per second. Combining this with camera mobility, we can easily and quickly obtain a dense and accurate map of points. However, careful filtering around the edges of physical objects is required, since at this depth map resolution, these areas contain potential sources of reconstruction errors. To do this, in addition to the depth of each pixel, we also transmit the degree of confidence in the range from 0 to 1, which is calculated by methods built into ARkit 6.

Приложение ARstream получает полный набор данных с сенсоров устройства, маркирует их порядковым номером и далее отправляет видео и звук для отправки методами WebRTC для обеспечения быстрой и качественной передачи, а остальные данные с помощью метода пакетной передачи.The ARstream application receives a full set of data from the device’s sensors, marks them with a serial number and then sends video and audio to be sent using WebRTC methods to ensure fast and high-quality transmission, and the remaining data using the packet transmission method.

Такая методика в сочетании с сигнальным сервером позволит потенциально осуществлять защищенную передачу и шифрование данных, так как мы можем использовать любые методы шифрования для передачи между клиентскими устройствами, а сигнальный сервер обеспечит все требования по аутентификации пользователей.This technique, in combination with a signaling server, will potentially allow secure transmission and encryption of data, since we can use any encryption methods for transmission between client devices, and the signaling server will provide all user authentication requirements.

Реализация трехмерной реконструкции с помощью LIDAR (RGB-D данные) в общем виде реализуема при решении следующий задач (см. фиг..2):The implementation of three-dimensional reconstruction using LIDAR (RGB-D data) is generally feasible when solving the following problems (see Fig. 2):

1) Получения данных с сенсоров устройства и их ассоциирование. При этом различные подходы позволяют реализовывать это либо с поправкой на данные с IMU сенсоров устройства или без них1) Receiving data from device sensors and associating them. At the same time, various approaches make it possible to implement this either adjusted for data from the device’s IMU sensors or without them

2) Вычисление траектории движения камеры2) Calculating the camera's trajectory

3) Построение облака точек от кадра к кадру3) Construction of a point cloud from frame to frame

4) Очистка получающихся данных от шумов4) Cleaning the resulting data from noise

5) Механизмы коррекции траектории для ликвидации накапливаемой ошибки (Loop Closure)5) Trajectory correction mechanisms to eliminate accumulated errors (Loop Closure)

6) Построение итогового меша6) Construction of the final mesh

Общая методика работы на примере нашего подхода и результатов.General methodology of work using our approach and results as an example.

Пример данных на вход:Example input data:

1) RGB. Поступают в стандартной цифровой кодировке 16 или 8 бит1) RGB. Available in standard 16 or 8 bit digital encoding

2) Глубина. Представляют из себя PNG, хранящая данные только в диапазоне черное-белое, где чисто белый цвет (0) обозначает минимальную дистанцию, а черный (1) максимальную дистанцию, захваченную датчиком глубины.2) Depth. They are PNGs that store data only in the black-white range, where pure white (0) indicates the minimum distance, and black (1) the maximum distance captured by the depth sensor.

3) IMU данные. Хранятся в текстовом формате типа3) IMU data. Stored in text format like

Все типы поступаемых данных могут обрабатываться как в реальном времени, так и в виде заранее подготовленной группы данных (датасета).All types of incoming data can be processed both in real time and in the form of a pre-prepared group of data (dataset).

Механизм передачи данных отправляет следующие типы информацииThe data transfer mechanism sends the following types of information

1) Цвет1) Color

2) Глубина2) Depth

3) Уверенность в глубине3) Confidence in depth

4) Матрица камеры4) Camera matrix

5) Данные IMU5) IMU data

6) Данные одометрии6) Odometry data

Ключевым этапом качественной трехмерной реконструкции является механизм точного определения камеры в трехмерном пространстве, а также калибровка оптической части камеры и линзы для правильного построения облака точек.A key step in high-quality 3D reconstruction is the mechanism for accurately defining the camera in 3D space, as well as calibrating the camera's optical part and lens to correctly construct the point cloud.

Для калибровки использовались стандартные алгоритмы. В общих чертах он представляет из себя ряд фотографий паттерна шахматной доски (см. фиг.3).Standard algorithms were used for calibration. In general terms, it consists of a series of photographs of a chessboard pattern (see Fig. 3).

Задача калибровки - вычислить параметры матрицы и линзы для определения искажений попадающего света, которые характерны для любой фототехники и учет этих искажений при реконструкции.The task of calibration is to calculate the parameters of the matrix and lens to determine the distortions of the incoming light, which are typical for any photographic equipment, and take these distortions into account during reconstruction.

Основную сложность в нашей задаче представляет непосредственно определение траектории и это связано с особенностями скользящего затвора камеры.The main difficulty in our task is directly determining the trajectory and this is due to the features of the camera's rolling shutter.

Данная особенность означает, что на кадрах, которые захватываются при поворотах есть незаметные глазу, но очень значимые при вычисления искажения. Они возникают из-за того, что верхняя часть кадра захватывается на 15 миллисекунд раньше, чем нижняя. Таким образом формируется сдвиг, который при вычислениях способ визуальной одометрии (сравнение последовательности кадров) будет выдавать определенную ошибку, которая рано или поздно приведет к значительным искажениям или поломке реконструкции.This feature means that in the frames that are captured during turns there are distortions that are invisible to the eye, but very significant when calculating. They occur because the top of the frame is captured 15 milliseconds earlier than the bottom. In this way, a shift is formed, which, when calculated by the method of visual odometry (comparing a sequence of frames), will produce a certain error, which sooner or later will lead to significant distortion or breakdown of the reconstruction.

Для компенсации этой проблемы мы учитываем дополнительные данные с IMU трекеров и встроенные в AR Kit возможности по вычислению траектории движений телефона.To compensate for this problem, we take into account additional data from IMU trackers and the capabilities built into the AR Kit to calculate the trajectory of the phone’s movements.

Краткое описание методики определения положения выглядит следующим образом:A brief description of the position determination technique is as follows:

1) Для картинки разрешением 720 × 480 определяется 1000 ключевых точек в кадре. Ключевой точкой является область высокого контраста между соседними пикселями. По возможности точки определяются равномерно по кадру, который делится на сетку, состоящую из 60 квадратов, в каждом квадрате алгоритм пытается обнаружить не менее 5 точек.1) For a picture with a resolution of 720 × 480, 1000 key points are determined in the frame. The key point is the area of high contrast between adjacent pixels. If possible, points are determined evenly across the frame, which is divided into a grid consisting of 60 squares, in each square the algorithm tries to detect at least 5 points.

2) В случае, если для предыдущего кадра поиск точек был успешен, используется модель измерения постоянной скорости, которая используется для вычисления и предсказания движения камеры. В случае если трекинг предыдущего кадра был не успешен, то используется более широкий метод определения местоположения.2) If the search for points was successful for the previous frame, a constant velocity measurement model is used, which is used to calculate and predict the camera movement. If tracking of the previous frame was not successful, then a broader location determination method is used.

3) Абсолютное вычисление позиции.3) Absolute position calculation.

Если покадровый трекинг потерян, то кадр конвертируется в так называемый мешок слов и ставится в очередь для поиска соответствий. Таким образом, текущий кадр сверяется с предыдущими для поиска с наибольшим количеством соответствий. В случае его нахождения он сверяется с рядом соседних для подтверждения соответствия. После этого трекинг оптимизируется и вычисление позиции продолжаетсяIf frame-by-frame tracking is lost, the frame is converted into a so-called bag of words and queued for searching for matches. Thus, the current frame is checked against previous frames to find the one with the most matches. If found, it is checked against a number of neighboring ones to confirm compliance. After this, tracking is optimized and position calculation continues.

4) Построение карты.4) Map construction.

После вычислений позиции карты и определения ключевых точек и их совпадения мы можем спроецировать карту на кадр и обнаружить совпадение с общей картой реконструкции. Эта локальная карта содержит набор ключевых кадров K1, которая хранит его совместно с текущим кадром и набором K2, который представляет из себя соседние кадры к K1 в графе ковидимости (точки попали в поле зрения всех кадров). Карта также имеет эталонный ключевой кадр Kref ∈ K1, который хранит все совпадающие ключевые точки с текущим кадром. Теперь каждая точка карты, видимая в K1 и K2, ищутся в текущем кадре следующим образом:After calculating the map position and identifying the key points and their matches, we can project the map onto the frame and find a match with the overall reconstruction map. This local map contains a set of key frames K1, which stores it together with the current frame and a set K2, which represents neighboring frames to K1 in the visibility graph (the points are in the field of view of all frames). The map also has a reference key frame Kref ∈ K1, which stores all matching key points with the current frame. Now every map point visible in K1 and K2 is searched in the current frame as follows:

- Вычисляется проекция ключевой точки х в текущем кадре.- The projection of the key point x in the current frame is calculated.

Отменить, если он выходит за границы изображения.Cancel if it goes beyond the image boundaries.

- Вычислить угол между текущим лучом обзора v и ключевой точки. Отменить, если v ⋅ n < cos(60°).- Calculate the angle between the current line of sight v and the key point. Cancel if v ⋅ n < cos(60°).

- Вычислить расстояние d от точки карты до центра камеры. Отмена, если он выходит за пределы области инвариантности масштаба точки карты d /∈ [dmin, dmax].- Calculate the distance d from the map point to the camera center. Cancel if it goes beyond the map point scale invariance region d /∈ [dmin, dmax].

- Рассчитать масштаб в кадре по соотношению d/dmin.- Calculate the scale in the frame using the d/dmin ratio.

5) Связать ключевые точки с лучшим совпадением из текущей карты и таким образом вычислить позицию камеры f. Новые ключевые точки добавляются на общую карту (см. фиг.4).5) Associate key points with the best match from the current map and thus calculate the camera position f. New key points are added to the general map (see Fig. 4).

Итоговый алгоритм позволяет строить карту пространства на базе абстрактных ключевых точек и примерную геометрию пространства с довольно высоким уровнем точности. Тем не менее, этот метод интересен нам в первую очередь именно для восстановления траектории движения см. фиг.5, дальнейшая реконструкция происходит уже с помощью использования данных от камеры глубины.The resulting algorithm allows you to build a map of space based on abstract key points and an approximate geometry of the space with a fairly high level of accuracy. However, this method is of interest to us primarily for reconstructing the trajectory of movement, see Fig. 5; further reconstruction occurs using data from the depth camera.

В нашем случае из-за обозначенных выше проблем требуется также поправка на данные от других сенсоров устройства - акселерометра и гироскопа. Благодаря им происходит параллельное вычисление дельты траектории между кадрами, и эта информация используется для ограничения области поиска ключевых кадров.In our case, due to the problems outlined above, correction is also required for data from other sensors of the device - the accelerometer and gyroscope. Thanks to them, the trajectory delta between frames is calculated in parallel, and this information is used to limit the search area for key frames.

Также в любых существующих сегодня методах реконструкции имеет место быть накопление ошибки см фиг.6. Используя разные методы и типы камер ее можно сильно сократить, но не убрать полностью. Для решения этой проблемы используется алгоритм Loop Closure. Чтобы он работал, снимающему следует периодически возвращаться к уже захваченным камерой областям. При работе алгоритма, когда возникает ситуация возврата к уже посещенной области происходит процесс сверки ключевых точек текущего кадра с уже хранящимися на карте. При нахождении достаточного количества соответствий алгоритм проводит корректировку всей пройденной траектории между текущим кадром и прошлым кадром, когда эта область попала в камеру.Also, in any reconstruction methods existing today, there is an accumulation of errors, see Fig. 6. Using different methods and types of cameras, it can be greatly reduced, but not completely eliminated. To solve this problem, the Loop Closure algorithm is used. For it to work, the shooter must periodically return to areas already captured by the camera. When the algorithm operates, when a situation arises when returning to an already visited area, the process of checking the key points of the current frame with those already stored on the map occurs. When a sufficient number of matches are found, the algorithm adjusts the entire trajectory between the current frame and the last frame when this area was captured by the camera.

Происходит метод прямой корректировки методом интерполяции. Вычисляется векторное отклонение между текущей позицией кадра и ожидаемой, и вся предыдущая последовательность кадров аналогичным образом корректируется. Чем ближе корректируемый кадр к прошлому события попадания в кадр - тем меньше происходит корректировка см фиг.7.There is a direct correction method using the interpolation method. The vector deviation between the current frame position and the expected one is calculated, and the entire previous sequence of frames is similarly adjusted. The closer the corrected frame is to the past event of entering the frame, the less adjustment occurs (see Fig. 7).

Механизм Loop Closure является чрезвычайно важным элементом при построении реконструкции. В случае работы постоянно движущейся камеры ошибка регулярно возникает и имеет тенденцию накапливаться. Без работы такого алгоритма итоговая реконструкция очень быстро начинает ломаться и теряет вид с которым реально работать и в целом адекватно воспринимать.The Loop Closure mechanism is an extremely important element when building a reconstruction. In the case of a constantly moving camera, the error occurs regularly and tends to accumulate. Without the work of such an algorithm, the final reconstruction very quickly begins to break down and loses its appearance with which it can actually be worked and, in general, adequately perceived.

Суть работы этого алгоритма - определенное допущение и аппроксимация прошлого ряда данных. Таким образом, формируются объективные ограничения к степени точности реконструкции относительно размеров и точности углов. На текущем этапе нам не видится возможных путей обеспечения сверх высокой точности, сравнимой, например, с ручным сбором данных о размерах лазерной рулеткой.The essence of this algorithm is a certain assumption and approximation of the previous data series. Thus, objective restrictions are formed on the degree of reconstruction accuracy regarding the size and accuracy of angles. At the current stage, we do not see any possible ways to ensure extremely high accuracy, comparable, for example, to manually collecting size data with a laser tape measure.

Это важная особенность, которую надо иметь ввиду при выборе областей применения подобной разработки. На текущем этапе эти методы стоит применять там, где допустима погрешность в 5-10 миллиметров.This is an important feature that must be kept in mind when choosing areas of application for such a development. At the current stage, these methods should be used where an error of 5-10 millimeters is acceptable.

Пример построения трехмерного пространства следующие данные:An example of constructing a three-dimensional space is the following data:

Последовательность цветных статичных кадров, 19961 штукSequence of color static frames, 19961 pieces

Последовательность черно-белых изображений с глубиной цвета 16 бит, 19961 штукSequence of black and white images with a color depth of 16 bits, 19961 pieces

Последовательность перемещений устройства, содержащая временную метку, номер кадра, положение в трехмерной системе координат, кватернионное вращение (далее поза)A sequence of device movements containing a timestamp, frame number, position in a three-dimensional coordinate system, quaternion rotation (hereinafter referred to as pose)

Сведения о параметрах камеры устройстваAbout your device's camera settings

Пример элемента датасета, кадр №10 (см. фиг.8):An example of a dataset element, frame No. 10 (see Fig. 8):

Также помимо вышеуказанного датасет содержит:Also, in addition to the above, the dataset contains:

Формат глубины (Z16)Depth Format (Z16)

Ширину и высоту карты глубины (192×256)Width and height of the depth map (192×256)

Значение масштаба карты глубины (1000)Depth map scale value (1000)

Параметры матрицы:Matrix parameters:

Фокусное расстояние (475.8907)Focal length (475.8907)

Координаты главной точки снимка (0,0)Coordinates of the main point of the image (0,0)

Коэффициенты аффинитета и неортогональности (0, 475.8907)Affinity and non-orthogonality coefficients (0, 475.8907)

Коэффициенты радиальной дисторсии (0, 322.10426, 240.97993, 1)Radial distortion coefficients (0, 322.10426, 240.97993, 1)

Значение количества кадров в секунду, при котором были сняты изображенияThe number of frames per second at which the images were taken

Используя данный набор данных (в дальнейшем - датасет), мы собрали первоначальный тестовый вариант системы.Using this data set (hereinafter referred to as the dataset), we collected an initial test version of the system.

Для переноса данных с реального мира на виртуальную сцену, нам необходимо два инструмента - конвертация координатных систем, и соблюдение единиц измерения.To transfer data from the real world to the virtual scene, we need two tools - conversion of coordinate systems, and compliance with units of measurement.

Основываясь на том, что координаты и углы вращения записывались в системе координат Unity-сцены, мы предположили, что нам достаточно установить на виртуальной сцене виртуальную камеру, в записанную с реального устройства позу, пренебрегая различиями систем координат. Это удовлетворяет первую потребность, далее мы приступили к сопоставлению единиц измерения.Based on the fact that the coordinates and rotation angles were recorded in the coordinate system of the Unity scene, we assumed that it was enough for us to install a virtual camera on the virtual scene in the pose recorded from a real device, neglecting differences in coordinate systems. This satisfies the first need, then we proceeded to compare units of measurement.

Мы узнали, что карта глубины LIDAR, кодирует информацию о глубине градиентом, где черный цвет обозначает максимальное удаление от камеры, а белый цвет означает максимальное приближение к камере. Согласно техническим данным, максимальная дальность показаний LIDAR на iPhone 14-5 метров. Зная эту информацию, мы декодировали значения пикселей, в значение расстояния точек от виртуальной камеры. Алгоритм декодирования выглядит следующим образом:We learned that the LIDAR depth map encodes depth information in a gradient, where black represents the furthest distance from the camera and white represents the closest proximity to the camera. According to technical data, the maximum range of LIDAR readings on the iPhone is 14-5 meters. Knowing this information, we decoded the pixel values into the distance of the points from the virtual camera. The decoding algorithm looks like this:

Получить набор данных, соответствующий одному кадру,Get a set of data corresponding to one frame,

Поместить виртуальную камеру в позу, записанную с устройства,Place the virtual camera in a pose recorded from the device,

Взять кадр с цветной камеры и камеры глубины,Take a frame from a color camera and a depth camera,

На каждый пиксель изображения, создавать точку,For each pixel of the image, create a point,

Основываясь на цвете пикселя карты глубины, задать расстояние по оси Z для точки,Based on the pixel color of the depth map, set the Z-axis distance for the point,

Основываясь на положении пикселя внутри изображений, задать положение по X и Y следующим образом:Based on the pixel position inside the images, set the X and Y position as follows:

Создаем абстрактный экземпляр точки, и помещаем его во временное хранилищеWe create an abstract instance of a point and place it in temporary storage

Поскольку точки изображения хранятся в одномерном массиве, создаем двумерные координаты, по следующим формулам:Since the image points are stored in a one-dimensional array, we create two-dimensional coordinates using the following formulas:

Где xPos, yPos - искомые двумерные координаты, - индекс пикселя внутри одномерного массива изображений, HV - высота изображения,Where xPos, yPos are the desired two-dimensional coordinates, - pixel index inside a one-dimensional image array, HV - image height,

Приводим значение глубины в численное представление, используя текущий обрабатываемый пиксель карты глубиныWe convert the depth value into a numerical representation using the current processed pixel of the depth map

Производим проверку на наличие шума, у соседних с текущим пикселем значений, если соседствующие пиксели не имеют значения отличного от нуля, то игнорируем данный пиксельWe check for the presence of noise in values neighboring the current pixel; if neighboring pixels do not have a value other than zero, then we ignore this pixel

Проверяем значение пикселя на карте глубины, не равно ли значение нулю, и вписывается ли значение в параметр порога фильтрации, и в случае истины, создаем трехмерное представление точки, по формулам:We check the pixel value on the depth map to see if the value is zero, and whether the value fits into the filtering threshold parameter, and if true, we create a three-dimensional representation of the point using the formulas:

Где - координата точки в пространстве виртуальной сцены,Where - coordinate of a point in the space of the virtual scene,

- значение глубины, - depth value,

- главная точка снимка, - the main point of the image,

- фокусное расстояние, - focal length,

- трехмерная координата точки на сцене, - three-dimensional coordinate of a point on the scene,

- трехмерная координата камеры на сцене, - three-dimensional coordinate of the camera on the scene,

- относительный вектор направленный вверх, - relative vector directed upward,

- относительный вектор направленный вправо, - relative vector directed to the right,

- относительный вектор направленный вперед. - relative vector directed forward.

Основываясь на цвете пикселя с цветного изображения, задать точке цвет,Based on the pixel color from the color image, set the color of the point,

Отправить полученную точку в визуализатор, повторять для всех пикселей,Send the resulting point to the visualizer, repeat for all pixels,

Таким образом, мы собрали первый вариант механизма определения глубины. Использование технологии SLAM на тестовом устройстве, позволило нам пренебречь различиями в системе координат, и синхронизировать положение устройства в реальном мире, и внутри виртуальной сцены. Поскольку при инициализации, ARK.it локализует положение устройства относительно земли, и задает начальное положение. В системе координат, положение, регистрируемое ARKit, имеет значение Y (высота устройства над землей), и пренебрегаемое значение по X и Z (близкое к нулю). Следовательно, положение в реальном мире, получает нулевую координату - место инициализации ARKit, которая также может являться нулевой координатой на виртуальной сцене.Thus, we have assembled the first version of the depth determination mechanism. Using SLAM technology on the test device allowed us to ignore differences in the coordinate system and synchronize the position of the device in the real world and inside the virtual scene. Because upon initialization, ARK.it localizes the device's position relative to the ground, and sets the initial position. In the coordinate system, the position recorded by ARKit has a Y value (the height of the device above the ground), and a negligible value in X and Z (close to zero). Therefore, the position in the real world receives a zero coordinate - the ARKit initialization location, which can also be a zero coordinate in the virtual scene.

Разработка механизма определения и фильтрации шумов, а также трехмерной реконструкции на базе серверной части оснащенной видеоускорителемDevelopment of a mechanism for identifying and filtering noise, as well as three-dimensional reconstruction based on a server part equipped with a video accelerator

Протестировав прототип механизма определения глубины, мы обнаружили, что данные получаемые с карты глубины несут в себе большое количество бесполезных точек. Это обуславливается механизмом работы LIDAR. Так как LIDAR это оптическая система, то поверхности находящиеся за пределами зоны действия излучателя не считываются. Механизм работы LIDAR обуславливается отражением излучения в преломляемой среде, и получением излучения обратно в приемник. Поскольку поверхности находящиеся дальше зоны действия излучателя не имеют возможность отражать свет, то эти поверхности не регистрируются, и на карте глубины помечаются черным цветом. Эти незарегистрированные поверхности можно считать шумом.Having tested the prototype of the depth determination mechanism, we discovered that the data obtained from the depth map contained a large number of useless points. This is due to the LIDAR operating mechanism. Since LIDAR is an optical system, surfaces located outside the radiator's coverage area are not read. The mechanism of operation of LIDAR is determined by the reflection of radiation in a refracted medium, and the receipt of radiation back to the receiver. Since surfaces located further than the radiator coverage area do not have the ability to reflect light, these surfaces are not registered and are marked in black on the depth map. These unregistered surfaces can be considered noise.

Мы дополнили алгоритм фильтром, который отсеивает точки, имеющие полностью черный цвет, для первоначального избавления от шумов. Внутри обрабатывающего цикла, такие точки пропускаются, пока цикл не дойдет до точек, имеющих оттенок белого цвета.We supplemented the algorithm with a filter that eliminates points that are completely black in order to initially get rid of noise. Within the processing loop, such points are skipped until the loop reaches points that are shaded white.

Набор предварительно обработанных данных, а также тестовый механизм локализации точек внутри виртуальной сцены были готовы, поэтому мы задались вопросом визуализации.The pre-processed data set, as well as a test mechanism for localizing points inside the virtual scene, were ready, so we set about visualization.

В первую очередь, мы обладаем тестовым датасетом, в размере 39 922 изображения. Каждое изображение имеет разрешение 640×480, следовательно, каждое изображение содержит 307 200 пикселей, причем необходимо обработать два изображения, следовательно, за 1 кадр необходимо обработать 614 400 пикселей. Видеопоток должен отправлять кадры, на скорости 60 кадров в секунду, значит нам необходимо обрабатывать 36 864 000 пикселей в секунду. Итого, мы получаем весьма серьезные требования к производительности системы и скорости обработки.First of all, we have a test dataset of 39,922 images. Each image has a resolution of 640x480, therefore, each image contains 307,200 pixels, and two images need to be processed, therefore, 614,400 pixels need to be processed in 1 frame. The video stream must send frames at 60 frames per second, which means we need to process 36,864,000 pixels per second. In total, we get very serious requirements for system performance and processing speed.

Добавить таблицу, в которой сколько за промежуток времени появляется данных, 4 строчки - сколько пикселей, точек, сколько изображений использованоAdd a table in which how much data appears over a period of time, 4 lines - how many pixels, points, how many images were used

Имея такие требования, в качестве инструмента визуализации мы выбрали систему частиц. Традиционно, для интерактивных систем, система частиц используется для визуализации большого количества точек, поскольку системы частиц проектировались для создания и управления большим количеством графических элементов. В первую очередь, мы опробовали стандартную систему частиц, входящую в набор Unity. В первую очередь, нас интересовало максимальное доступное количество точек, которые мы можем отрисовать с помощью системы частиц, ведь визуализация облаков точек, для обеспечения плотности и качества отображения, требует в среднем не менее 1 миллиона точек. Эксперименты показали, что стандартная система частиц не справляется с таким количеством элементов, и к тому же не дает возможности управлять отдельно взятыми точками, после чего от ее использования было решено отказаться.Having these requirements, we chose a particle system as a visualization tool. Traditionally, for interactive systems, a particle system is used to render a large number of points, since particle systems were designed to create and manipulate large numbers of graphical elements. First of all, we tried out the standard particle system included in the Unity kit. First of all, we were interested in the maximum available number of points that we can draw using a particle system, because visualizing point clouds, to ensure density and display quality, requires on average at least 1 million points. Experiments showed that the standard particle system cannot cope with such a number of elements, and also does not provide the ability to control individual points, after which it was decided to abandon its use.

Нами был опробован механизм визуализации, использующий Unity VFX Graph. Данный компонент был создан, для реализации внутри проектов Unity комплексных спецэффектов. Будучи в своей основе системой частиц, VFX Graph поддерживает работу с большим количеством точек, не нагружая чрезмерно ресурсы устройства. Помимо этого, VFX Graph, изначально создавался для работы со сложными расчетами, поэтому имеет функционал доступа к графическому буферу.We tested a visualization engine using Unity VFX Graph. This component was created to implement complex special effects within Unity projects. Being a particle system at its core, VFX Graph supports working with a large number of points without over-taxing the device's resources. In addition, VFX Graph was originally created to work with complex calculations, so it has functionality for accessing the graphics buffer.

Алгоритм декодирования отправлял данные в тестовый вариант VFX Graph, создавая точки, задавая им положение и цвет. Данный вариант показал себя наилучшим образом, сохраняя высокий FPS (-400) и большое количество точек (307 200 точек).The decoding algorithm sent data to a test version of VFX Graph, creating points, giving them a position and color. This option performed best, maintaining a high FPS (-400) and a large number of points (307,200 points).

Таким образом, нами был выбран VFX Graph в качестве подсистемы визуализации.Thus, we chose VFX Graph as the visualization subsystem.

Первоначально, мы отправляли данные в VFX Graph напрямую, однако это создавало ограничение на скорость обработки данных. Для избежания этой проблемы, мы создали вычислительный шейдер. Внутрь этого шейдера, мы перенесли алгоритм декодирования. Такая схема позволила освободить главный вычислительный поток приложения от тяжелых расчетов, и оперировать на уровне графического ядра. Алгоритм декодирования, описанный в главе 1, был перенесен целиком, без изменений, с поправкой на синтаксис языка HLSL.Initially, we sent data directly to VFX Graph, but this created a limitation on the processing speed of the data. To avoid this problem, we created a compute shader. We moved the decoding algorithm inside this shader. This scheme made it possible to free the main computing thread of the application from heavy calculations and operate at the graphics core level. The decoding algorithm described in Chapter 1 has been transferred entirely, without changes, adjusted to the syntax of the HLSL language.

Далее, возник вопрос, каким образом можно избежать повторного размещения точек на одной и той же координате. Поскольку, мы работаем с видеопотоком, каждый последующий кадр, скорее всего, будет мало отличаться от предыдущего. Из-за этого, в процессе декодирования и размещения точек, имеется недостаток - на одну точку в пространстве могут приходиться другие точки-дубликаты. Эти дубликаты являются шумом, и его требуется отфильтровать, поскольку данные точки повторяют полезную информацию и не несут пользы, нагружая вычислительные ресурсы. Наша система требует все максимально доступные вычислительные ресурсы, и, очищая данные дубликаты, мы высвобождаем больше ресурсов для полезной нагрузки.Next, the question arose of how to avoid repeatedly placing points on the same coordinate. Since we are working with a video stream, each subsequent frame will most likely differ little from the previous one. Because of this, in the process of decoding and placing points, there is a disadvantage - for one point in space there may be other duplicate points. These duplicates are noise and need to be filtered out, since these points repeat useful information and are not useful, loading computing resources. Our system requires all the maximum available computing resources, and by cleaning these duplicates, we free up more resources for the payload.

Поскольку мы ограничены производительностью и количеством данных, мы не можем использовать классические методы (сингулярное разложение, метод ближайших итеративных точек). Кроме того, нам необходимо иметь возможность взаимодействовать с точками постфактум, не производя сложных вычислений.Since we are limited by performance and amount of data, we cannot use classical methods (singular decomposition, nearest iterative point method). Additionally, we need to be able to interact with points after the fact without having to perform complex calculations.

Однако, в процессе ознакомления с академическими материалами, мы обнаружили материал, посвященный хэшированию вокселей с помощью октодерева. Данная методика справлялась с обоими факторами, и мы решили использовать октодеревья. Первой причиной использования октодеревьев является возможность хранить информацию в структурированном виде, позволяющем быстро обратиться к конкретной точке. Исходя из первой причины, мы можем взаимодействовать с обработанными данными, что потребуется для дальнейшего создания инструментов. Также, структура октодеревьев требует меньше затрат по памяти, нежели другие доступные способы хранения. В совокупности, использование октодеревьев позволяет нам работать внутри ограничений.However, in the process of familiarizing ourselves with academic materials, we discovered material devoted to voxel hashing using an octree. This technique dealt with both factors, and we decided to use octrees. The first reason to use octrees is the ability to store information in a structured way that allows you to quickly access a specific point. Based on the first reason, we can interact with the processed data, which will be required for further creation of tools. Also, the octree structure requires less memory overhead than other available storage methods. Taken together, the use of octrees allows us to work within constraints.

Была начата работа над внедрением механизма октодеревьев в наше решение.Work has begun on implementing the octree mechanism into our solution.

В первую очередь, было создано разбиение пространства на блоки, которым была присвоена координата в целочисленном виде. Это позволяет нам получить по этим координатам область в памяти, отвечающую за строго определенный участок, содержащий указатели на нисходящие уровни октодерева. Далее, поскольку каждый блок хранит указатель на строго определенное октодерево, мы берем точку, полученную в результате декодирования, и округляем ее координату в целочисленный вид. Округление координаты позволяет нам наиболее эффективным способом локализовать наиболее подходящий для точки в пространстве блок, поскольку координата точки и индексация блоков будут совпадать.First of all, a division of space into blocks was created, to which a coordinate was assigned in integer form. This allows us to obtain, from these coordinates, an area in memory that is responsible for a strictly defined area containing pointers to descending levels of the octree. Next, since each block stores a pointer to a strictly defined octree, we take the point obtained as a result of decoding and round its coordinate to an integer. Coordinate rounding allows us to localize the block most suitable for a point in space in the most efficient way, since the coordinate of the point and the indexing of the blocks will coincide.

Первоначально, мы разбиваем пространство на объемы (чанки) произвольного размера, тем самым мы получаем область пространства, в которую входит координата точки. Следующим шагом, поскольку мы имеем наиболее подходящий блок, происходит размещение точки в октодерево, принадлежащее подходящему блоку. Это происходит благодаря рекурсивной функции, которая делит пространство пополам, и проверяет, в какой половине оказывается точка. Путем деления пространства, мы получаем уровни октодерева, рекурсивное деление происходит, пока пространство не будет наиболее полно совпадать с положением точки. Дойдя до самого низкого уровня, мы проверяем, имеется ли в данном регионе выделенная память, и если нет, то мы размечаем регион памяти, и помещаем туда точку.Initially, we divide the space into volumes (chunks) of arbitrary size, thereby we obtain a region of space that includes the coordinate of the point. The next step, since we have the most suitable block, is to place the point in the octree belonging to the suitable block. This happens thanks to a recursive function that divides the space in half and checks which half the point ends up in. By dividing the space, we obtain the levels of the octree, recursively dividing until the space most closely matches the position of the point. Having reached the lowest level, we check whether there is allocated memory in this region, and if not, then we mark up the memory region and place a point there.

Таким образом, был реализован алгоритм размещения точек, и один из методов шумоподавления - при заполнении блока, мы не заполняем уже заполненную точку, и таким образом, производим вторичную фильтрацию от шума.Thus, an algorithm for placing points was implemented, and one of the noise reduction methods - when filling a block, we do not fill an already filled point, and thus perform secondary filtering from noise.

В ходе тестирования, результаты которого описаны в последней главе - обозначилась еще одна серьезная проблема, появление которой мы не учли перед началом работ - появление шумов и искажение данных глубины при масштабировании карты глубины, связанные с применением различных методов масштабирования изображений.During testing, the results of which are described in the last chapter, another serious problem emerged, the emergence of which we did not take into account before starting work - the appearance of noise and distortion of depth data when scaling the depth map, associated with the use of various image scaling methods.

Поскольку данные проблемы являются достаточно серьезными, мы начали разработку алгоритма для увеличения разрешения карты глубины. Изначально, разрешение карты глубины LIDAR составляет 256×192 пикселей, и для того, чтобы иметь возможность совмещать цветное изображение и карту глубины, мы увеличиваем карту глубины методом соседних пикселей до разрешения 640×480. Данное разрешение является оптимальным, поскольку позволяет сохранить баланс между качеством картинки и количеством данных, содержащихся в ней. Очевидно, что метод соседних пикселей не справляется с предоставлением карте глубины достаточного качества, поэтому мы начали изыскания для улучшения положения.Since these problems are quite serious, we began developing an algorithm to increase the resolution of the depth map. Initially, the resolution of the LIDAR depth map is 256x192 pixels, and in order to be able to combine the color image and the depth map, we upscale the depth map using the neighbor pixel method to a resolution of 640x480. This resolution is optimal because it allows you to maintain a balance between the quality of the image and the amount of data contained in it. Obviously, the neighbor pixel method is not able to provide a depth map of sufficient quality, so we began research to improve the situation.

Нами был осуществлен анализ существующих решений для увеличения изображения. Ранее, мы обрабатывали изображения вручную, с помощью программы Converseen. Процесс выглядел так:We carried out an analysis of existing solutions for image enlargement. Previously, we processed images manually using the Converseen program. The process looked like this:

Загрузка карт глубины в ConverseenLoading depth maps into Converseen

Указываем параметры - формат и итоговое разрешение изображенийSpecify the parameters - format and final resolution of the images

Запускаем конвертациюLet's start the conversion

Несмотря на простоту процесса, Converseen не давал требуемой гибкости в настройках методов увеличения изображения, и требовал ручной обработки, что в итоге на тестировании привело к неудовлетворительным результатам и замедляло процесс подготовки. Также, Converseen интерполировал края контрастных участков на изображении, что в итоге давало на сканировании скругленную, не совпадающую с реальным объектом геометрию.Despite the simplicity of the process, Converseen did not provide the required flexibility in setting up image enlargement methods and required manual processing, which ultimately led to unsatisfactory results in testing and slowed down the preparation process. Also, Converseen interpolated the edges of contrasting areas in the image, which ultimately produced a rounded geometry in the scan that did not match the real object.

Поэтому, следующим шагом стали изыскания на тему вариантов встраиваемых в решение механизмов, позволяющих увеличивать изображение.Therefore, the next step was research on options for mechanisms built into the solution that allow you to enlarge the image.

Сначала, мы рассматривали OpenCV в качестве поставщика методов увеличения изображения. Однако, поскольку для использования OpenCV требовался wrapper, который не включал в себя необходимые нам методы, этот вариант был отклонен.First, we considered OpenCV as a provider of image enlargement methods. However, since using OpenCV required a wrapper that did not include the methods we needed, this option was rejected.

Следующим, мы рассматривали встроенные в.NET средства увеличения изображения. Эти средства предоставлялись внутри именного пространства System.Drawing. Этот метод не подошел нам, поскольку на практике, работа этого варианта оказалась весьма медленной, и предоставляла ограниченный набор инструментов.Next, we looked at the image enlargement tools built into .NET. These facilities were provided within the System.Drawing namespace. This method did not suit us, because in practice, this option turned out to be very slow and provided a limited set of tools.

Наконец, мы рассматривали библиотеку Magicklmage, подключенную с помощью wrapper для языка С#, а именно метод Magicklmage.Scale(), который усредняет среднее значение пикселя с учетом соседних, образуя, таким образом, итоговое интерполированное изображение.Finally, we looked at the Magicklmage library, connected using a wrapper for the C# language, namely the Magicklmage.Scale() method, which averages the average pixel value taking into account neighboring ones, thus forming the final interpolated image.

Последний метод показал наибольшую эффективность, поскольку давал возможность контролировать степень интерполяции, и выполнять обработку в реальном времени, параллельно работе основных механик. Также, метод показал высокую производительность, что является одним из важнейших условий работы нашего решения.The latter method showed the greatest efficiency, since it made it possible to control the degree of interpolation and perform processing in real time, in parallel with the work of the main mechanics. Also, the method showed high performance, which is one of the most important conditions for the operation of our solution.

Механизм отрисовки трехмерной модели в реальном времениReal-time 3D model rendering engine

Мы спроектировали и создали важные фрагменты системы - декодирование данных и их визуализацию, после чего приступили к визуализации в реальном времени.We designed and created important parts of the system - data decoding and visualization, and then began real-time visualization.

Поскольку на данном этапе мы работали с датасетом, а не с живым потоком, то была собрана система эмулирующая отправку потока данных с портативного устройства. Эмулятор потока содержал в себе датасет, механизмы запуска и остановки воспроизведения, а также управление виртуальной камеры. Первоначально, мы задали камере положение, соответствующее одному кадру, теперь же имея эмулятор потока, мы изменяли положение виртуальной камеры согласно позе устройства. Для отслеживания пройденного пути была добавлено графическое представление траектории в виде линии.Since at this stage we were working with a dataset, and not with a live stream, a system was assembled that emulated sending a data stream from a portable device. The stream emulator contained a dataset, mechanisms for starting and stopping playback, as well as virtual camera control. Initially, we set the camera position corresponding to one frame, but now having a stream emulator, we changed the position of the virtual camera according to the pose of the device. To track the path traveled, a graphical representation of the trajectory in the form of a line was added.

Запустив эмулятор потока в реальном времени с отключенным декодированием точек, мы получили траекторию, совпадающую с реальным перемещением устройства, во время записи датасета. Это подтвердило нашу гипотезу о синхронизации положений с помощью SLAM. Измерения отрезков полученной траектории на сцене соответствовали реальным размерам объекта в метрах.By running the real-time stream emulator with point decoding disabled, we obtained a trajectory that coincided with the actual movement of the device while recording the dataset. This confirmed our hypothesis about position synchronization by SLAM. The measurements of the segments of the resulting trajectory on the stage corresponded to the actual dimensions of the object in meters.

Получив подтверждение о работоспособности эмулятора потока, и его механики эмуляции перемещения камеры устройства, мы приступили к обработке данных в реальном времени. Первоначально, мы отрисовывали VFX Graph каждые 500 фреймов, в результате чего получили результат изображенный на фиг.10.Having received confirmation of the functionality of the stream emulator and its mechanics for emulating the movement of the device’s camera, we began processing data in real time. Initially, we rendered the VFX Graph every 500 frames, resulting in the result shown in Fig. 10.

Вместе с этим, мы добавили шумоподавление на основе исключения соседних точек находящихся на резком удалении друг от друга см. фиг.11.At the same time, we added noise reduction based on the exclusion of neighboring points located at a sharp distance from each other, see Fig. 11.

Удовлетворенные данными результатами, мы уменьшали промежуток кадров, пока в результате оптимизаций алгоритмов, не стали обрабатывать каждый фрейм.Satisfied with these results, we reduced the frame interval until, as a result of algorithm optimizations, we began to process every frame.

Разработка прототипа визуализации перемещения пользователя в физическом пространствеDevelopment of a prototype for visualizing user movement in physical space

После реализации механизма отрисовки трехмерной модели в реальном времени, было решено добавить визуализацию перемещений пользователя в реальном мире, на виртуальной сцене.After implementing the mechanism for rendering a three-dimensional model in real time, it was decided to add visualization of the user’s movements in the real world, on a virtual stage.

Механизм отрисовки подразумевает перемещение виртуальной камеры, согласно положению сканирующего устройства, следовательно, логично было бы опираться на виртуальную камеру.The rendering mechanism involves moving the virtual camera according to the position of the scanning device, therefore, it would be logical to rely on the virtual camera.

В первую очередь, на виртуальную камеру был добавлен механизм, отрисовывающий линейную траекторию перемещения. В первую очередь был опробован компонент Line Renderer.First of all, a mechanism was added to the virtual camera that draws a linear trajectory of movement. First of all, the Line Renderer component was tested.

Line Renderer входит в состав стандартных компонентов движка Unity, и предназначен для отрисовки линий. Данный компонент содержит в себе:Line Renderer is part of the standard components of the Unity engine, and is designed for drawing lines. This component contains:

Настройку положения и значения толщины промежуточных точекSetting the position and thickness of intermediate points

Настройку материала линииSetting the line material

Настройка положения и толщины промежуточных точек позволяет создавать сложные формы, путем создания записи о промежуточной точке, с указанием координаты положения данной точки. Принцип действия схож с созданием кривых Безье, однако, в отличии от кривой Безье, Line Renderer не сглаживает траекторию, каждая промежуточная точка соединяется по прямой.Adjusting the position and thickness of intermediate points allows you to create complex shapes by creating a record of an intermediate point, indicating the coordinate position of this point. The principle of operation is similar to creating Bezier curves, however, unlike a Bezier curve, Line Renderer does not smooth the trajectory; each intermediate point is connected in a straight line.

Настройка материала позволяет выбрать цвет и характеристики линии. Для визуализации, компонент использует плоские изображения-спрайты, повернутые перпендикулярно углу камеры, для создания имитации объема. Такой подход позволяет экономить графические ресурсы, не отрисовывая трехмерные модели линии, поскольку для создания промежуточных точек, трехмерная модель потребовала бы добавления полигонов и их деформации. Количество информации содержащейся в 3д модели кривой линии, превосходит количество информации требуемой для построения спрайтовой кривой линии.The material setting allows you to select the color and characteristics of the line. For rendering, the component uses flat sprite images rotated perpendicular to the camera angle to create a simulated volume. This approach allows you to save graphic resources by not drawing 3D line models, since to create intermediate points, a 3D model would require adding polygons and deforming them. The amount of information contained in a 3D model of a curved line exceeds the amount of information required to construct a sprite curved line.

Line Renderer был выбран в качестве инструмента визуализации, поскольку подходил по следующим критериям:Line Renderer was chosen as a visualization tool because it met the following criteria:

- низкие требования к ресурсам,- low resource requirements,

- возможность гибкой настройки,- possibility of flexible configuration,

- возможность создавать промежуточные точки, при изменении траектории.- the ability to create intermediate points when changing the trajectory.

Далее, для работы с Line Renderer, был создан скрипт под названием CameraTrajectoryRenderer, управляющий созданием промежуточных значений линии. Алгоритм работы данного скрипта, следующий:Next, to work with the Line Renderer, a script called CameraTrajectoryRenderer was created, which controls the creation of intermediate line values. The algorithm for this script is as follows:

При инициализации, скрипт подписывает процедуру обновления линии на событие обновления линии.When initialized, the script subscribes the line update procedure to the line update event.

Метод обновления линии проверяет, что значение текущего кадра кратно 50, после чего внедряет в компонент Line Renderer новую промежуточную точку, под порядковым номером Index, и с координатами положения, полученными от текущего значения выборки датасета. Затем, порядковый номер Index инкрементируется, после чего процесс повторяется при срабатывании события.The line update method checks that the value of the current frame is a multiple of 50, and then inserts a new intermediate point into the Line Renderer component, under the index number, and with position coordinates obtained from the current value of the dataset sample. Then, the index number is incremented, after which the process is repeated when the event is triggered.

В результате, мы получили отрисованную траекторию перемещения пользователя.As a result, we received a drawn trajectory of the user's movement.

Далее, для получения визуальной информации о текущем угле поворота камеры, было решено привязать к объекту камеры трехмерную модель, схематически изображающую человека. Эта модель имеет усредненную высоту взрослого человека (1 м 80 см), и схематически обозначенное положение глаз. Положение модели привязано к положению камеры, где центром модели являются схематические «глаза».Next, to obtain visual information about the current angle of rotation of the camera, it was decided to attach a three-dimensional model, schematically depicting a person, to the camera object. This model has the average height of an adult (1 m 80 cm), and the position of the eyes is schematically indicated. The position of the model is tied to the position of the camera, where the center of the model is the schematic “eyes”.

Таким образом, мы смогли получить информацию, о том, в какую сторону смотрит виртуальная камера, в контексте сцены.Thus, we were able to obtain information about which direction the virtual camera is looking in the context of the scene.

Разработка функционала клиент-серверного взаимодействия, между визуализированным пространством и реальным миромDevelopment of functionality for client-server interaction between the visualized space and the real world

Имея готовый инструментарий для вычисления и визуализации модели внутри виртуальной сцены, следующим шагом стало добавление взаимодействия клиента с сервером, в рамках задачи создания технологического решения для осуществления связи и коллаборативной работы нового поколения.Having ready tools for calculating and visualizing the model inside the virtual scene, the next step was to add client-server interaction, as part of the task of creating a technological solution for next-generation communication and collaboration.

Поскольку такой шаг требует наличия инструментов взаимодействия, а не только визуализации, нами был добавлен следующий функционал:Since such a step requires interaction tools, and not just visualization, we added the following functionality:

Механизмы сохранения визуализированной моделиMechanisms for saving a rendered model

Одним из важных критериев полезности нашего технологического комплекса, является возможность создания, сохранения, загрузки и обработки информации. Для этого, нами были созданы механизмы сохранения полученного в результате сканирования облака точек.One of the important criteria for the usefulness of our technological complex is the ability to create, save, download and process information. For this, we have created mechanisms for saving the point cloud obtained as a result of scanning.

Во-первых, был создан механизм сохранения полученного облака в формат PLY. Данный формат является стандартом хранения облаков точек и платформонезависимых 3д моделей, а также не требует для работы проприетарных модулей.First, a mechanism was created to save the resulting cloud in the PLY format. This format is a standard for storing point clouds and platform-independent 3D models, and also does not require proprietary modules for operation.

Был создан скрипт, который имел следующую структуру:A script was created that had the following structure:

- ссылка на текущий, действующий, скрипт управления реконструкцией,- link to the current reconstruction management script,

- переменная, отвечающая за имя сохраняемого файла,- a variable responsible for the name of the saved file,

- переменная, отвечающая за системный путь сохраняемого файла,- a variable responsible for the system path of the saved file,

- переменная, отвечающая за фактор масштабирования целевого облака точек,- variable responsible for the scaling factor of the target point cloud,

- метод, отвечающий за сохранение облака точек, в текстовом формате,- a method responsible for saving the point cloud in text format,

- метод, отвечающий за сохранение облака точек, в бинарном формате.- a method responsible for saving a point cloud in a binary format.

Первоначально, была реализована схема сохранения файла в текстовом формате, в кодировке ASCII 1.0. Это было необходимо, поскольку бинарный формат сохраняет данные в виде не читаемым человеком, а нам было необходимо отследить аномалии и ошибки, возникающие при сохранении облака точек. Была изучена структура файла PLY, и установлено, что файл PLY состоит из ряда заголовочных данных, после которых следует массив, описывающий строение 3д модели.Initially, a scheme was implemented to save the file in text format, in ASCII 1.0 encoding. This was necessary because the binary format stores data in a form that is not human-readable, and we needed to track anomalies and errors that occur when saving a point cloud. The structure of the PLY file was studied, and it was found that the PLY file consists of a series of header data, followed by an array describing the structure of the 3D model.

В метод были добавлены следующие заголовки:The following headers have been added to the method:

Строка "ply", которая означает что данный файл имеет формат PLYThe string "ply", which means that this file is in PLY format

Строка «format ascii 1.0», означающая кодировку целевого файлаThe string "format ascii 1.0" indicating the encoding of the target file

Строка «element vertex» с добавлением количества точек, уже просчитанных нашей системой реконструкции. Эта строка позволяет сторонним приложениям ожидать определенное количество структурных элементов 3д-сеткиThe string “element vertex” with the addition of the number of points already calculated by our reconstruction system. This line allows third-party applications to expect a certain number of 3D mesh structural elements

Далее следует ряд свойств, описывающих структуру массива. Эти свойства - координаты X, Y, Z, а также цвет, в формате R, G, B.Next comes a series of properties that describe the structure of the array. These properties are X, Y, Z coordinates, as well as color, in the format R, G, B.

Последним заголовком является строка «end_header», обозначающая переход к массиву структуры.The last header is the line "end_header", indicating the transition to the structure array.

Далее, следует структура 3д-сетки в формате:Next, follows the structure of the 3D mesh in the format:

Координата X, координата Y, координата Z, значение R, значение G, значение ВX coordinate, Y coordinate, Z coordinate, R value, G value, B value

Данные заполняются в цикле, размером с количество просчитанных точек. Заполнение координат происходит по формуле:The data is filled in a cycle, the size of the number of calculated points. The coordinates are filled in according to the formula:

Где - значение координаты по одной из осей, Where - coordinate value along one of the axes,

коэффициент сдвига по одной из осей, D - коэффициент фактора масштабированияshift coefficient along one of the axes, D - scaling factor coefficient

После заполнения координатной информацией, происходит заполнение параметров цвета точки. Для соответствия стандартам цвета формата PLY, 32-битное значение цвета, полученное из цветного кадра, переводится в однобайтовое, поканально, после чего записывается. Для удобства пользователя, ведется отсчет времени, затраченного на сохранение.After filling in the coordinate information, the color parameters of the point are filled in. To comply with PLY format color standards, the 32-bit color value obtained from the color frame is converted to a single-byte, per-channel value, and then written. For the convenience of the user, the time spent on saving is counted.

Алгоритм сохранения модели через текстовый формат показал свою работоспособность, облако точек, состоящее из 11 744 136 вершин, сохранилось за 33.4 секунды, занимая на диске 285 мегабайт.The algorithm for saving the model through a text format showed its efficiency; a point cloud consisting of 11,744,136 vertices was saved in 33.4 seconds, occupying 285 megabytes on disk.

Однако в силу того, что в текстовом виде, информация занимает больше места, было решено реализовать механизм сохранения файла в бинарном формате. Алгоритм данного механизма идентичен механизму сохранения в текстовом виде, с той разницей, что для бинарного сохранения, значения предварительно переводились в двоичный вид. При тестировании готового механизма, схожий объем данных сохранился за схожее время, но занимал на диске приблизительно 140 мегабайт, что вдвое меньше, чем при текстовом формате.However, due to the fact that information in text form takes up more space, it was decided to implement a mechanism for saving the file in a binary format. The algorithm of this mechanism is identical to the mechanism for saving in text form, with the difference that for binary saving, the values were first converted into binary form. When testing the finished mechanism, a similar amount of data was stored in a similar time, but it took up approximately 140 megabytes on disk, which is half as much as in the text format.

Далее, был реализован механизм сохранения отсканированного облака точек для последующей визуализации внутри нашего решения.Next, a mechanism was implemented to save the scanned point cloud for subsequent visualization within our solution.

Имея массив индексов октодерева, мы записываем его в бинарный файл, в формате читаемым нашим решением. Данный метод сохранения позволяет нам продолжать работу с отсканированным ранее пространством, например, продолжить реконструкционное сканирование. Также, поскольку данный метод работает напрямую с форматом данных, используемым внутри механизмов приложения, мы исключаем возможность внесения ошибок интерпретации. Минусом данного метода является невозможность работы с сохраненными данными в сторонних приложениях.Given an array of octree indices, we write it to a binary file in a format readable by our solution. This saving method allows us to continue working with previously scanned space, for example, to continue reconstruction scanning. Also, since this method works directly with the data format used within the application engines, we eliminate the possibility of introducing interpretation errors. The disadvantage of this method is the inability to work with saved data in third-party applications.

Далее, был реализован механизм измерения расстояний на отсканированном облаке точек. Данный механизм был реализован для того, чтобы иметь возможность сверить значение показаний размера, относительно реальных объектов. Учитывая, что наше приложение предполагается для использования в строительной сфере, механика измерения расстояний является неотъемлимой, для данного направления.Next, a mechanism for measuring distances on a scanned point cloud was implemented. This mechanism was implemented in order to be able to verify the value of size readings relative to real objects. Considering that our application is intended for use in the construction industry, the mechanics of measuring distances is integral to this area.

Механизм измерения был реализован благодаря использованию структуры октодеревьев для хранения координат точек, он работает следующим образом:The measurement mechanism was implemented by using an octree structure to store the coordinates of points, it works as follows:

Создается итеративная репроекция октодерева, заполняемая компонентом Box Collider.An iterative reprojection of the octree is created and populated by the Box Collider component.

С помощью механизма Raycast, мы ищем наименьший уровень октодерева, содержащий точки.Using the Raycast mechanism, we find the smallest octree level containing points.

Создается итеративная репроекция для каждой точки внутри полученного чанка, заполняемая компонентом Box Collider.An iterative reprojection is created for each point inside the resulting chunk, filled with the Box Collider component.

С помощью функционала механизма Raycast, мы получаем координату столкновения луча с искомой точкой.Using the functionality of the Raycast mechanism, we obtain the coordinate of the collision of the ray with the desired point.

Этот механизм срабатывает дважды, сначала пользователь размещает первую точку отрезка измерения, затем размещает вторую точку. Имея две координаты в пространстве, вычисляется расстояние между ними, с помощью функции Vector3.Distance, результат графически отображается на отрисованном отрезке.This mechanism works twice, first the user places the first point of the measurement segment, then places the second point. Having two coordinates in space, the distance between them is calculated using the Vector3.Distance function, the result is graphically displayed on the drawn segment.

Итого, имея набор инструментов, для взаимодействия с приложением, мы начали реализовывать клиент-серверную связь. В качестве протокола передачи событий и координат, нами был выбран TCP. Решающим фактором для выбора TCP стала необходимость использования разных платформ и разных языков реализации. Протокол TCP является многофункциональным решением для сетевого соединения самых разнообразных платформ.So, having a set of tools to interact with the application, we began to implement client-server communication. We chose TCP as the protocol for transmitting events and coordinates. The decisive factor for choosing TCP was the need to use different platforms and different implementation languages. The TCP protocol is a multifunctional solution for networking a wide variety of platforms.

В качестве протокола передачи видеопотока, нами был выбрано решение Agora. В первую очередь были написаны реализации TCP сокета для серверной части, и приложения на телефон. ТСР-сокет, внутри нашего решения, отвечает за передачу событий и данных. Поскольку, мы хотим встроить возможность создавать в серверном приложении метки, которые затем увидит пользователь на портативном устройстве, нам необходимо иметь систему событий, которые бы отправлялись на удаленное устройство, интерпретируясь портативным решением как «создать объект метки», или «удалить объект метки». Вместе с событием создания\удаления, нам необходимо передавать текущую координату метки, на которой необходимо поместить метку. Таким образом, ТСР-стэк на сервере, в режиме реального времени отправляет пакет данных следующего вида:We chose the Agora solution as the video stream transmission protocol. First of all, TCP socket implementations were written for the server part and applications for the phone. The TCP socket, inside our solution, is responsible for transmitting events and data. Since we want to build in the ability to create tags in the server application that will then be seen by the user on the portable device, we need to have a system of events that would be sent to the remote device, interpreted by the portable solution as “create a tag object” or “delete a tag object”. Together with the creation/deletion event, we need to pass the current coordinate of the label on which to place the label. Thus, the TCP stack on the server sends a data packet of the following type in real time:

(имя метки), (создание\удаление\обновление), (координаты), (угол поворота)(label name), (create\delete\update), (coordinates), (rotation angle)

Этот пакет принимается и интерпретируется алгоритмом работы внутри портативного приложения. Как уже было описано ранее, координаты внутри реального мира, и координаты на виртуальной сцене совпадают, поэтому мы отправляем координаты согласно расположению пользователем объекта на виртуальной сцене. Имя метки необходимо для того, чтобы алгоритм имел ссылку на конкретную метку (если она уже есть), либо для создания новой метки с возможностью ссылки на нее. Событие определяет операцию, которую необходимо выполнить над меткой - в случае создания мы размещаем метку, в случае удаления мы удаляем метку, в случае обновления мы обновляем координаты метки. Далее идут координаты и углы поворота, которые применяются к объекту метки на стороне удаленного приложения.This packet is received and interpreted by the algorithm inside the portable application. As described earlier, the coordinates inside the real world and the coordinates in the virtual scene are the same, so we send coordinates according to the user's location of the object in the virtual scene. The label name is necessary so that the algorithm has a link to a specific label (if it already exists), or to create a new label with the ability to link to it. The event defines the operation to be performed on the label - in case of creation we place the label, in case of deletion we delete the label, in case of update we update the coordinates of the label. Next are the coordinates and rotation angles that are applied to the label object on the remote application side.

Agora используется для передачи потока видеокадров с цветной камеры и камеры глубины. Эти кадры поступают в систему реконструкции, и используются согласно описанным выше алгоритмам. Через ТСР-сокет, устройство отправляет параметры камеры (положение, вращение, параметры матрицы) на сервер, и эти данные в дальнейшем используются как описано выше.Agora is used to transmit a stream of video frames from a color camera and a depth camera. These frames enter the reconstruction system and are used according to the algorithms described above. Via a TCP socket, the device sends camera parameters (position, rotation, matrix parameters) to the server, and this data is subsequently used as described above.

При активации инструмента «Метка» на сервере, от пользователя требуется сделать клик мышью на реконструированной модели, поместив метку туда, где это необходимо. Далее, механизм отправляет через ТСР-сокет строку, содержащее событие создания новой метки под определенным именем, и с координатами, соответствующими положению клика. Эта строка принимается устройством, и обрабатывается, создавая метку с определенным именем.When activating the Mark tool on the server, the user is required to click on the reconstructed model, placing the mark where necessary. Next, the mechanism sends a string via the TCP socket containing the event of creating a new label under a specific name, and with coordinates corresponding to the position of the click. This string is received by the device and processed to create a tag with a specific name.

Пользователь также может отредактировать положение уже размещенной метки. Для этого, первым кликом выбирается метка, а вторым кликом определяется ее новое положение. После второго клика, ТСР-сокет отправляет событие обновления метки под именем, полученным после выбора метки. Это событие принимается устройством, и интерпретируется как изменение положения выбранной метки, задавая ей новые координаты.The user can also edit the position of an already placed mark. To do this, the first click selects the mark, and the second click determines its new position. After the second click, the TCP socket sends a label update event under the name obtained after selecting the label. This event is received by the device and interpreted as a change in the position of the selected mark, giving it new coordinates.

Помимо создания и обновления, пользователь может удалить метку. Для этого нужно выбрать уже размещенную метку, после чего нажать на кнопку удаления. ТСР-сокет отправляет событие удаления, и имя выбранной метки. Устройство принимает данное событие и производит удаление данной метки.In addition to creating and updating, the user can delete a label. To do this, you need to select an already placed label, and then click on the delete button. The TCP socket sends a delete event and the name of the selected label. The device receives this event and deletes this tag.

Тестирование прототипа системыSystem prototype testing

Имея готовую версию, мы приступили к тестированию.Having a ready version, we started testing.

Сверка измерений между реальным миром и реконструкциейReconciliation of measurements between the real world and reconstruction

Нами был выбран полигон в лице лестничной площадки. Также, в реальном мире, была размещена линейка длиной 30 сантиметров. В результате реконструкции, мы измерили виртуальным инструментом длину линейки, и получили в результате 30 сантиметров с погрешностями меньше одной тысячной метра см. фиг. 12.We chose a testing ground in the form of a staircase landing. Also, in the real world, a ruler 30 centimeters long was placed. As a result of the reconstruction, we measured the length of the ruler with a virtual instrument, and the result was 30 centimeters with errors of less than one thousandth of a meter, see Fig. 12.

По итогам проделанных работ нам удалось подтвердить все стартовые гипотезы. Мы доказали, что возможна реализация системы точной трехмерной реконструкции в реальном времени с использование LIDAR низкого разрешения, который размещен в устройствах семейства Iphone.Based on the results of the work done, we were able to confirm all the starting hypotheses. We have proven that it is possible to implement an accurate 3D reconstruction system in real time using low-resolution LIDAR, which is located in the iPhone family of devices.

При этом была решена значительная проблема - устройство динамически перемещается в пространстве и каждый кадр требуется вычислять его точную позицию для реконструкции. Решение данной проблемы позволило нам создать инструмент, позволяющий получить трехмерную копию любого объекта или помещения без наличия дорогостоящего оборудования или специфических навыков в фотограмметрии или пользовании промышленными сканерами. Более того в процессе реализации решения мы открыли для себя новые подходы к построению облаков точек и работы с этими данными, это позволило нам создать возможность регуляции разрешения итогового скана. Теперь мы можем также подстраивать точность под различные нужды и вычислительные возможности конечных устройств.At the same time, a significant problem was solved - the device dynamically moves in space and each frame requires calculating its exact position for reconstruction. Solving this problem allowed us to create a tool that allows us to obtain a three-dimensional copy of any object or room without expensive equipment or specific skills in photogrammetry or the use of industrial scanners. Moreover, in the process of implementing the solution, we discovered new approaches to constructing point clouds and working with this data, which allowed us to create the ability to regulate the resolution of the final scan. We can now also tailor accuracy to the different needs and computing capabilities of end devices.

Созданное решение не имеет аналогов по степени точности и возможности работы в реальном времени. Мы превосходим их как в плане скорости, так и в плане точности.The created solution has no analogues in terms of accuracy and ability to work in real time. We surpass them both in terms of speed and accuracy.

Уже сейчас понятны перспективы и новые задачи – возможно, на основе существующего решения как построение точного меша (3D модели), так и с использованием ИИ превращать созданные облака точек в 2D или 3D планы для архитектурных программ.The prospects and new tasks are already clear - perhaps, based on the existing solution, both building an accurate mesh (3D model), and using AI, turning the created point clouds into 2D or 3D plans for architectural programs.

Claims (12)

1. Система для построения модели трехмерного пространства, содержащая:1. A system for constructing a three-dimensional space model, containing: - устройство захвата изображения, перемещаемое в трехмерном пространстве, для получения изображения трехмерного пространства во времени,- an image capture device that moves in three-dimensional space to obtain an image of three-dimensional space in time, - интерфейс для получения изображений трехмерного пространства, получающий данные изображений от устройства захвата изображения, и- a three-dimensional image acquisition interface receiving image data from the image capture device, and - систему моделирования трехмерного пространства, обрабатывающую данные изображений трехмерного пространства, полученных устройством захвата изображения во времени,- a three-dimensional space modeling system that processes three-dimensional space image data obtained by an image capture device in time, отличающаяся тем, чтоcharacterized in that устройство захвата изображения выполнено в виде телефона на базе IOS с LIDAR,The image capture device is made in the form of an IOS phone with LIDAR, перед построением трехмерного пространства осуществляют калибровку оптической частиbefore constructing a three-dimensional space, the optical part is calibrated камеры и линзы устройства захвата изображения,cameras and lenses of the image capture device, камера устройства захвата изображения для каждого кадра видеоизображения одновременно захватывает данные цвета в формате RGB, данные глубины, IMU данные и данные одометрии,The camera of the image capture device simultaneously captures RGB color data, depth data, IMU data and odometry data for each frame of the video image, а система моделирования трехмерного пространства переводит данные цвета в формате RGB и данные глубины в матрицу пикселей, каждому элементу которой присваивается значение положения, опираясь на значения глубины, и индекса элемента внутри матрицы, после этого полученные координаты точек распределяются по виртуальной сцене, опираясь на данные обработанного элемента, а также на данные IMU и одометрии, во время распределения точек на сцене, создается структура октодерево, служащая для хранения точек в пространстве, с возможностью быстрого доступа к конкретным точкам, затем, на основе заполненного октодерева, создаются визуализационные элементы, отображающие цвет и положение точек, и по полученным данным:and the three-dimensional space modeling system translates color data in RGB format and depth data into a pixel matrix, each element of which is assigned a position value based on the depth values, and an index of the element within the matrix, after which the resulting coordinates of the points are distributed throughout the virtual scene, based on the processed data element, as well as IMU and odometry data, during the distribution of points on the scene, an octree structure is created that serves to store points in space, with the ability to quickly access specific points, then, based on the filled octree, visualization elements are created that display color and position of the points, and according to the data received: осуществляет вычисление точной позиции для каждого кадра, полученного перемещающимся в пространстве телефоном для последующей реконструкции трехмерного пространства.calculates the exact position for each frame received by a phone moving in space for subsequent reconstruction of three-dimensional space. 2. Система по п. 1 формулы, отличающаяся тем, что при калибровке оптической части камеры и линзы устройства захвата изображения вычисляют параметры матрицы и линзы для определения искажений попадающего света.2. The system according to claim 1 of the formula, characterized in that when calibrating the optical part of the camera and the lens of the image capture device, the parameters of the matrix and lens are calculated to determine the distortions of the incident light.
RU2023110693A 2023-04-26 System for constructing three-dimensional space model RU2812950C1 (en)

Publications (1)

Publication Number Publication Date
RU2812950C1 true RU2812950C1 (en) 2024-02-06

Family

ID=

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU136911U1 (en) * 2012-07-12 2014-01-20 Общество с ограниченной ответственностью "Ростр" MOBILE COMPLEX FOR DEMONSTRATION OF REPRESENTATIVES IN ELECTRONIC (DIGITAL) FORM OF 3D-MODELS OF MUSEUM EXHIBITS
US20190012833A1 (en) * 2013-10-25 2019-01-10 Appliance Computing III, Inc. Image-based rendering of real spaces
US20210063578A1 (en) * 2019-08-30 2021-03-04 Nvidia Corporation Object detection and classification using lidar range images for autonomous machine applications
KR102455252B1 (en) * 2019-12-23 2022-10-18 (주)휴론네트워크 Apparatus for visualizing lidar data coupling with mobile realtime and method thereof
RU2783218C1 (en) * 2022-02-15 2022-11-10 Общество с ограниченной ответственностью "Биганто" (ООО "Биганто") Method and system for controlling display of virtual tours in multi-user mode

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU136911U1 (en) * 2012-07-12 2014-01-20 Общество с ограниченной ответственностью "Ростр" MOBILE COMPLEX FOR DEMONSTRATION OF REPRESENTATIVES IN ELECTRONIC (DIGITAL) FORM OF 3D-MODELS OF MUSEUM EXHIBITS
US20190012833A1 (en) * 2013-10-25 2019-01-10 Appliance Computing III, Inc. Image-based rendering of real spaces
US20210063578A1 (en) * 2019-08-30 2021-03-04 Nvidia Corporation Object detection and classification using lidar range images for autonomous machine applications
KR102455252B1 (en) * 2019-12-23 2022-10-18 (주)휴론네트워크 Apparatus for visualizing lidar data coupling with mobile realtime and method thereof
RU2783218C1 (en) * 2022-02-15 2022-11-10 Общество с ограниченной ответственностью "Биганто" (ООО "Биганто") Method and system for controlling display of virtual tours in multi-user mode

Similar Documents

Publication Publication Date Title
Zollmann et al. Augmented reality for construction site monitoring and documentation
JP6951595B2 (en) Housing data collection and model generation methods
Zhang et al. A UAV-based panoramic oblique photogrammetry (POP) approach using spherical projection
CN104330074B (en) Intelligent surveying and mapping platform and realizing method thereof
WO2004042662A1 (en) Augmented virtual environments
Fangi et al. Improving spherical photogrammetry using 360 omni-cameras: Use cases and new applications
US20220067968A1 (en) Motion capture calibration using drones with multiple cameras
CN109472865A (en) It is a kind of based on iconic model draw freedom can measure panorama reproducting method
CN115641401A (en) Construction method and related device of three-dimensional live-action model
JP2023546739A (en) Methods, apparatus, and systems for generating three-dimensional models of scenes
Özdemir et al. A multi-purpose benchmark for photogrammetric urban 3D reconstruction in a controlled environment
Nyland et al. The impact of dense range data on computer graphics
Agosto et al. 3D Documentation of cultural heritage: Design and exploitation of 3D metric surveys
RU2812950C1 (en) System for constructing three-dimensional space model
US11282233B1 (en) Motion capture calibration
CN114777772A (en) Indoor positioning system based on infrared camera and high accuracy IMU
Klinker et al. The use of reality models in augmented reality applications
Chatzifoti On the popularization of digital close-range photogrammetry: a handbook for new users.
Hirzinger et al. Photo-realistic 3D modelling-From robotics perception to-wards cultural heritage
Batakanwa et al. The use of video camera to create metric 3D model of engineering objects
Sedlacek et al. 3D reconstruction data set-The Langweil model of Prague
Zhang et al. A 3D urban scene reconstruction enhancement approach based on adaptive viewpoint selection of panoramic videos
Meerits Real-time 3D reconstruction of dynamic scenes using moving least squares
Fellner et al. Practical 3D reconstruction of cultural heritage artefacts from photographs–potentials and issues
US11600022B2 (en) Motion capture calibration using drones