将 2D 图像转换为 3D 模型
有什么方法可以将普通网络摄像头捕获的 2D 图像转换为 3D 模型吗?我正在使用 C#,因此任何基于 C# 的算法都会有所帮助。
Is there any way of converting a 2D image captured by a normal web camera to be converted into a 3D model? I'm using C# so any algorithm based in C# would be helpful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您有从不同相机位置拍摄的多张高(中)质量图像,这是可能的。这个过程称为“运动结构”
http://en.wikipedia.org/wiki/Structure_from_motion
通常包括非常繁重和复杂的计算。一个例外是图像是由立体摄像机或对齐的相机从固定的预定义位置拍摄的。在 C# 中没有办法做到这一点。 C# 对于计算机视觉应用程序来说毫无用处。有开源的 GPL 库,例如 Bundler 和 PMVS
http://phototour.cs.washington.edu/ 手部跟踪
是其他完全不同的任务,在某种意义上同样复杂,尽管来自运动的强力结构可能适用于手部跟踪。有多种精确手部跟踪的方法,一些基于活动形状模型或活动外观模型,更简单的是基于特征点跟踪,这可以在您的情况下使用。但即使是最简单的方法也相当复杂,不能靠一篇文章来解决。你可以谷歌一下,也可能有用于手部跟踪的开源库。
If you have more than one high(medium) quality image taken from different camera position it's possible. This process called "structure from motion"
http://en.wikipedia.org/wiki/Structure_from_motion
and usually include very heavy and complex calculation. The one exception is if the images are taken by stereocamrea or aligned cameras from fixed predefined positions. No way to do it in C#. C# is pretty useless for computer vision applications. There are open sourced GPL libraries for it, like Bundler and PMVS
http://phototour.cs.washington.edu/bundler
Hand tracking is others quite different tasks, in some sense no less complex, though brute force structre from motion may work for hand tracking. There are several approach for precise hand tracking, some based on active shape model, or active appearance model, more simple are based on feature point tracking, which could work in your case. But even simplest approach is quite complex and can not be relied in one post. You can google, there could be open sourced library for hand tracking too.
我想说“打印出来”,因为平面意味着 3D 世界中的平面,就像一张纸。
但实际上,您只想为每个点提供三维值。因此,请决定您希望它位于 3D 空间中的哪个位置,并进行必要的数学计算。例如,如果您希望它位于“墙壁”上,则将 x,y 坐标映射到 x, 0, z。
- 编辑新问题...
您需要计算出每个点距相机有多远。很难做到,因为相机无法判断光线传播了多远。
I want to say "Print it out", since a plane means a flat surface in the 3D world, like a piece of paper.
But really, you just want to provide a third dimension value for each point. So decide where in your 3D space you want it to be, and do the necessary maths. For example, if you want it on a "wall", then map your x,y coordinates to x, 0, z instead.
-edited for new question...
You need to work out how far away each point is from the camera. Very hard to do, as the camera can't tell how far the light has travelled.
并非没有任何附加信息。
您也许能够将 2D 图像投影到建模的 3D 表面上。注意:说“3d 平面”很有趣,因为平面通常是 2d 的。
not without any additional information.
you might be able to project the 2d image onto a modelled 3d surface. note: it is funny to say '3d plane' as a plane is typically 2d.
这是一个活跃的研究课题,而且绝非易事。
Make3D 使用监督学习(人工智能的一种形式)来计算大量系数。然后使用它们来估计图像的深度图。
他们的网站上有一些代码,但这些代码适用于 Matlab,而不是 C#。
This is an active research topic, and is far from easy.
Make3D used supervised learning (one form of Artificial Intelligence) to calculate a huge number of coefficients. Those are then used to estimate the depth-map from images.
They have some code on their site, but it is for Matlab, not C#.