Extract Gridded Data from Isosurface

조회 수: 6 (최근 30일)
Paul Safier
Paul Safier 2021년 3월 25일
댓글: darova 2021년 3월 25일
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!
darova
darova 2021년 3월 25일
my plesure

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Scalar Volume Data에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by