2008-12-05 62 views
4

我有一个3D表面(如锥体)。它以轮廓的形式投影到二维平面图上,这意味着不同的Z在2D平面上会有不同的线条。问题来自轮廓,如何通过插值来恢复3D表面?我们只知道不同控制线之间的z差异。三维表面重建算法

回答

7

您提到的“轮廓”的技术术语是“iso-lines”。
给定一组iso等值线,您首先需要用3D构建一个点云(只是3D空间中的点集合)。你分两步做。首先通过以均匀的间隔对每条等值线进行采样,得到二维点,然后以合适的高度将点提高。
以均匀的间隔对一条线进行采样可以很容易地通过追踪它到达哪里去。你可以通过从最外面的一行开始,逐行地向内侧追踪这些线,去除你追踪的每一行并跟踪你追踪到的行数,从而知道一条线的高度。
当然,您需要事先知道线条之间的高度差以及最外线(或可用作参考的任何其他线)的高度是多少?

一旦您拥有3D点云可以使用任何一种表面重建算法。例如This company就是一个应用程序,它可以做到这一点,你可以从他们的网站上下载一个命令行演示程序,这个演示程序最多可以运行30,000个点。

2

如果你的点位于z = f(x,y)或者你的形状是凸的,在这种情况下,表面重构算法会浪费时间。

对于z = F(X,y)是仅使用 x中的简单的解决方案

  1. Delaunay三角剖分,y坐标
  2. 情节与以前的三角测量的表面上,此时使用ž太。工作已经完成!

你的形状是凸形的使用convhull算法

你的形状是凹的用途: http://www.advancedmcode.org/surface-recostruction-from-scattered-points-cloud-mycrust-robust.html