我有一个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中的云区域。
答案 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);