Почему моя проекция 3D-объекта не совпадает в Pyrender с внутренними функциями и позой ARKit?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему моя проекция 3D-объекта не совпадает в Pyrender с внутренними функциями и позой ARKit?

Сообщение Anonymous »

Я работаю с репозиторием неявной глубины от Niantic Labs, но столкнулся с проблемой. В репозитории нет общего кода для проецирования 3D-точек или значений глубины на плоскость изображения 2D-камеры.
Я пытаюсь спроецировать 3D-объект в сцену, используя Pyrender, встроенные функции ARKit и матрицу положения камеры, но объект отображается неправильно в плоскости изображения. Я вижу это за пределами плоскости изображения (проверено в 3D-виде.
Вот что я делаю:
Внутренние характеристики: использование значений, предоставленных ARKit ( fx, fy, cx, cy), где фокусные расстояния указаны в пикселях, а главная точка (cx, cy) смещена от верхнего левого угла изображения.
Поза: Используя Матрица позы 4x4, предоставленная ARKit (simd_float4x4) для положения и ориентации камеры в мире.
Визуализация: использование Pyrender для визуализации объекта с помощью IntrinsicsCamera и заданной матрицы позы.
Я также пробовал нормализовать внутренние параметры (cx, cy) относительно размеров изображения, но проблема с выравниванием не устранена.
Есть ли что-нибудь? Мне не хватает данных о положении камеры ARKiT?
Вот код, который я использую для захвата ARKiT:
private func createFrameMetadata(
frame: ARFrame,
depthFileName: String,
rgbFileName: String,
depthResolution: [Int],
objPosition: [Float]
) -> [String: Any] {

let timestamp = frame.timestamp
let intrinsics = frame.camera.intrinsics
let fx = intrinsics.columns.0.x
let fy = intrinsics.columns.1.y
let cx = intrinsics.columns.2.x
let cy = intrinsics.columns.2.y

let widthRGB = CVPixelBufferGetWidth(frame.capturedImage)
let heightRGB = CVPixelBufferGetHeight(frame.capturedImage)

let transform = frame.camera.transform
let pose4x4: [Float] = [
transform.columns.0.x, transform.columns.0.y, transform.columns.0.z, transform.columns.0.w,
transform.columns.1.x, transform.columns.1.y, transform.columns.1.z, transform.columns.1.w,
transform.columns.2.x, transform.columns.2.y, transform.columns.2.z, transform.columns.2.w,
transform.columns.3.x, transform.columns.3.y, transform.columns.3.z, transform.columns.3.w
]

return [
"timestamp": timestamp,
"intrinsics": [fx, fy, cx, cy, 0],
"depth": depthFileName,
"image": rgbFileName,
"pose4x4": pose4x4,
"resolution": [widthRGB, heightRGB],
"depthResolution": depthResolution,
"objPosition": objPosition // [x, y, z]
]
}

И код Python:
import numpy as np
import trimesh
import pyrender
import matplotlib.pyplot as plt

fuze_trimesh = trimesh.load(
'./3D_models/teapot.obj')
fuze_trimesh.apply_scale(0.006)
mesh = pyrender.Mesh.from_trimesh(fuze_trimesh)
scene = pyrender.Scene()
scene.add(mesh)

# data comes from ARKiT (real Data)
fx = 1350.447509765625
fy = 1350.447509765625
cx = 956.402587890625
cy = 728.2923583984375

pose = np.array([
0.96495628356933594,
0.037732210010290146,
0.25968354940414429,
0,
-0.00015643320512026548,
0.98969066143035889,
-0.14322151243686676,
0,
-0.26241043210029602,
0.13816189765930176,
0.95501405000686646,
0,
-0.17561252415180206,
-0.0080626010894775391,
0.22842416167259216,
1
])

camera = pyrender.IntrinsicsCamera(
fx=fx, cx=cx, fy=fy, cy=cy)

pose = np.reshape(pose, (4, 4))
pose = np.transpose(pose)

# Apply rotations
pose_landscape_right = pose # No change

camera_pose = pose

scene.add(camera, pose=camera_pose)

light = pyrender.DirectionalLight(
color=np.array([1.0, 1.0, 1.0]), intensity=5.0)
scene.add(light, pose=camera_pose)
r = pyrender.OffscreenRenderer(1920, 1440)

pyrender.Viewer(scene)


Подробнее здесь: https://stackoverflow.com/questions/793 ... insics-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли разница между SVML и нормальными внутренними квадратными корневыми функциями?
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Преобразование мира в пиксели в Pyrender
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Преобразование мира в пиксели в Pyrender
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Почему прогнозируемые клавиатуры слегка отклоняются от наземной истины в моделировании камеры Pyrender?
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Подпись HMAC не совпадает и не принимается API AROFLO в коде PHP, но совпадает через Node.js.
    Anonymous » » в форуме Php
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»