如何在MATLAB中从三维点云中提取xyz坐标

时间:2015-05-31 18:58:47

标签: matlab 3d matlab-cvst point-clouds

我正在使用Kinect for Windows将3D图像导入MATLAB。我希望能够在3D场景中找到对象的3D坐标。

一种简单的方法是使用找到的clickA3DPoint函数here,然后点击我想知道坐标的点。

问题是clickA3DPoint期望3 by N矩阵中的参数,即x样本的y zN坐标。当我使用Kinect获取带有depthToPointCloud的点云时,它会返回480 * 640 * 3矩阵。

如何从此矩阵中提取x,y和z坐标,以便我可以使用clickA3DPoint绘制它? (或scatter3?)

到目前为止我的尝试:

depthDevice = imaq.VideoDevice('kinect',2)  %this is the kinect depth sensor

depthImage = step(depthDevice);  %this takes a depth image. (A 480 * 640 uint16 array)

xyzPoints = depthToPointCloud(depthImage,depthDevice); %convert the depth image to a point cloud

clickA3DPoint(reshape(xyzPoints,[3,307200])) %I'm guessing each of the 480 * 640 points (307200 points) has an x,y and z coordinate, so this concates the coordinates of all these points.

但这只是绘制了3D空间中对角线上的点。如何从Matlab中的点云实际提取x,y和z坐标?

2 个答案:

答案 0 :(得分:3)

你可以使用pcshow函数绘制你的点,它将直接采用M-by-N-by-3数组。然后,您可以打开data tips并单击绘图中的点以查看其坐标。

如果您仍想创建3乘N矩阵,那么最简单的方法如下:

x = xyzPoints(:,:,1);
y = xyzPoints(:,:,2);
z = zyzPoints(:,:,3);
points3D = [x(:)'; y(:)', z(:)'];

答案 1 :(得分:0)

您可以使用pointCloud的属性“位置”来获取x,y,z。 例如:

moving = movingReg.Location;%movingReg is a pointCloud
scatter(moving(:,1),moving(:,2));