【问题标题】:How to make a 3D surface of human body in MATLAB?如何在MATLAB中制作人体的3D表面?
【发布时间】:2012-12-29 07:52:02
【问题描述】:

我在这个网站上搜索了很多,研究了类似的问题,并使用了给出的答案代码,但没有一个有效。所以我不得不问这个问题:

我有一个点云(一组 XYZ 用于 3D 表面)。 它们实际上属于 3D 人体表面(胸部和背部)。 我想在 MATLAB 中使用这些点制作 3D 曲面。 我尝试了很多方法,但不幸的是没有一个奏效。

如果有人能在这件事上为我提供一些帮助,我将不胜感激。 谢谢你


其实我自己也得到了这个问题的答案!!但我并不完全确定。

我必须定义这些点如何通过面矩阵连接。像这样:

Faces = [ 1 2 6 ; 1 2 4 ; 1 3 9 ; 2 6 8 ; ... ] ;

这意味着例如点 1、2、6 作为一个面相互连接。 定义完 Face 矩阵后,我必须使用 patch 函数根据点(顶点)矩阵和给定的 faces 矩阵制作一个 3D 表面。

此类事情的示例代码可能是这样的:

patch('Vertices', P, 'Faces', t);

patch('Faces', t, 'Vertices', P, 'FaceColor', [1 0.75 0.65], 'EdgeColor', 'k', 'FaceAlpha', 1.0);

但是,我现在面临一个新问题,生成人脸矩阵!

有人知道吗?

谢谢

【问题讨论】:

  • 至少展示您尝试过的许多方法中的一些怎么样?
  • 这些是一些:meshgrid,散射插值,conv hull,delaunay,. . . !!
  • 是的,告诉我们您尝试了什么。这实际上是一个经过充分研究的问题。已经发表了许多论文,并为此主题申请了专利。一种方法是将点云转换为体积并使用等值面提取 (mathworks.com/help/matlab/ref/isosurface.html)。还有很多其他方法。
  • 如果您能在此处回答我或将我引导至 mathworks.com 以外的其他链接,我将不胜感激;不幸的是,我现在无法访问 mathworks.com。谢谢
  • "没有工作"...嗯,这真的取决于你认为什么是“工作”;我无法想象像TriScatterInterp 这样的东西会算作“不工作”,所以请描述一下你认为什么算作“工作”:)

标签: matlab 3d cloud point geometry-surface


【解决方案1】:

我能想到的一种方法是使用Delaunay triangulationfree boundary

% convert your X, Y, Z point cloud into a triangulated mesh
TRI = delaunay(X,Y,Z);
% get the outer boundary
[tri xf] = freeBoundary( TRI );
% plot
trisurf(tri, xf(:,1),xf(:,2),xf(:,3) );

【讨论】:

  • 感谢您的帮助;但代码不起作用。给出了以下错误:“double”类型的输入参数的未定义函数或方法“freeBoundary”。我将 delaunay 更改为 delaunaytri 并得到了……但它更像是一个盒子而不是人体!如果你愿意,我可以在这里上传结果。
  • 很遗憾,我是新用户,无法上传图片结果!!
  • 你用的是什么matlab版本?请阅读 matlab 文档以获取免费边界(答案中的链接)。
  • 我使用的是 MATLAB 2011 (7.1)。很遗憾,我现在无法访问 mathworks.com。
【解决方案2】:

只需使用 DelaunayTri 代替 delaunay

TRI = DelaunayTri(X,Y,Z);[tri xf] = freeBoundary( TRI );trisurf(tri, xf(:,1),xf(:,2),xf(:,3) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2021-04-24
    相关资源
    最近更新 更多