Как извлечь координаты xyz из 3D-облака точек в MATLAB

Я использую Kinect для Windows для импорта 3D-изображений в MATLAB. Я хочу иметь возможность находить 3D-координаты объектов в 3D-сцене.

Один из простых способов сделать это — использовать функцию clickA3DPoint, которую можно найти здесь, а затем щелкните точку, координаты которой я хочу узнать.

Проблема в том, что clickA3DPoint ожидает аргументы в матрице 3 by N, которая представляет собой координаты x y и z N выборок. Когда я использую 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.

Но это просто отображает точки вдоль диагональной линии в трехмерном пространстве. Как на самом деле извлечь координаты x, y и z из облака точек в Matlab?


person Blue7    schedule 31.05.2015    source источник


Ответы (2)


Вы можете использовать функцию pcshow для построения точек, и она напрямую возьмет массив M на N на 3. Затем вы можете включить подсказки по данным и нажмите на точки на графике, чтобы увидеть их координаты.

Если вы все еще хотите создать матрицу 3 на N, то самый простой способ сделать это следующий:

x = xyzPoints(:,:,1);
y = xyzPoints(:,:,2);
z = zyzPoints(:,:,3);
points3D = [x(:)'; y(:)', z(:)'];
person Dima    schedule 31.05.2015
comment
Советы по данным - спаситель жизни! Я пытался сделать это весь день. Не могу поверить, что это так просто. Спасибо! - person Blue7; 31.05.2015

вы можете использовать свойство «Местоположение» pointCloud, чтобы получить x, y, z. Например:

moving = movingReg.Location;%movingReg is a pointCloud
scatter(moving(:,1),moving(:,2));
person Lily.chen    schedule 08.06.2017