关于使用2d照片进行3d建模

2023-10-31

转载感言:作者一句业余,搞得弟兄们面红耳赤了;感谢作者的可行性分析!




Autodesk 的 123D Catch 让我们能够很简单的根据一组照片构建3D物体,你只需要从各个角度拍摄希望建模的物体,然后通过 123D Catch 将照片上传到 Autodesk 的云端服务器,等待几分钟之后,就能下载到完成的模型,是不是像变魔术一样?

01 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

但是在上传照片和下载模型之间到底发生了什么,由照片重建三维模型是个怎样的过程,123D Catch 却没有告诉好奇的我们。而且总是要把图片上传到云端总感觉不太方便,说不定我们偶尔想要重建个私密的模型呢?今天就让我们尝试用开源软件来替代 123D Catch,完成照片重建的任务!

我们将要建模的对象是 123D Catch Windows 版提供的示例照片,你可以在 123D Catch 的 sample_project 目录中找到他们。

02 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

123D Catch 和开源软件方案的建模效果如下。左边是 123D Catch 的局部,右边则是我们自己动手建模的结果,觉得哪个效果好些呢?

03 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

需要事先说明的是,本文的目的在于展示一种技术上的可能性,并非主张人们自己动手来尝试照片重建。对于绝大多数用户来说,123D Catch 仍然是照片重建的首选。其次,笔者只是在业余时间进行了一些调查,并非计算机视觉科班出身,行文中如果有错误敬请指正。

那么,让我们先了解下照片重建的主要步骤吧。

照片重建的主要步骤

整个重建过程大致有以下几步,

1、找出各张照片中的特征点,进行两两匹配

这一步讲究的是能够精确识别物体的局部特征,并且进行快速准确的匹配,由于在实际拍摄中,可能存在物体的旋转、缩放、或者亮度变化,所以难度不小。现在常用的算法是由 David Lowe 提出的SIFT 方法。

2、根据匹配的结果,利用射影定理计算得到相机位置等场景信息

这步又称运动恢复结构(Structure from Motion)。对于结果的衡量标准主要是准确性,流行使用的是基于 Levenberg-Marquardt 算法的 Bundler。我们也可把这一步称为稀疏重建(Sparse Reconstruction)。

3、将场景信息与原始照片结合在一起,得到照片中物体的三维点云

有了场景信息,我们就能进行多视立体重建(Multi-view Stereo Reconstruction)了。由于处理的图像精度通常都比较高,所以这一步的计算量很大,执行效率也因此成为判断算法优劣的标准之一。除了效率之外,还需要考量重建的精度以及完整性,因为这些因素决定了点云的质量。PMVS 算法是目前表现最好的多视立体重建算法。另外,为了表示和稀疏重建的区别,这一步也成为密集重建(Dense Reconstruction)。

4、根据三维点云构建三维模型

我们已经得到了物体表面的一系列三维点云,但是还需要把这些点连成面,才能在一般的三维建模软件中使用。现在比较常用的是泊松表面重建算法(Poisson Surface Reconstruction)。是的,就是发明了能够用来预测火车是否晚点的泊松分布的那个人。

怎么样,是不是够复杂的。了解了这些主要步骤之后,让我们来实际操作吧。

使用开源软件完成重建

我们将使用 VisualSFM 来完成其中的前三步,VisualSFM 中已经包含了 SIFT 和 Bundler 的算法,不过为了完成第三步,你还需要下载 PMVS 的升级版 CMVS,VisualSFM 会自动调用。而对于第四步,我们需要使用 Meshlab 进行网格处理。

让我们开始吧。

1、识别特征点

打开 VisualSFM 后,我们点击批量添加照片的按钮

04 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

在弹出的对话框中选取 sample_project 中所有佛陀的照片

05 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

如果你在菜单中点选了 Tools > Show TaskViewer,将会在其中看到图片已经全部载入了。

06 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

图片载入之后,我们可以点击工具栏中四个箭头的按钮,开始查找特征值与匹配。

07 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

