在两个半部分中切割点云图像 - Matlab

时间:2015-12-21 18:01:13

标签: matlab image-processing matlab-cvst point-clouds

我有一个3D点云图像( .ply格式)。我需要将它从中心切成两个。试图使用以下代码仅选择Point云的一半,但获得的随机点不是所需的。使用以下逻辑将点云划分为半(原始的1/2)并将结果保存在新的点云中。既不能正确地从中心切片云图像也不能将其保存在新的云中。

  stepSize = 1;
  indices = 1:stepSize:(i1.Count)/2;
  pt = select(i1, indices);

我还检查了以下代码:

points3d = i1.Location;
points3d_1 = points3d(points3d(:, 1) < 100, :);
points3d_2 = points3d(points3d(:, 1) >= 100, :);
ptCloud1 = pointCloud(points3d_1);
ptCloud2 = pointCloud(points3d_2);
pcshow(ptCloud1);
figure
pcshow(ptCloud2);

两个片段随机相同,一部分被分割,无论我尝试的范围是什么

  

三维点(:,1) - ;的范围

第二个切片始终是完整的原始图像。切片图像也包含原始图像的背景,如下所示。如何只获得存储在新的ptCloud1和ptCloud2中的云区域。

Expected results 如何获得切片的新点云。使用MatalbR2014b

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要查看点的坐标,而不仅仅是它们的索引。

假设ptCloud是您的pointCloud对象,您正在将MATLAB R2015b或更高版本与计算机视觉系统工具箱一起使用。

>> points3d = ptCloud.Location;

为您提供表格中的点云点的[X,Y,Z]坐标或3列矩阵。假设您希望沿着X轴将您的点云切成X = 10的平面。您可以通过以下方式进行:

points3d_1 = points3d(points3d(:, 1) < 10, :);
points3d_2 = points3d(points3d(:, 1) >= 10, :);
ptCloud1 = pointCloud(points3d_1);
ptCloud2 = pointCloud(points3d_2);