3D表面重建算法
我有一个 3D 表面(例如圆锥体)。 它以轮廓的形式投影到2D平面上,这意味着不同的Z在2D平面上将有不同的线。 问题是从轮廓开始,如何利用插值来恢复3D表面? 我们只知道不同轮廓线之间的 z 差异。
I have a 3D surface ( such as a cone). It is projected to a 2D plan in the form of contour, meaning that different Z will have different lines on 2D plan. The problem is from the contour, how to recover the 3D surface by using interpolation? We only know about the z difference between different contor lines.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您提到的“轮廓”的技术术语是“等值线”。
给定等值线集,您首先需要构建 3D 点云(只是 3D 空间中的点的集合)。 您分两个阶段进行。 首先以均匀的间隔对每条等值线进行采样,获得 2D 点,然后将点提高适当的高度。
通过跟踪线的任意位置,可以轻松地以均匀的间隔对线进行采样。 您可以通过从最外层线开始,逐条向内追踪线,删除追踪的每条线,并记录追踪的线数,来了解线的高度。
当然,您需要提前知道线之间的高度差是多少,以及最外线(或任何其他可以用作参考的线)的高度是多少。
一旦您拥有 3D 点云,您就可以使用任何多种表面重建算法之一。 例如,该公司制作了一个可以执行此操作的应用程序,您可以从他们的网站下载命令行演示最多可获得 30,000 点。
The technical term for the "contours" you mentioned is "iso-lines".
Given the set of iso-lines you first need to construct a point cloud in 3D (just a collection of points in 3D space). You do that in two stages. first by sampling each iso-line at a uniform intervals, You get 2D points and then you raise the points by the appropriate height.
sampling a line at uniform intervals can be easily done by tracing it wherever it goes. You can know the height of a line by starting from the most outer line and tracing the lines one by one towards the inside, removing each line you trace and and keeping track of how many lines you traced.
Of course you need to know in advance what is the height difference between the lines and what is the height of the most outer line (or any other line which can be used as a reference)
Once you have a 3D point cloud you can use any one of a number of surface reconstruction algorithms. This company for instance makes an application which does that and you can download a command line demo from their site which will work for up to 30,000 points.
在这种情况下,如果您的点位于 z=f(x,y) 中或者您的形状是凸的,则表面重建算法会浪费时间。
简单解决方案
x,y 坐标
你的形状是凸的,使用 convhull 算法
你的形状是凹的,使用:
http://www.advancedmcode.org/分散点的表面重建-cloud-mycrust-robust.html
A surface reconstruction algorithm would a waste of time in this case if your points are in the z=f(x,y) or your shape is convex.
For z=f(x,y) is the easy solution
x,y coordinates
Your shape is convex use a convhull algorithm
Your shape is concave use:
http://www.advancedmcode.org/surface-recostruction-from-scattered-points-cloud-mycrust-robust.html