如何简单地对三角形网格进行下采样?

时间:2014-11-22 14:02:44

标签: matlab mesh resampling downsampling triangular

当我在Matlab中通过trisurf显示表面网格时会出现这个要求,因为网格是密集的(高分辨率)并且渲染缓慢且无法旋转。所以我想知道有一些直观的方法来对网格进行下采样,同时保持基本形状?

在我发布这个问题之前,我已经用Google搜索了。流行的工具iso2mesh具有类似的功能remeshsurf。但它首先通过原始网格重建体积,然后根据所需的分辨率构造新网格。在我看来,一个重要的缺陷是它改变了原来的形状。

任何人都有一些想法? Matlab函数是最好的,因为它很容易被测试。

感谢。

尼科

2 个答案:

答案 0 :(得分:1)

您应该对数据进行下采样,

[x,y]=meshgrid(1:15,1:15);
tri = delaunay(x,y);
z = peaks(15);
trisurf(tri,x,y,z)
figure
x1 = x(1 : 2 : end,1 : 2 : end);
y1 = y(1 : 2 : end,1 : 2 : end);
z1 = z(1 : 2 : end,1 : 2 : end);
tri1 = delaunay(x1,y1);
trisurf(tri1,x1,y1,z1)

enter image description here

enter image description here

您甚至可以对每个数据使用downsample函数。

答案 1 :(得分:0)

@Kamtal(最初我添加了这篇帖子作为评论,但它提示“太长的帖子”)非常感谢。我想,只有当形状的船体是显而易见的时候,你的方法才是一个不错的选择。对于其他情况,例如,人类大脑的皮层,Matlab delaunay函数不够智能,无法重新生成三角形网格,同时保留基本形状(折叠)。 Here(约1.7M)我上传了一个描述皮质表面(左半球和右半球)的例子。它可以通过以下代码显示, load mysurf.mat; figure, trisurf(mysurf.tri, mysurf.coord(:,1),mysurf.coord(:,2),mysurf.coord(:,3)); view(-90,0); daspect([1 1 1]); axis tight; camlight; axis vis3d off; lighting phong; material shiny;
shading interp;