【pyrender】基於PyRender的深度圖渲染

一、安裝pyrender

二、加載Mesh模型與相機參數

  • 加載Mesh模型
    • colmap fused.ply --> PoissonRecon
  • 相機參數的轉換
    • colmap (world-to-camera) vs pyrender (camera-to-world)
    • y-z axis reverse
# Creates the scene and adds the mesh.
scene = pyrender.Scene()
scene.add(mesh)

# Creates a renderer of suitable height and width
cam_data = cameras[images[i].camera_id]
renderer = pyrender.OffscreenRenderer(cam_data.width,
                                      cam_data.height)

# Extracts focal length and principal point information.
# Important: This code snippet assumes that the camera
# is a PINHOLE camera.
fx = np.float32(cam_data.params[0])
fy = np.float32(cam_data.params[1])
cx = np.float32(cam_data.params[2])
cy = np.float32(cam_data.params[3])

# Extracts the pose of the image.
# Note that pyrender poses transform from camera
# to world coordinates while colmap poses transform
# from world to camera.
R = np.asmatrix(qvec2rotmat(images[i].qvec)).transpose()
T = np.identity(4)
T[0:3,0:3] = R
T[0:3,3] = -R.dot(images[i].tvec)
# Takes into account that colmap uses the computer vision
# camera coordinate system (x = right, y = down, z = front)
# while pyrender uses the computer graphics conventions
# (x = right, y = up, -z = front).
T[:, 1:3] *= -1

# Sets up the camera with the intrinsics and extrinsics.
pyrender_camera = pyrender.IntrinsicsCamera(fx, fy, cx, cy,
                                            zfar=800.0)  # 425~935
cam_node = scene.add(pyrender_camera, pose=T)

參考資料:

https://github.com/colmap/colmap/issues/704#issuecomment-954161261

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章