Я использую внутреннюю камеру (fx, fy, cx, cy, width, hight) для хранения изображения глубины буфера TangoXyzIjData.xyz. Поэтому я вычисляю для каждой точки xyz соответствующую точку изображения и сохраняю ее значение z.
x' = (fx * x) / z + cx
y' = (fy * y) / z + cy
depthImage[x'][y'] = z
Теперь я хотел бы также сохранить соответствующие данные позы. Я использую метку времени TangoXyzIjData.timestamp и следующую функцию
getPoseAtTime(double timestamp, TangoCoordinateFramePair framePair)
с парой кадров
new TangoCoordinateFramePair(TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE, TangoPoseData.COORDINATE_FRAME_DEVICE)
Проблема в том, что поза - это кадр устройства по отношению к началу кадра службы. И изображение глубины получает свои точки от кадра камеры глубины. Как я могу соответствовать им?
Существует способ преобразовать точки камеры глубины в кадр устройства:
- depth2IMU = кадр камеры глубины относительно кадра IMU
- device2IMU = кадр устройства относительно кадра IMU
- device2IMU^-1 = инвертировать кадр устройства относительно кадра IMU
- camera2Device = устройство2IMU^-1 * depth2IMU
Теперь я мог умножить каждую точку облака точек на camera2Device. Но это преобразование в рамку устройства.
Есть ли способ преобразовать позу устройства в позу камеры?