【Let It Be Color!——3D重建之纹理重建】01-几种坐标系及相互之间的转换

举报
景末 发表于 2020/06/05 10:53:26 2020/06/05
【摘要】 3D模型的重建是视觉领域的一个重要分支。这个系列博文所围绕的范围仅限于3D重建中的纹理重建,参考Waechter的经典论文标题,我将它命名为Let It Be Color!。所谓纹理重建,简而言之,就是通过某场景的一系列2D图像和经过表面重建后得到的白模,来计算网格模型表面的颜色,从而形成彩色的3D模型。本篇博文将从几种坐标系的定义和它们相互之间的转换开始讲起。

1 引言

3D模型的重建是视觉领域的一个重要分支。作为一名3D菜鸟,我在平时学习的过程中遭遇了很多或大或小的问题,包括一些复杂的概念、处理管线等等。于是经过一些总结和梳理后,我准备动笔写一个系列博文,一方面记录一些自己所遭遇到的问题与解决方案;另一方面也方便与各位大佬共同探讨,加深、修正自己对这项技术的理解。这个系列博文所围绕的范围仅限于3D重建中的纹理重建,参考Waechter的经典论文标题,我将它命名为Let it be color!但在切入主题之前,让我们先来简单了解一下3D重建的大致流程。

2 3D重建与纹理重建

相较于常规的2D图像而言,3D模型通常能够保有更多的物理信息,具有更直观的视觉属性。现如今,获取3D模型的方法和途径有很多,而依据普通的2D-RGB图像构建场景的3D模型显然具有更低廉的硬件成本,因此汇聚了很多的研究精力。在这些基于普通2D-RGB图像的3D重建技术中,一条被普遍采用的重建管线如下图所示。

image.png

一系列从不同角度拍摄的2D图像输入3D重建系统后,第一步首先是通过SfM(Structure from Motion)技术构建稀疏点云(sparse points cloud),同时估计相机的位姿。但是通过稀疏点云是无法形成精细表面的,因此下一步需要通过MVS(Multi-View Stereo)技术来进一步构建稠密点云(dense points cloud)。稠密点云已经基本能够比较精细地表达场景了,但仍然还是以点的形式而不是我们所希望的表面。因此第三步是表面重建,通过诸如泊松重建(Poisson Reconstruction)等方法,由稠密点云来生成网格,但这时的网格通常是不包含颜色信息的,也就是通常所说的白模。所以最终还需要通过纹理重建(有时也被成为纹理映射)来得到最终的经过着色的3D模型。

关于这一领域有很多优秀的开源工程,诸如COLMAP、OpenMVS、OpenMVG、PMVS/CMVS、MVE等等。

本系列博文所着重讨论的就是这一管线的最后一步——纹理重建。

image.png

所谓纹理重建,简而言之,就是通过某场景的一系列2D图像和经过表面重建后得到的白模,来计算网格模型表面的颜色,从而形成彩色的3D模型。

从相对宏观的层面上讲,实现这一目的可以有不同的解决方案,例如对网格上的所有面片(通常是三角形)而言,可以融合其在所有输入图像(该面片需要在该图中可见)中的颜色以作为该表面的颜色,也可以寻找最佳视角下的图像在该面片上的颜色。前者可以被称作基于融合的方法(blending-based methods),后者则可以被称作基于映射的方法(projection-based methods)。然而不论是哪种方法,都需要寻找面片所对应的图像(也可以被称为一个视角),并计算三维面片投影在二维图像中的位置。作为本系列博文的第一篇,本文将首先讨论三维片面在二维图像上的投影问题,事实上,这一问题的核心内容,就是几种坐标系以及他们之间的变换。

3 世界坐标系、相机坐标系、图像坐标系

直接从模型文件中读取的3D网格模型,一般至少含有顶点和面片两方面信息。面片一般是由三个顶点所构成的三角形,在模型文件中通常只需记录三个顶点的索引,而对每一个顶点,则记录其所在空间位置的坐标,这一坐标所在的坐标系就是世界坐标系。

记一个顶点的世界坐标为P_w,若需要获得该顶点的颜色,则需要寻找该点映射到图像中的像素位置P_uv,图像的像素位置所处的坐标系一般被称作图像坐标系,很显然这是一个二维坐标系,缺失了深度信息。从世界坐标系到图像坐标系的转换并不很直观,但是可以以相机坐标系为媒介来实现。相机坐标系的三轴与相机直接绑定,因此相机在世界空间中的位置和姿态可直接用于计算世界坐标系到相机坐标系的变换,而相机与图像则是直接关联的,而者之间的转换是很直观的。以下将分别介绍这两步变换。

3.1 世界坐标系—>相机坐标系

可以想象,给定了世界坐标系框架后,场景中的任意一个点的坐标即被固定,不再发生变化,但随着相机的移动,空间中的点映射到图像中的位置也会随之运动,因此相机的位姿是一项关键参数,这一参数通常被称作为相机的外参(extrinsics)。相机的外参含有两项内容,旋转矩阵R_(3×3)和平移向量t_(3×1),分别表示相机在空间中的旋转量和平移量。或者,也可以用一个变量来同时表达这两项参数:

image.png

这一形式也被称作外参的齐次形式。

参考刚体旋转平移以及坐标系变换的相关知识(这其中有比较复杂的数学内容,此处略去,感兴趣的同学可以自行搜索旋转矩阵、欧拉角等内容),可得到世界坐标为P_w的点在相机坐标系下的坐标为:

image.png

或其齐次形式:

image.png

3.2 相机坐标系—>图像坐标系

下图表示了相机坐标系及基础的相机模型。原理上,一个物理意义上的点P,经过小孔成像后会发生翻转,因此在分析时,不妨假设图像在相机的前方,从而映射到图像平面上的某一点P_0。

image.png

根据相似三角形原理,若P在相机坐标系下的坐标P_c为(x, y, ),则他在图像平面中的坐标应当为

image.png

但(x', y' )却并非是图像坐标系,图像坐标系一般以图像左上角为原点,向右作为轴,向下作为轴,单位是像素,而默认的相机坐标系单位则是米,因此(x'y' )坐标到(u, )坐标首先需要经过一次缩放,再经过一次平移,才能得到(u, )坐标。假设缩放因子分别为αβ,平移因子分别为c_xc_y,则

image.png

将前式代入,并用f_xf_y 代替αf βf,则可得

image.png

简洁地,该式可以写成矩阵形式:

image.png

其中,通常被称作为相机的内参。

至此,当我们获取到相机的内参外参后,我们就可以直接通过顶点的世界坐标计算得到其像素坐标了。而相机内外参数的计算通常会在3D重建第一步的SfM过程中实现,在进行纹理重建时可以直接调取,因此此处不赘述。需要特别指出的是,上述过程中不包含相机去畸变过程(去除由于相机镜头的光学特性而产生的画面弯曲),因为多数管线中去畸变往往是独立进行的,输入到管线中的图像通常已经是经过去畸变后的图像。

4 计算相机位置和视角方向

我们已经知道,相机外参代表了相机的位姿,然而从实际数据上来看,相机的外参是相机的旋转和平移量,而并非直接是相机位置和姿态。这当然有利于坐标运算的简便性,但在实际应用的过程中,相机在世界坐标系下的位置和姿态(也就是方向)也是计算过程中必要的参数,这需要一些简单的运算来获取。

首先需要明确的是,相机所在的位置即为相机坐标系的原点,也就是说,在相机坐标系下,相机的位置是

image.png

而前文已经介绍了世界坐标系到相机坐标系的变换:

image.png

因此,若要获取相机在世界坐标系下的位置,只需进行上式的逆运算即可,即:

image.png

类似地,参考上文给出的相机坐标系,可以清楚地看出,在相机坐标系下,相机视角指向轴,那么它的单位向量应为

image.png

将该向量看成是终点坐标与起点坐标之差,并根据逆转换规则将两点还原到世界坐标系后做差即可得到相机视角在世界坐标系下的单位方向,即

image.png

平移量由于做差而抵消。

5 重心坐标系

考虑到标准情况下,组成3D模型的网格表面的基本单元是三角形,在进行分析计算时利用一些三角形的特殊性质会简便很多。因此,有必要介绍一下三角形的重心坐标系,这在实际计算时是非常常用的。

image.png

如上图所示,在一个三角形内部有任意一点P,可以很自然的想到,AP 向量可以被表示成AB 向量和AC 向量的线性组合,也就是说

image.png

记上式中各个点的坐标分别为PABC,则上式可以表示为

image.png

即:

image.png

这里(1-m-n, m, )就是点的重心坐标。

在计算该坐标时,若将PAB的二维平面坐标代入上式则可得

image.png

很显然,通过求解该式,则可直接得出m的值。等价地,也可以直接使用向量形式计算。为了简便,这里使用v_0、v_1、v_2分别代替AB 向量、AC 向量和AP 向量,则

image.png

两边同时点乘v_0、v_1可得

image.png

求解得:

image.png

上式也可以写成叉乘的形式

image.png

利用三角形的重心坐标,可以简单地做一些很有价值的事情,例如判断P点是否落在三角形内,或者对P点的颜色进行插值:

  • 为了判断空间中某一面片是否被遮挡,需要判断其他面片中的点是否会投影到该面片中,这需要进行三角形内点判断,而判断三角形内点只需满足mn、(1-m-)同时大于0小于1即可。

  • 有时在对三角形中某一点的颜色进行调整时,需要依据三角形三个顶点的颜色对该点颜色实施插值,最常用的方式即为重心插值,即以重心坐标作为权重求该点的加权均值作为该点颜色。

事实上,基于该坐标系还有很多很有用的性质, 诸如一些关于面积的特性等等,此处不多赘述了。

6 总结

这一篇博文中,我们简单地介绍了世界坐标系、相机坐标系、图像坐标系以及它们之间的变换,这实际上是基于图像的3D重建的基础,无论是重建几何信息时还是重建纹理信息时都多有涉及,因此不放将之看作是前置性内容。随后我们介绍了三角形的重心坐标系,该坐标系在处理网格表面的三角形时十分常用,但仍然属于预备知识范畴。下一篇博文,我们将展开纹理重建的正式内容,介绍网格面片的视角选择过程。

参考文献

[1] Waechter M, Moehrle N, Goesele M. Let there be color! Large-scale texturing of 3D reconstructions[C]//European conference on computer vision. Springer, Cham, 2014: 836-850.

[2] Fu Y, Yan Q, Yang L, et al. Texture mapping for 3d reconstruction with rgb-d sensor[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 4645-4653.

[3] 高翔. 视觉 SLAM 十四讲: 从理论到实践[M]. 电子工业出版社, 2017.

[4] https://blackpawn.com/texts/pointinpoly/default.html

[5] https://zhuanlan.zhihu.com/p/58199366

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。