在 TaskViewer 中你能够看到每张照片中的 SIFT 特征值的数量,以及花费的时间。SIFT 计算结束后,VisualSFM 将会对这些特征逐一比对。

08 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

特征值的查找与匹配完成后,你会看到对于每张照片,VisualSFM 都为我们生成了一个 .sift 文件以及一个 .mat 文件,其中记录了特征点和匹配信息。

09 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

2、稀疏重建

完成了特征点的识别与匹配后,让我们点击类似于“快进”的按钮开始稀疏重建。

10 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

稍等片刻后,你就会看到 VisualSFM 为你重建的拍摄场景。

112 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

留意到佛陀周围的那些小点吗?那是 VisualSFM 计算得到的拍照时,照相机的各个位置。

3、密集重建

完成稀疏重建后,你会发现工具栏中多出了几个按钮,让我们点击其中的 “CMVS”,进行运算量最大的密集重建。

121 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

在弹出的对话框中填写希望保存的目录。

131 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

点击保存后,VisualSFM 就为我们开始进行漫长的密集重建了。重建完成后,在之前指定的目录中将会产生一系列的文件。

14 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

其中最关键的,是 models 目录中的 .ply 文件。

15 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

当我们在 MeshLab 中打开这个 .ply 文件后,就能看到重建结果了。

16 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

有没有看到右侧的佛陀,是不是像块埋在怪石中的玉?

4、构建三维模型

在进行泊松重建前,我们需要去除周围不需要的点云。Meshlab 工具栏中的下面两个按钮可以帮助我们选中以及删除。如果你觉得默认大小的点很难选取,还可以在选项中修改点的显示尺寸。

17 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

这是整个重建过程中最需要人工参与的部分。有否彻底清除不需要的部分将直接影响之后的重建效果。我们的佛陀清理的结果如下。

18 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

你可能会问这不是已经是个3D模型了吗?但是让我们放大了看下,我们会看到整个模型仍然是由点云构成的。

19 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

让我们开始泊松重建吧。

我们首先在菜单中选择 Filters > Point Set > Compute normals for point sets,计算点云的法线。

之后,仍然是 Point Set 菜单,选择其中的 Surface Reconstruction: Poisson,在弹出的对话框中我们需要输入几个参数。

20 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

让我们改动上部的两个参数。你也可以自己调整,看看什么样的参数组合对于你的模型结果最佳。点击 Apply 后,可以看到 MeshLab 为我们生成了模型的表面。

211 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

但是此时,这些新建的面并不包含颜色信息。我们需要 MeshLab 根据已有的点云,为我们计算新增的面的颜色。 可以在菜单中选择 Filters > Sampling > Vertex Attribute Transfer,

在弹出的对话框中,注意调整颜色的源和目标。

221 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

涂色过程应该不费时,稍等之后我们就能看到重建结果了!

23 打造离线版 123D Catch 照片重建 VisualSFM offline mode MeshLab 3D重建 123D Catch

至此整个重建过程结束。你可以将这个模型输出成你希望的格式,进行下一步的编辑或者打印。另外,在佛陀左手下方有块白斑,这是因为那里是我们的拍摄死角。你可以补拍一些照片。值得庆幸的是,当你补拍了照片并且添加到 VisualSFM 中时,其他照片的特征值以及匹配结果不需要重新计算。

