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

问题描述 投票:2回答:2

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

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

有人有想法吗? Matlab函数是最好的,因为它易于测试。

谢谢。

尼科

matlab mesh resampling downsampling triangular
2个回答
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)

你甚至可以在每个数据上使用downsample函数。


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;

© www.soinside.com 2019 - 2024. All rights reserved.