生成具有预测深度的 3D 点云

Generating 3D point cloud with predicted Depths

我试图从具有预测深度的图像生成 3D 点云 (PC)。给出了相机本征和地面实况深度图像。首先,我使用相机内在生成具有 GT 深度的 PC,它看起来像这样:

但是,当我尝试为具有预测深度的同一图像生成 PC 时,PC 看起来很奇怪。这是具有预测深度的 PC:

我正在使用相同的相机内在函数来执行此操作。我对两代 PC 使用相同的代码和程序。我原以为两台 PC 会很接近,但我得到的结果真的很奇怪。我做错了什么?

我生成点云的代码如下:

int rows = RGB.size[0];
int cols = RGB.size[1];
for (int v = 0; v < rows; v++) {
    for (int u = 0; u < cols; u++) {
        auto z = depth.at<ushort>(v, u) / 5000;
        auto x = (u - intrinsics.cx) * z / intrinsics.fx;
        auto y = (v - intrinsics.cy) * z / intrinsics.fy; 

        // std::cout<<"x = "<< x << " y = " << y <<std::endl;
        point3d << x, y, z;
        pc.vertices.push_back(point3d);
        pc.colors.push_back(RGB.at<cv::Vec3b>(v, u));

    }
}

GT深度图: 预测的深度图像:

编辑:我发现了错误。深度值按 5000 缩放。因此,我错过了那部分,并且在构建点云时没有除以 z 的值。除以5000后问题解决

由于深度值最初按 5000 缩放,因此构建 3D 场景时应将深度值除以 5000。

详情The camera intrinsics and guide on how to construct the 3D point cloud