2014-11-22 77 views
2

当我在Matlab中显示表面网格时,由于网格密集(高分辨率),并且渲染缓慢且无法旋转,因此会出现此要求trisurf。所以我想知道是否有一些直观的方法来缩减网格,同时保持基本形状?如何简单地下采样三角形网格?

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

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

谢谢。

尼科

回答

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功能上的每一个数据。

+0

谢谢您的及时和实物答复。但也许这只适用于我们所知道的曲面,如V = f(x,y)。但是,如果我只有原始数据是高分辨率网格而不是分布函数本身,或者有时它是3D函数,如V = f(x,y,z)。那么,根据您的建议,我们应该从原始网格中剔除新网格上的值?非常感谢。 – nicozuo 2014-11-22 14:29:27

+0

@ nicozuo,是的你是对的,看看编辑是否有效。 – Rashid 2014-11-22 14:33:26

+0

@nicozuo,在调用'trisurf'之前你有'x,y,z',所以只需要对它进行缩减采样。如果它不起作用,请举例说明数据。 – Rashid 2014-11-22 14:39:54

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;