Extract Gridded Data from Isosurface

4 次查看(过去 30 天)
I want to get the x, y and z data of a surface that I extract from a volume via isosurface. I am doing it in the following way, but I suspect that it's horribly inefficient (because I cannot believe there isn't a more straightforward way) and possibly inaccurate because of some of the results I have been getting. Can anyone suggest a simplier way?
I want the data at points given by (just an example):
[x,y] = meshgrid(linspace(0,10,30),linspace(0,10,30))
The data is available from this:
[faces,verts] = isosurface(Xa, Ya, Za, data, 0);
Then I am doing this to get the surface on the coordinates I want (x,y):
[X1,Y1,Z1] = xyz2grid(verts(:,1),verts(:,2),verts(:,3));
MySurface = interp2(X1,Y1,Z1,x,y);
NaNres = sum(isnan(MySurface(:)));
if NaNres > 0
MySurface = inpaint_nans(MySurface,3);
end
  2 个评论
darova
darova 2021-3-25
Everything looks ok. What is wrong?
Paul Safier
Paul Safier 2021-3-25
编辑:Paul Safier 2021-3-25
The results are the problem. It seems to work OK sometimes and awfully others. See example data and images of good surface (plotted by isosurface) and bad surface (plotted by surf after the interpolation). The raw data is attached that apply like this:
xx and yy are the results of meshgrid--they are where I want the z values.
[faces,verts] = isosurface(mesh_xs{:}, mesh_data, 0);
[X1,Y1,Z1] = xyz2grid(verts(:,2),verts(:,1),verts(:,3));
MySurface = interp2(X1,Y1,Z1,xx,yy);
NaNres = sum(isnan(MySurface(:)));
if NaNres > 0
MySurface=inpaint_nans(MySurface,3);
end
% Compare
figure; surf(xx,yy,MySurface)
figure; isosurface(mesh_xs{:}, mesh_data, 0);
Plotting with isosurface looks great (bottom figure). Plotting my interpolated result is bad (top figure).

请先登录,再进行评论。

采纳的回答

darova
darova 2021-3-25
What about standard functions?
[faces,verts] = isosurface(mesh_xs{:}, mesh_data, 0);
zz = griddata(verts(:,2),verts(:,1),verts(:,3),xx,yy);
surf(xx,yy,zz)
Are you sure that the order xx and yy is correct?
  2 个评论
Paul Safier
Paul Safier 2021-3-25
That seems to work for the situation where the other method failed. Thanks for the suggestion!

请先登录,再进行评论。

更多回答(0 个)

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by