对比 123D Catch,离线的开源方案让我们可以了解整个重建过程,也提供了更高的自由度,但是尝试之后它的缺点也是显而易见的。首先,离线开源方案需要更多的照片。123D Catch 可以在不满十张照片的情况下重建出不错的效果,但是开源方案则至少需要几十张,Autodesk 从 Acute3D 处购得的技术之强大可见一斑。其次,由于整个重建过程的计算量很大,在桌面系统上开源方案会跑的很吃力。重建佛陀,123D Catch 的云端服务器在几分钟内就能完成,但是跑在 4 核的 64 位 Windows 环境上的开源软件,光密集重建一步就花了半个多小时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于使用2d照片进行3d建模 的相关文章

  • 计算几何 (POJ1127 、 )

    计算几何 1 判断线段是否相交 1 判断线段是否相交 在不需求出交点 xff0c 只需判断两条线段是否相交 xff0c 可以使用 1 快 速 排 斥 实
  • 【ABviewer从零开始教学查看器篇②】关于打开文件的快捷方式

    ABViewer是一款高质量 高效率 低成本的多功能设计及工程文档管理工具 能为您提供全面的专业的浏览及编辑功能 同时支持30多种光栅和矢量图形格式 在小编看来 ABViewer是一款非常简单且实用的CAD文档查看与编辑器 对于使用小白可能
  • ALLEGRO17.2椭圆过孔焊盘绘制

    1 先打开Padstack Editer 先把左下角Units 的单位改为MM 2 进入这个界面后这里选择Slot 3 这里Oblong Rectangle Rcunded Rectangle Chamfered Rectangle都可以选
  • 一,凸包---3,极边

    极边就是组成凸包的边的集合 时间复杂度是o n3 比判断极点快 时间复杂度O n4 快 为什么呢 试想 不论极边也好 极点也好 判断的依据是三角形的方向 无论是海伦公式 还是向量叉乘 极边是需要三个点组成一个三角形 是一个三重循环 即可用t
  • The PLY Polygon File Format

    The PLY Polygon File Format Author Greg Turk Introduction This document presents the PLY polygon file format a format fo
  • 关于叉积

    学过计算几何以后 我发现几乎每一道题都用到了叉积这个东西 叉积是什么呢 在这个图中 以原点为中心 叉积就是x1 y2 x2 y1 记得话就记1221 x前y后 但是这并不是完全正确 比如说这个图 在这个图中 点1和点2是以点0为中心 不是原
  • hihoCoder 1582 Territorial Dispute

    Problem hihocoder com problemset problem 1582 vjudge net problem HihoCoder 1582 Reference hihocoder 1582 Territorial Dis
  • 【CAD算法】基于最速下降法(梯度下降)的最短路径实现(python实现)[5]

    1 内容回顾 关于Bezier曲线内容 请参考https blog csdn net iwanderu article details 103604863 优化问题有很多解决方式 例如最速下降 批量梯度下降 随机梯度下降 LM算法 GN算法
  • 能通过一张照片(2D)得到3D的模型吗?

    如下内容已经整理成 PDF 很好奇其实如果将人眼所看到的画面保存下来 拍照 人类是可以感知照片内的各个物体 是不是可以理解成这是一种2D到3D认知的转换 作者 知乎用户 链接 https www zhihu com question 529
  • Points Within

    http acm zju edu cn onlinejudge showProblem do problemId 81 Statement of the Problem Several drawing applications allow
  • CGAL计算几何算法库安装和使用(一)

    CGAL是使用C 开发的计算几何算法库 提供Delaunay三角网 网格生成 多边形 以及各种几何处理算法 应用领域 计算机图形学 科学可视化 计算机辅助设计与建模 地理信息系统 分子生物学 医学影像学 机器人学和运动规划 和数值方法 1
  • Aspose转换功能演示:使用C#以编程方式将STL转换为PDF或图像

    STL 立体光刻的缩写 代表3D表面几何形状 这些通常在与CAD有关的应用程序中使用 使用Aspose可以轻松快捷地将STL文件转换为PDF 由于PDF格式的兼容性 这种文件格式转换在需要查看不同操作系统和环境中的信息的情况下很有用 同样
  • 【SSL_1232】雷达覆盖

    思路 以一个点作为平角 计算几何统计 c o d e code code include
  • hdu 1255 覆盖的面积

    Problem acm hdu edu cn showproblem php pid 1255 Reference hdu 1255 覆盖的面积 矩形面积并 矩形面积交 矩形周长并 线段树 扫描线总结 Meaning 给出 n 个矩形 求它
  • 火星探险 (Mars)

    暂无链接 题目描述 在2051年 若干火星探险队探索了这颗红色行星的不同区域并且制作了这些区域的地图 现在 Baltic空间机构有一个雄心勃勃的计划 他们想制作一张整个行星的地图 为了考虑必要的工作 他们需要知道地图上已经存在的全部区域的大
  • 三维数据处理软件架构

    三维数据处理软件都包含哪些模块 三维数据处理软件 一般包含三个模块 数据管理和处理 三维渲染 UI 这与图形学的三个经典问题是相对应的 建模 渲染和交互 与一般常见的数据处理软件 比如图像视频处理 不同的是 这里的数据展示模块需要三维渲染
  • C# Revit二次开发基础/核心编程--- 元素Element(基础、编辑)

    一 本节课程 C Revit二次开发基础 核心编程 元素Element 基础 编辑 二 本节要讲解的知识点 元素Element的基础概念 如何编辑元素 具体内容 元素Element基础 元素在Revit里面尤其重要 用户能看见的大多数对象都
  • 判断一个点是否在圆内(三点确定一个圆)

    三角形的外接圆圆心是任意两边的垂直平分线的交点 三角形外接圆圆心叫外心
  • 在 WPF 中绘制 3D 线条

    我正在开发 CAD 应用程序 并考虑使用 WPF 来渲染我的实体 但WPF似乎不支持绘制3D线条 有没有办法在WPF中绘制3D线条 我不喜欢为我需要绘制的每个线实体创建一个网格 因为我担心这会给我带来重大的性能问题 因为我必须在我的应用程序
  • DXF图像实体组代码解释

    我正在开发一个 Delphi 类来从 DXF 文件导入 导出某种实体 我想添加对图像实体的支持 但我不明白一些组代码 我正在使用官方 DXF 指南参考 2002 http www autodesk com techpubs autocad

