簡體   English   中英

在MATLAB中從一組內部3D散點圖繪制曲面

[英]Plotting a surface from a set of interior 3D scatter points in MATLAB

我有一個大的(~60,000)三元組數據點,代表x,y和z坐標,它們分散在整個笛卡爾體積中。

我正在尋找一種方法來使用Matlab來可視化由點的最大范圍描述的非凸形狀/體積。

我當然可以使用scatter3顯示各個點,但是在給定大量點的情況下,形狀的細節會被點的噪聲遮擋。

作為一個類比,想象你用一個隨機大小的球體填充一小時玻璃,如BBs,乒乓球和kix,然后給出每個物體的每個物體的中心坐標。 您如何獲取這些坐標並可視化包含它們的沙漏的形狀?

我的例子使用不同大小的對象,因為數據點之間的間距是不均勻的並且是有效隨機的; 它使用沙漏,因為形狀是非凸的。

如果包圍點的表面可以描述為凸多面體 (即像立方體或十二面體的表面,沒有凹坑或鋸齒狀尖部 ),那么我將首先創建點的三維Delaunay三角剖分 這將用點作為頂點的一系列四面體單元填充點周圍的體積,然后您可以使用DelaunayTri類的convexHull方法找到構成體積外殼的三角形面的集合。

這是一個生成在單位立方體內均勻分布的200個隨機點的示例,為這些點創建四面體網格,然后找到該體積的三維凸包:

interiorPoints = rand(200,3);      %# Generate 200 3-D points
DT = DelaunayTri(interiorPoints);  %# Create the tetrahedral mesh
hullFacets = convexHull(DT);       %# Find the facets of the convex hull

%# Plot the scattered points:
subplot(2,2,1);
scatter3(interiorPoints(:,1),interiorPoints(:,2),interiorPoints(:,3),'.');
axis equal;
title('Interior points');

%# Plot the tetrahedral mesh:
subplot(2,2,2);
tetramesh(DT);
axis equal;
title('Tetrahedral mesh');

%# Plot the 3-D convex hull:
subplot(2,2,3);
trisurf(hullFacets,DT.X(:,1),DT.X(:,2),DT.X(:,3),'FaceColor','c')
axis equal;
title('Convex hull');

在此輸入圖像描述

您可以將數據視為三維概率密度的樣本,並估算網格上的密度,例如通過三維直方圖,或更好的三維核密度估計 然后應用閾值並使用isosurface提取曲面。

不幸的是,統計工具箱中包含的hist3 (盡管它的名字)只是一個2d直方圖,而ksdensity只能用於1d數據,所以你必須自己實現3d版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM