三维重建 3D Reconstruction

建设中,记录日常学习到的碎片,最后整理

什么是三维重建?

这里指的三维重建是基于对环境或者物体的一系列不同角度的照片,通过一系列的处理,获得环境或物体的三维模型。

三维模型的表示方式

点云(Point Clouds)、网格(Meshes)、体素(Voxels)、Patch Clouds、Layered Models、Depth maps等。

主要方法

比较常见的流程是:
提取图像特征(如SIFT、SURF等)->利用特征将图像计算图像之间的特征匹配->基于匹配的特征进行稀疏重建,得到各个图像的相机位姿和稀疏的特征点云(SfM)->基于相机位姿进行稠密重建,得到稠密点云(PMVS/CMVS)->基于点云重建网格、体素或者纹理

常用工具

image.png

VisualSFM是一个整合了特征提取、图像匹配、稀疏点云重建、稠密重建(需要单独下载CMVS/PMVS)的软件,由?开发,免费但不开源(不能用于商业用途)。基于一系列RGB图像,我们可以得到一个稠密的点云。
PMVS/CMVS用SFM的输出作为输入,利用稀疏的特征点云、图像和对应的相机位姿来重建稠密点云。这个算法由?开发,如果你的OpenCV是build without non commercial module,采用permissive BSD license,可以用于商业目的。PMVS指的是将大的点云合理地分割、重建、拼接的过程。
MeshLab是常用的点云、网格显示和处理软件,内置了很多3D重建算法,能够进行基于点云的网格重建、简化等。
COLMAP是一个开源的软件,采用New BSD license,因而可以用于商业目的。类似于VisualSFM的前半部分,COLMAP能够用于从图像中得到稀疏特征点云和相机位姿。如果有CUDA的话,COLMAP也能用于稠密点云重建和表面重建。
https://colmap.github.io
Bundler是稀疏重建工具,然而效果可能不如VisualSFM。

SfM(Structure from Motion)

SfM指的是给出n个固定的三维空间点的m张图像:
\mathbf{x}_{ij}=\mathbf{P}_i\mathbf{X}_j, \quad i=1,...,m, j=1,...,n
m\times n个对应关系\mathbf{x}_{ij}中估计出m个投影矩阵\mathbf{P}_in个三维空间中的点\mathbf{X}_j

SfM问题中的不确定性

如果我们对场景进行一个变换\mathbf{Q},同时对相机矩阵进行其逆变换\mathbf{Q^{-1}},则图像会保持不变:
\mathbf{x}=\mathbf{PX}=(\mathbf{PQ}^{-1})(\mathbf{QX})
因而SfM问题中会存在不确定性,通过一些约束可以减小不确定性。
这些不确定性可以分为以下几种
。。。

Workflow of SfM

相机的内参矩阵和外参矩阵

我们记一个点在世界坐标系(WCS,World Coordinate System)中的坐标为\mathbf{X}_w=[x_w,y_w,z_w]^T,相机坐标系(CCS,Camera Coordinate System)的坐标为\mathbf{X}_c=[x_c,y_c,z_c]^T,其在相机图像中的投影(ICS,Image Coordinate System)中的坐标为\mathbf{X}=[u,v]^T。则内参矩阵\mathbf{K}表示\mathbf{X}_c\mathbf{X}之间的关系:
\left[ \begin{matrix} u\\ v\\ 1 \end{matrix}\right]=\frac{1}{z_c} \left[ \begin{matrix} f_x &0&c_x\\ 0&f_y&c_y \\0&0&1 \end{matrix}\right]\cdot \left[ \begin{matrix} x_c\\ y_c\\z_c \end{matrix}\right]
外参矩阵则指的是相机坐标系和世界坐标系之间的欧氏变换矩阵,包括平移矩阵\mathbf{t}和旋转矩阵\mathbf{R}
\mathbf{X}_c=\mathbf{R}\mathbf{X}_w+\mathbf{t}
写成增广形式:
\left[ \begin{matrix} x_c\\ y_c\\ z_c\\1 \end{matrix}\right]= \left[ \begin{matrix}\mathbf{R} &\mathbf{t}\\ \mathbf{0}&1 \end{matrix}\right]\cdot \left[ \begin{matrix} x_w\\ y_w\\ z_w\\1\end{matrix}\right]
则外参矩阵\mathbf{A}可以表示为:
\mathbf{A}= \left[ \begin{matrix}\mathbf{R} &\mathbf{t}\\ \mathbf{0}&1 \end{matrix}\right]
于是从世界参考系到图像坐标系的转化可以用一个投影矩阵\mathbf{P}来表示:

相机的基础矩阵(Fundamental Matrix)和本质矩阵(Essential Matrix)

基础矩阵\mathbf{F}
对于两个固定的相机,那么存在一个3\times 3的矩阵\mathbf{F},对于任意一个三维空间点\mathbf{X}_w,若其在两个相机图像参考系中的坐标分别为\mathbf{X}_i=[u_i,v_i,1]^T\mathbf{X}_j=[u_j,v_j,1]^T,则有
\mathbf{X}_i^{-1}\mathbf{F}\mathbf{X}_j=0
基础矩阵只由两个相机的内参(\mathbf{K},\mathbf{K'})和相互变换关系(\mathbf{R},\mathbf{t})决定,确定了两个相机的对极几何,可以将一个相机图像上的一点转化成另一个相机图像上的一条极线。
八点法计算基础矩阵
单凭\mathbf{X}_i^{-1}\mathbf{F}\mathbf{X}_j=0这个关系,我们是无法确定基础矩阵的,因为乘上任何一个常数等式仍然成立,因而我们通常让f_{33}=-1。这样基础矩阵还有八个自由度,只需要再有八个点对就可以确定基础矩阵(线性无关的情况下)每个点对会得到一个如下的方程:uu'f_{11}+vu'f_{12}+u'f_{13}+uv'f_{21}+vv'f_{22}+v'f_{23}+uf_{31}+vf_{32}=1
实际上我们会希望用更多的信息来计算基础矩阵,可以用更多的点,随后对超定方程组计算最小二乘解,也或者用RANSAC算法用其他的点进行验证,取最好的结果。
本质矩阵\mathbf{E}
本质矩阵被定义为\mathbf{E}=\mathbf{K'}^T\mathbf{F}\mathbf{K},只与两个相机间的相互变换(\mathbf{R},\mathbf{t})有关。我们可以通过SVD分解等方法算出\mathbf{R},和\mathbf{t}的方向,这也被用于SfM的一种方法。
基础矩阵、本质矩阵与SfM
一方面,基础矩阵可以用来验证两幅图像间的特征匹配;另一方面,可以通过基础矩阵推算出本质矩阵,并以此使用序惯的方式将所有图像对应的相机位姿结合到一起。

序惯方法

  • 极线约束:利用本质矩阵可以算出一个相机位姿相对于另一个相机位姿的旋转和平移方向,利用一个额外的确定的点,我们便可以确定平移的距离。这样利用之前的相机的位姿能够确定新的相机位姿。
  • Resection:利用已经重建过的3D点来确定新的视野的位姿。
  • 融合局部重建碎片:每两三个视野进行局部重建,然后融合在一起。

MVS(Multi-View Stereo)

广义上的多视几何指的是利用同一个物体或者场景的一系列照片计算出它的一个3D形状的某种表示。

基于RGB-D相机的的三维重建

除了图像,还能感知距离的相机被称为RGB-D相机。RGB-D相机常见的技术包括ToF(Time of Flight,飞时原理)、Stereo(双目)、结构光等。常见的结构光相机如Microsoft Kinect、Intel RealSense等。
RTAB Map
RTAB Map(Real-Time Appearance-Based Mapping)是一个基于图的SLAM框架。我们也可以用RTAB Map来实现场景的稠密三维重建。RTAB Map在ROS环境下有比较好的集成,可以支持常见的RGB-D相机和IMU。

RTAB Map

未完待续

参考:
mardy.it的Youtube视频:Overview of different photogrammetry programs
RTAB map主页
基础矩阵、本质矩阵
Never-guess的CSDN博客:SfM的算法流程
http://mi.eng.cam.ac.uk/~cipolla/publications/contributionToEditedBook/2008-SFM-chapters.pdf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容