本周完成的工作主要是:(1)详细阅读一篇论文,查资料并了解3D场景重建的基本流程;(2)搭建安卓开发环境
论文阅读
3D Reconstruction and Rendering from Image Sequences
R.Koch, J.-F. Evers-Senne, J.-M. Frahm, K.Koeser
(1) 介绍
文章实现了一个3D场景的表面重建系统,可以合成未知静态场景的新视角视图。整个系统可以大体分为两部分:线下数据采集和线上交互渲染。
在线下数据采集部分,大体进行两个步骤。第一步为通过SfM(structure from motion)方法估计相机的方位以及标定其内部参数。这样就会得到一个稀疏的3D特征点集。这些特征本身就已经组成了一个对于场景的稀疏3D描述。第二步是优化改善上一步的结果:从上一步中做过标定的图片中估计出稠密深度图(dense depth maps),进而进行3D场景几何物体的refine。总的来说,经过了线下数据采集部分以后,每张图片的标定参数(the associated calibration)、3D拍摄姿态(3D pose)和稠密深度图(dense depth map)会被计算并存储。
在线上交互渲染部分,使用VDGT(view-dependent geometry and texture models)利用第一部分的结果渲染并呈现出场景在新视角的视图。
(2) 系统框图
(3) 分块讲解
- 线下数据采集(offline data acquisition)
大体进行两个步骤。第一步为通过SfM(structure from motion)方法估计相机的方位以及标定其内部参数。这样就会得到一个稀疏的3D特征点集。这些特征本身就已经组成了一个对于场景的稀疏3D描述。具体来讲,先用一个2d feature detector抽取出图像的特征,然后使用KLT-tracker等找到场景的不同视图之间相关的特征。匹配过程使用到RANSAC算法。由于所有2D视图都是一个3D场景在不同角度的投影,所以可以通过同时估计相机姿态和3D特征点来计算所有视线的交叉情况。于是bundle adjustment算法提炼出描述场景结构的3D点坐标、相对运动参数和相机的光学参数,这样就得到了我们想要的相机姿态和3D特征点。
同一场景的不同角度视图如下图所示:
场景原图和3D标定结果如下图所示:
第二步是优化改善上一步的结果:从上一步中做过标定的图片中估计出稠密深度图(dense depth maps),进而进行3D场景几何物体的refine。具体来讲,需要对每个视图的每个像素点进行深度估计。论文使用到的方法是multi-view stereoscopic depth estimation. - 线上交互渲染(interactive online rendering)
在进行线上交互渲染时,用户可以控制一个虚拟的照相机,从新的角度查看场景。新角度的视图通过根据已有视图的标定图和深度图进行插值而得到。这个时候面临的问题有几个:哪些图片对于所求视角最为合适、怎样计算深度的变化以及如何将原图中的文理信息混合进新的视图。当然,如果想实现交互式的效果,处理的帧率要至少达到10fps。
文章解决这些问题的策略为:
– 选择最佳的相机视图
– 融合不同视图的几何物体
– viewpoint-adaptive mesh generation
– viewpoint-adaptive texture blending
具体来讲,是使用了VDGT(Rendering with View dependent Geometry and Texture)的方法。该方法选取与新视角的视点、方向、公共视图内容最相近的几个相机图片,并将他们经过图像扭曲(image warping)拼接到一个表面上。
安卓环境搭建
(1) 软件版本
采用0.86 beta 版本的Android Studio
(2) 安装过程
1) 缓存文件夹配置
Android Studio的缓存路径,这个缓存文件主要是存放一些Android Studio设置和插件和项目的缓存信息的,缓存文件夹如图:
缓存文件夹是默认在磁盘中,随着项目的增多,缓存会越来越大,甚至会达到几G的大小,所以移到非系统盘是必须的,也方便以后重装系统时,没必要的迁移。
找到Android Studio根目录,进入bin,再找到idea.properties,打开并修改它,找到要修改的选项,去掉注释符号。然后修复后面的配置路径,如图
然后就能在安装目录下运行了。
2) 构建工具 Gradle的配置
这个部分是整个配置过程的关键。项目无法编译或者报错的问题通常源于此部分没有执行好
Android Studio 中,有一些概念是和 eclipse 不同的. eclipse 迁移至 Android Studio 时,一些概念的对照情况如下,仅供参考和明确,方便以后的熟练使用.
对比 | exlipse | Android Studio |
---|---|---|
工作区 | workspace | project |
项目 | project | module |
引用 | preference | module dependency |
简单的来说,android Stduio,把一个项目比喻成一个工程的一个个模块,外部的依赖也是一个个模块,这样一个项目的结构就很清晰明了。
- 新建项目
基本步骤省略至下图
离线配置gradle文件,先用系统自带进程管理器杀死android Studio,然后来到C盘,找到C:\Users\xxx.gradle\wrapper\dists ,xxx为当前系统的用户名,进到这个目录,在gradle官网下载,1.12版本的gradle,选择1.12的版本,选择gradle-1.12-all,下载,将下下来的压缩文件放在此目录即可。