基于预测深度生成3D点云异常的排查与解决
问题:预测深度生成3D点云异常,真值深度正常的排查与解决
问题背景
我尝试利用预测深度图像结合相机内参生成3D点云(PC),但结果异常;而用真值(GT)深度图像生成的点云完全正常。两者使用了相同的相机内参、代码逻辑和处理流程,原本预期生成的点云应该接近,但实际结果差距很大。
原始点云生成代码
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)); } }
问题排查与解决
经过仔细检查,我找到了问题的根源:预测深度值被缩放了5000倍,但在最初的点云生成流程中,对z值的除法缩放处理被遗漏了。修正这个问题——确保预测深度值在转换为真实3D坐标的z值时,执行z = depth_value / 5000的操作后,用预测深度生成的点云就和真值深度生成的点云结果一致了。
内容的提问来源于stack exchange,提问作者Md Siyam Sajeeb Khan




