在MATLAB中从一组内部3D散点图绘制曲面

时间:2011-03-30 21:41:43

标签: matlab 3d data-visualization

我有一组(~60,000)个三重数据点,代表x,y和z坐标,分散在整个笛卡尔体积中。

我正在寻找一种方法来使用Matlab来显示由点的最大范围描述的非凸形状/体积。

我当然可以使用scatter3来显示各个点,但是在给定大量点的情况下,形状的细节会被点的噪声遮挡。

作为类比,想象一下你用一些随机大小的球体填充一小时玻璃,如BBs,乒乓球和kix,然后给出每个物体中心的坐标。您如何获取这些坐标并可视化包含它们的沙漏的形状?

我的示例使用不同大小的对象,因为数据点之间的间距不均匀且有效随机;它使用沙漏,因为形状是非凸的。

2 个答案:

答案 0 :(得分:12)

如果封闭点的曲面可以描述为convex polyhedron(即像立方体的表面或dodecahedron,没有凹坑或jagged pointy parts),那么我会开始通过创建3-D Delaunay triangulation点。这将用点作为顶点的一系列四面体单元填充点周围的体积,然后您可以使用convexHull方法找到构成体积外壳的三角形面的集合。 {1}}上课。

这是一个生成在单位立方体内均匀分布的200个随机点的示例,为这些点创建四面体网格,然后找到该体积的三维凸包:

DelaunayTri

enter image description here

答案 1 :(得分:1)

您可以将数据视为三维概率密度的样本,并估算网格上的密度,例如:通过3d直方图,或更好的3d kernel density estimator。然后应用阈值并使用isosurface提取曲面。

不幸的是,统计工具箱中包含的hist3(尽管它的名称)只是一个2d直方图,而ksdensity只适用于1d数据,因此您必须自己实现3D版本。

相关问题