将3D转换为PointCloud

时间:2016-03-24 20:15:48

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

我正在使用Persistent Homology,我需要常见3D形状的云点才能测试我的方法。

问题是我是一名Java程序员而且Java不提供这样的工具,但我很确定Matlab确实...我试着在这里阅读:

http://www.mathworks.com/help/vision/ref/pcfitsphere.html
http://www.mathworks.com/help/matlab/ref/sphere.html
http://www.mathworks.com/help/vision/ref/pcshow.html#inputarg_ptCloud

这些链接提供有关Spheres和PointClouds的信息,但我从未在matlab上编程,因此我甚至无法提出代码。

有没有办法拍摄3D形状,获得点云并在控制台上打印点云? 像:

x0,y0,z0

x1,y1,z1

x2,y2,z2

... 我正在做的是创建一个基于函数打印随机点的Java类,所以例如我给我的程序一个球体的功能......但是当我试图创建金字塔函数时它变得非常复杂或三个圆环。

1 个答案:

答案 0 :(得分:2)

以下是points inside a sphere

的MATLAB示例
% random points in spherical coordinates
N = 1000;
theta = 2*pi*rand(N,1);
phi = asin(2*rand(N,1)-1);
radii = 3*(rand(N,1).^(1/3));

% convert to cartesian
[x,y,z] = sph2cart(theta, phi, radii);

% plot
scatter3(x, y, z, 10, 'filled')
axis vis3d equal, grid on, box on
xlabel X, ylabel Y, zlabel Z

sphere-cloud

请参阅this以供参考。

修改

这是在金字塔内生成点的另一个例子。

这次我采用蛮力方法,只需在[0,1]立方体中生成大量随机3d点,然后按testing which points are inside the pyramid convex polyhedron过滤它们(使用Delaunay三角剖分)。

% random points
N = 3000;
XYZ = rand(N,3);

% unit pyramid in [0,1]
V = [0   0   0 ;
     1   0   0 ;
     1   1   0 ;
     0   1   0 ;
     0.5 0.5 0 ;
     0.5 0.5 sqrt(2)/2];

% delaunay triangulation
DT = delaunayn(V);

% determine points within
in = ~isnan(tsearchn(V, DT, XYZ));

% plot
scatter3(XYZ(in,1), XYZ(in,2), XYZ(in,3), 8, 'filled')
view(3), axis vis3d equal, grid on, box on
axis([0 1 0 1 0 1])
xlabel X, ylabel Y, zlabel Z

% overlay pyramid
hold on
h = tetramesh(DT, V);
set(h, 'FaceAlpha',0.1, 'EdgeColor','m', 'FaceColor','m')
hold off

pyramid-cloud