我试图从预测深度的图像中生成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后,问题解决了。
发布于 2020-07-04 17:26:21
在构建3D场景时,深度值应该被除以5000,因为深度值最初被缩放为5000。
有关详细信息,如何构造三维点云的相机本质和指南
https://stackoverflow.com/questions/62637574
复制相似问题