随机推荐

  • 高防CDN和高防IP的各自优势

    服务器配置中高防IP与高防CDN各自的优势分别是什么 为了更好地防止由于进攻造成 的网络服务器偏瘫 营运商们一般 会挑选具有 高防御服务器 来开展经营 如果是在经营全过程中遭受了进攻 不愿去拆换网络服务器得话 这个时候 就可以选用加上高仿I
  • Gravatar镜像源自建教程,使用CDN加速无需配置反代

    什么是 Gravatar Gravatar 是 Globally Recognized Avatar 的缩写 是 Gravatar 推出的一项服务 意为 全球通用头像 如果在 Gravatar 的服务器上放置了你自己的头像 那么在任何支持
  • D3DCompiler_47.dll丢失怎么解决-D3DCompiler_47.dll丢失怎么办

    d3dcompiler47dll丢失怎么解决 很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑的该dll文件没有或者损坏了 这时你只需下载这个d3dcom
  • 大数据从入门到精通(超详细版)之HDFS详解,学不会算我输!!!

    前言 嗨 各位小伙伴 恭喜大家学习到这里 不知道关于大数据前面的知识遗忘程度怎么样了 又或者是对大数据后面的知识是否感兴趣 本文是 大数据从入门到精通 超详细版 的一部分 小伙伴们如果对此感谢兴趣的话 推荐大家按照大数据学习路径开始学习哦
  • eProsima Fast DDS Documentation翻译

    eProsima Fast DDS Documentation eProsima Fast DDS 是 DDS Data Distribution Service 协议的一个C 语言实现版本 该协议由 Object Management G
  • wind matlab接口函数,使用wind量化接口函数wss时出现问题'CWSSService: repeated windcodes.'...

    我之前运行了一次程序 是可以运行的 在把MATLAB关掉一次后 再打开运行 从WIND中下载的数据中只有这一句提示 本来应该是下载某年某月末所有非ST 非停牌 上市超过六个月的A股的收盘价和PE值的 代码如下 load mydata mat
  • Python爬虫(入门+进阶)学习笔记 2-5 Scrapy的中间件

    上一节我们学习怎么去保存爬取的结果 然而大多数时候裸奔的请求很容易被网站反爬技术识别 导致并不能获取到我们想要的数据 我们该怎么做呢 中间件就可以帮你解决这些事 下载中间件 Downloader middlewares Scrapy框架中的
  • spring-jms

    为什么要在博客上总结一下 那么多优秀的博客 网站上的都很清楚 这就好比老师的板书写的再好 和你半毛钱关系没有 总结理解消化为自己的东西才有用 如果看了就能记住能懂 那人人都是专家 因此总结 归纳尤为重要 百度百科给出的 定义 JMS Jav
  • vtk vs2015 win10 64bit 编译注意事项

    记录几个凌乱的关键点 事先安装Qt 我得是5 8版本 需要官网注册之类的 1 关于Python 编译带tcl java python的 vtk 需要很多繁琐的步骤 记录整个过程太恐怖了 vtk暂时不支持python3 支持的还是python
  • XSS Payload绕过云锁学习

    前言 对于我这个菜鸟来说 我通过谷歌百度学习到很多前辈的资料 甚至每句话都是他的指导 我也很感激前辈的为我们铺设的道路 让我们更快的成长起来 我也乐于分享 可能有些知识点过于单调或者久远 请见谅 WAF 前几天花了10买了一个月的服务器 换
  • springboot注解@Order的使用

    使用order属性 设置该类在spring容器中的加载顺序 例如有三个类 Order1 Order2 Order3 其中Order1类如下 Component 把类交给spring容器管理 Order 1 使用order属性 设置该类在sp
  • scanf函数返回值的具体应用

    scanf函数返回值的具体应用 include
  • 小程序动态图片加载失败替换本地图片

    希望效果图 前言 写一个新闻列表 一个页面里就有几十条数据 虽然分页查询 但图片有时候还会加载失败 网速 图片大小等原因 下面说说我的思路 我把新闻列表封装成了一个子组件 1 在子组件标签image中放入error事件 传入index 2
  • 华为8年软件测试工程师感悟 功能测试如何体现自己的价值?

    无论在那个行业都有新人 而每个新人在刚入行时都会经历迷茫到精进的过程 大多数的测试人员也是如此 毕竟谁也不是一开始就是行业大佬 接下来 针对题主提出的问题以及描述的所处情况给大家讲一讲测试新人入行初期如何去摆脱迷茫做好自我提升 PS 这里有
  • Linux学习(十):查看文件系统(dumpe2fs)

    b 列出保留为坏道的部分 一般用不到 h 仅列出superblock的数据 不会列出其他的区块内容 1 找出我的根目录磁盘文件名 并查看文件系统的相关信息 ps df 调出目前挂载的设备 ps Filesystem volume name
  • suse linux下修复文件系统,Suse 11 下一次文件系统修复的案例 .

    操作系统 Suse Linux 11 文件系统 ext3 错误现象 X日 接到告警 检查文件系统 dev sda1发现写入报只读 检查IP存储有告警 随即umount img 但卸载后无法正常挂载 fdisk l显示IO错误 重启应用服务器
  • 如何判断文件是否读到文件结尾

    二进制文件 头文件 include define feof stream stream gt flag IOEOF feof 函数用来检测当前文件流上的文件结束标识 判断是否读到了文件结尾 其原型为 int feof FILE stream
  • 1. Ubuntu 20.04 初始化root密码

    1 以普通用户登录系统 创建root用户的密码 在终端输入命令 sudo passwd root 然后输入设置的密码 输入两次 这样就完成了设置root用户密码了 注意Linux系统下密码是没有回显的
  • servlet.Ajax实现上传文件进度条

    这里关于servlet如何上传文件就先不说了 将如何得到已经上传的文件数据的百分比 首先我们先写一个类这个类要实现ProgressListener这个接口 实现里面的update 方法 代码如下 package com test servl
  • 关于使用2d照片进行3d建模

    转载感言 作者一句业余 搞得弟兄们面红耳赤了 感谢作者的可行性分析 Autodesk 的 123D Catch 让我们能够很简单的根据一组照片构建3D物体 你只需要从各个角度拍摄希望建模的物体 然后通过 123D Catch 将照片上传到