我现在面临的问题是,想要让一个东西在电脑里是3D的,现在想采取的方法是对这个物体每隔20度照相,然后利用这些相片在电脑里对其进行3D重建。不知有没有什么软件可以用,收费免费都可以,还有,如果有更好的技术路线,可否赐教?
日常场景,基于多视角Multi-view重建,不使用RGBD方式的话,就选SfM(Structure from Motion)+MVS(Multi View Stereo)+SR(Surface Reconstruction)+TM(Texture Mapping)套路啦,这是传统基于多视几何的路子,原理就是利用多张图像间的特征点匹配求解相机内外参数和三维空间点的位置,也就是稀疏点云(一堆点),之后再让它浓一点,变成连续的,再加点颜色和纹理,data flow大致是:
images——sparse point cloud——dense point cloud——mesh——mesh with texture
SfM MVS SR TM
当然做到dense点云的话看起来就比较逼真了,想把点连起来变成连续多边形网格(也就是表面)再加上纹理信息,就是可以各种玩的3D模型了。
商业软件很多了,上面已经有一些不错的例子,Pix4Dmapper是一款专门用于无人机航拍图像重建的产品,效率质量惊人,当然用于地面场景应用也是可以的。如果不怕麻烦的话,这里主要介绍一些research的例子:
SfM:大家比较熟悉的就是Changchang Wu的 VisualSFM 啦,这是个写的比较溜的非开源福利,Changchang大神一致不公开源码,是他一行行累出来的作品,其中的SiftGPU和PBA也是大神的作品。我也算用过一些不同的SfM代码,各路大神写的,包括一些大牛组的,讲良心VSFM算是我见过鲁棒性最好的 之一(严谨脸),极少出现数据量太大、数据质量(各种因素blabla)差造成的崩、卡、完、“就是没结果”之类,虽说已有岁月包浆,但其精度和稳定性值得信赖的。非说槽点的话,也就是图像匹配和BA的效率不高,各种改进此处略去,如果只是用一下的话还是包您满意的。还有MVE、 OpenMVG (openMVG/openMVG)和 COLMAP(COLMAP – Structure-From-Motion and Multi-View Stereo),现在的框架都必须追求全面,所以稍微看下主页就会发现MVS等功能都是打包的。(bundler还是要说的,但是用起来稍微麻烦,不推荐上手玩)
MVS:PMVS、CMVS,CMPMVS,以及OpenMVS,各种dense层出不穷,本人代码能力有限,对于这块还是望而生畏的(顺吐一下,还是不要去自己编译OpenMVS了。。可能新版本已改观,未求证)。OpenMVS效果还是很赞的,虽说时常出现莫名的罢工,自带了VSFM和OpenMVG的接口,贴心。
SR和TM:CV,CG,CCTV,好吧,其实OpenMVS都有啦,请自行观看cdcseacave/openMVS。
另外,想自己翻来覆去把玩结果的话,Meshlab是很好的。
VisualSfM——OpenMVS,是一套比较简洁的方案,也可以把OpenMVS替换成CMPMVS。另外做重建数据是非常重要的,自己拍的话请尽量量大出奇迹,多一点视角,保证每次拍照位置的距离合适(基 线),实在懒的话就上视频了,找个软件或者自己opencv弄成帧再喂进去(感兴趣的话opencv和matlab也可以自己写重建算法,有高质量库和工程,例如普林的SfM相关课程)。一次拍的不好,可以多拍几次,看下哪里空洞补哪里,新数据加进去再跑一次就好(特征点检测匹配等中间结果慎删)。
想更多了解原理,推荐一本经典教材,《计算机视觉中的多视图几何》(Multiple View Geometry in Computer Vision),超级经典,反正我是没好好读完过。
自己从图片一步步重建出逼真的model是一件很爽的事情,像创世一般,比如几天重建个罗马,几天重建个世界啥的。。,如果之前没接触过一定会被算法的能力震撼,那么,欢迎入坑。
如果想用深度相机来做,那就是另一套路子,Kinect和Realsense都有相关的SDK可以用,还有PCL etc.了解粗浅这里就不说了。
更多回答
准确的说是 123D Catch。因为 123D 家族还有其他如 123D Design,123D Make 等不同用处的软件。
另外可以参考以下两篇文章,分别使用了 VisualSFM 和 python 来进行三维重建。
打造离线版 123D Catch
使用 Python Photogrammetry Toolbox (PPT) 进行照片3D重建
http://www.gris.tu-darmstadt.de/projects/mvs-texturing/ MVS-texturing,加上纹理贴图,更加逼真,需要自己编译。
附:自己重建的一个石狮子用的是MVS-texturing的pipline。