2

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

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

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

谢谢。

尼科

4

2 回答 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对每个数据使用函数。

于 2014-11-22T14:14:29.930 回答
0

@Kamtal(最初我将此帖子添加为评论,但提示“帖子太长”)非常感谢。我想,只有当船体的形状很明显时,你的方法才是一个不错的选择。对于其他情况,例如人脑的皮层,Matlabdelaunay函数不够智能,无法在保留基本形状(折叠)的同时重新生成三角形网格。在这里(大约 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;

于 2014-11-23T05:55:19.373 回答