Image 深度/范围图像到点云

Image 深度/范围图像到点云,image,3d,cloud,point,depth,Image,3d,Cloud,Point,Depth,我正在尝试从深度图像/范围图像/置换贴图(对应于z深度的灰色值)创建点云 以下是拖车车辆的深度图像: 摄影机参数,无旋转:x、y、z:0,25,0 我得到的点云有一个倾斜的地平面,它应该是偶数(只有一个在0,0,0没有旋转的四边形): 轮换: 这是我的代码,我尝试这样做: normalizedCameraRay=规格化(CameraRay); _3D中的点_=像素XY的ZDEPTHVVALUE/标准化的Cameraray.zValue//zValue是 float startPosition

我正在尝试从深度图像/范围图像/置换贴图(对应于z深度的灰色值)创建点云

以下是拖车车辆的深度图像:

摄影机参数,无旋转:x、y、z:0,25,0

我得到的点云有一个倾斜的地平面,它应该是偶数(只有一个在0,0,0没有旋转的四边形): 轮换:

这是我的代码,我尝试这样做:

normalizedCameraRay=规格化(CameraRay); _3D中的点_=像素XY的ZDEPTHVVALUE/标准化的Cameraray.zValue//zValue是
float startPositionX = -((float)image.rows)/2;
float startPositionY = -((float)image.cols)/2;


glm::vec3 cameraWorldPosition(x,y,z);

qDebug() << x << "," << y << ", " << z;

for(int a = 0; a < image.rows;a++)
{
    for(int b = 0; b < image.cols;b++)
    {
        float movementX = startPositionX+b;
        float movementY = startPositionY+a;

        glm::vec3 ray(movementX, movementY, focal_length);

        ray = glm::normalize(ray);
        float rayFactor =  ((float)image.at<u_int16_t>(a,b))  / ray[2];


        glm::vec3 completeRay = rayFactor*ray;
        pointCloud[a][b] = completeRay;
        /*
        ray = completeRay - cameraWorldPosition;
        ray = glm::normalize(ray);
        rayFactor =  ((float)image.at<u_int16_t>(a,b))  / ray[2];
        ray = rayFactor * ray;
        pointCloud[a][b] = ray;*/


        /*
        ray = glm::vec3(startPositionX+b,startPositionY-a, image.at<u_int16_t>(a,b));
        pointCloud[a][b] = ray;
        */



    }
}