Week 1

本周完成的工作主要是:(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) 系统框图 

System Diagram

(3) 分块讲解

  • 线下数据采集(offline data acquisition)
    大体进行两个步骤。第一步为通过SfM(structure from motion)方法估计相机的方位以及标定其内部参数。这样就会得到一个稀疏的3D特征点集。这些特征本身就已经组成了一个对于场景的稀疏3D描述。具体来讲,先用一个2d feature detector抽取出图像的特征,然后使用KLT-tracker等找到场景的不同视图之间相关的特征。匹配过程使用到RANSAC算法。由于所有2D视图都是一个3D场景在不同角度的投影,所以可以通过同时估计相机姿态和3D特征点来计算所有视线的交叉情况。于是bundle adjustment算法提炼出描述场景结构的3D点坐标、相对运动参数和相机的光学参数,这样就得到了我们想要的相机姿态和3D特征点。
    同一场景的不同角度视图如下图所示:
    Different Views of the Origianl Scene
    场景原图和3D标定结果如下图所示:
    Overview image and calibration results
    第二步是优化改善上一步的结果:从上一步中做过标定的图片中估计出稠密深度图(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设置和插件和项目的缓存信息的,缓存文件夹如图:

cache folder

缓存文件夹是默认在磁盘中,随着项目的增多,缓存会越来越大,甚至会达到几G的大小,所以移到非系统盘是必须的,也方便以后重装系统时,没必要的迁移。

找到Android Studio根目录,进入bin,再找到idea.properties,打开并修改它,找到要修改的选项,去掉注释符号。然后修复后面的配置路径,如图

configuration screenshot

然后就能在安装目录下运行了。

2) 构建工具 Gradle的配置

这个部分是整个配置过程的关键。项目无法编译或者报错的问题通常源于此部分没有执行好

Android Studio 中,有一些概念是和 eclipse 不同的. eclipse 迁移至 Android Studio 时,一些概念的对照情况如下,仅供参考和明确,方便以后的熟练使用.

对比 exlipse Android Studio
工作区 workspace project
项目 project module
引用 preference module dependency

简单的来说,android Stduio,把一个项目比喻成一个工程的一个个模块,外部的依赖也是一个个模块,这样一个项目的结构就很清晰明了。

  • 新建项目

基本步骤省略至下图

new project

离线配置gradle文件,先用系统自带进程管理器杀死android Studio,然后来到C盘,找到C:\Users\xxx.gradle\wrapper\dists ,xxx为当前系统的用户名,进到这个目录,在gradle官网下载,1.12版本的gradle,选择1.12的版本,选择gradle-1.12-all,下载,将下下来的压缩文件放在此目录即可。

Alt text