2015-05-31 1 views
3

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

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

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

Но это только участки точек вдоль диагональной линии в 3D-пространстве. Как я фактически извлекаю координаты x, y и z из облака точек в Matlab?

ответ

3

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

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

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

данные советы - спаситель жизни! Я пробовал весь день, чтобы сделать это. Не могу поверить, что это так просто. Спасибо! – Blue7

0

вы можете использовать свойство «Location» в PointCloud получить х , у, г. например:

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

 Смежные вопросы

  • Нет связанных вопросов^_^