我正在从事3D场景重建的项目,但我坚持从不同的角度组合点云。到目前为止,我所得到的是来自CNN的深度图和摄像机姿态,该CNN将视频帧作为输入来预测深度和姿态。到目前为止,我已经创建了只有一帧及其深度图的点云,并考虑了相机的固有特性,如下所示:
pixel_x,pixel_y = np.meshgrid(np.linspace(0,image_width-1,image_width),
np.linspace(0,image_height-1,image_height))
camera_points_x = np.multiply(pixel_x-camera_intrinsics[0,2],depth_image/camera_intrinsics[0,0])
camera_points_y = np.multiply(pixel_y-camera_intrinsics[1,2],depth_image/camera_intrinsics[1,1])
camera_points_z = depth_image
camera_points = np.array([camera_points_x,camera_points_y,camera_points_z]).transpose(1,2,0).reshape(-1,3)
相机固有的位置是:
camera_intrinsics = [[fx 0 cx],
[0 fy cy],
[0 0 1]]
然后,我尝试根据两个非连续的帧(更确切地说是序列的第一个和最后一个,此处为两个样本first frame last frame)为每个点创建一个单点云,我已经应用了相机外部参数给定的相关旋转和平移。我没有使用预测的预测,而是使用了来自地面真实性的预测(这里是结果in yellow the point cloud from the first frame, in blue the one from the last frame)。我认为将变换应用于点云的顶点是不正确的,因为它们是相交的,而它们应该彼此远离。相反,我应该将其应用于点云的原点,但我不知道该怎么做。
有人可以向我解释我该怎么做吗?