我有一组(~60,000)个三重数据点,代表x,y和z坐标,分散在整个笛卡尔体积中。
我正在寻找一种方法来使用Matlab来显示由点的最大范围描述的非凸形状/体积。
我当然可以使用scatter3
来显示各个点,但是在给定大量点的情况下,形状的细节会被点的噪声遮挡。
作为类比,想象一下你用一些随机大小的球体填充一小时玻璃,如BBs,乒乓球和kix,然后给出每个物体中心的坐标。您如何获取这些坐标并可视化包含它们的沙漏的形状?
我的示例使用不同大小的对象,因为数据点之间的间距不均匀且有效随机;它使用沙漏,因为形状是非凸的。
答案 0 :(得分:12)
如果封闭点的曲面可以描述为convex polyhedron(即像立方体的表面或dodecahedron,没有凹坑或jagged pointy parts),那么我会开始通过创建3-D Delaunay triangulation点。这将用点作为顶点的一系列四面体单元填充点周围的体积,然后您可以使用convexHull
方法找到构成体积外壳的三角形面的集合。 {1}}上课。
这是一个生成在单位立方体内均匀分布的200个随机点的示例,为这些点创建四面体网格,然后找到该体积的三维凸包:
DelaunayTri
答案 1 :(得分:1)
您可以将数据视为三维概率密度的样本,并估算网格上的密度,例如:通过3d直方图,或更好的3d kernel density estimator。然后应用阈值并使用isosurface
提取曲面。
不幸的是,统计工具箱中包含的hist3
(尽管它的名称)只是一个2d直方图,而ksdensity
只适用于1d数据,因此您必须自己实现3D版本。