基于单目相机序列图像的双层过滤三维重建∗

2019-11-12 06:38:48匡文彬梁文章
计算机与数字工程 2019年10期
关键词:离群三维重建视图

匡文彬 梁文章 陈 姝

(1.湘潭大学信息工程学院 湘潭 411105)(2.广西卡斯特动漫有限公司 南宁 530007)

1 引言

如何重构出真实感的三维场景,以满足人们在数字城市,虚拟现实等领域的应用,已成为计算机视觉等领域热点关注的问题。三维重建技术大致包括通过激光探测与测量技术进行重建和通过影像进行重建两种[1~2]。与前者相比,后者更加经济和便捷。基于单目相机序列图像的三维重建技术由于使用方便、成本低廉,比专业的三维扫描仪有更广泛的使用场景[3]。基于影像的三维建模,就是通过对物体或者场景拍摄的图像序列来恢复物体的三维模型的过程,从而使得建模过程更加自动化,降低了人工劳动强度,减少了建模成本。

利用图像序列进行场景三维重建时,拍摄的场景通常比较复杂,很少存在所拍摄的图像只有目标物体的情形。这样在点云重建时会产生一些除目标物体以外的离群点,因此在点云重建后需要进行点云过滤来去除这些离群点,降低离群点对目标重建的影响,使后续的重建工作更加精确。Poisson重构[4~5]可以对散乱的点云构建出封闭曲面,生成目标物体的三维网格模型,但是随之也会产生很多冗余数据,所以如果想提取独立目标物体的三维模型就要对Poisson 重构的冗余数据进行再次过滤,裁剪出目标物体。通过这种方式构建的目标物体三维模型就能脱离周围环境的影响,能够应用于更多的场景。关于三维模型的表面纹理处理,在游戏制作领域通常使用3D Studio Max、Autodesk Maya等三维动画渲染和制作软件进行人工贴附纹理,这种手工恢复纹理会造成不必要的人力财力消耗。相反,自动纹理映射就大大降低了生产的周期。

本文研究了一种基于单目相机序列图像的双层过滤三维重建的方法,比较传统三维重建方法本文方法具有以下优点:一个成像的相机就可以完成目标物体的重建,无需传统立体视觉成像所需多个成像设备(如三维扫描仪)的要求。手机或者无人机拍摄的图像都能较好地进行目标物体或者场景的重构;本文提出自动纹理映射方法来降低了不必要的人工消耗,同时采用双层过滤机制,能有效滤出偏离目标物体较远的离群点云,保证了目标物体重构的效果和后续应用。

2 相机标定

根据Hartley R,Zisserman A[6]推导的摄像机模型中,基本针孔模型抽象成为内参矩阵K。我们采用张正友提出的标定算法计算相机的内部参数[7]。根据算法的解释,只需要至少4 个空间点坐标与其对应的图像点像素坐标信息就能求得包含相机内部参数的单应性矩阵,具体求出包含在单应性矩阵的5个内部参数信息就需要至少三幅图像。

为了保证实验结果正确性,本文对标定板以不同的角度和位置拍摄15 幅以上的图片进行标定。实验数据手机部分为华为荣耀7i 所拍摄,像素大小:2080×1560,无人机部分为大疆精灵4 所拍摄,像素大小:2000×1500。上面的图像数据均为原本拍摄标定板图像经过长宽各修改原图像尺寸的一半后得到,而且重构图像也进行同样操作,不影响实验结果。

标定后的图像就有较为精确的相机内部参数,与经典的structure-from-motion(SfM)系统bundler[8]比较省去了需要手动添加相机的焦距参数这一步骤,在三维重建实践中如果难以找到自己所用相机焦距等内部参数信息就可以通过相机标定来得到这些信息。标定结果如表1所示。

x0为相机X方向上光心坐标(Pixel),y0为相机Y方向上光心坐标(Pixel),fx为相机X 方向焦距(Pixel),fy为相机Y方向焦距(Pixel)。

3 稀疏点云重建

基于序列图像的稀疏点云三维重构大致分为4 个步骤:1)序列图像集的特征提取与匹配;2)由相机内部参数和对极几何进行双目三维重建;3)由双目三维重建结果扩展到多目三维重建;4)集束优化。具体流程如图1所示。

图1 稀疏点云重建流程图

本文采用SIFI 特征进行特征提取,SIFI 由David Lowe 在1999 年所发表,2004 年完善总结。SIFT特征对旋转、尺度、亮度具有不变性,对视角变化、仿射变换、噪声也可以保持一定程度的稳定性[9]。提取特征点后采用ratio test[10]方法进行特征匹配,找到最佳匹配。

两幅视图的三维重建是利用Nistér David 提出的五点法[11]来估计本质矩阵E。对于计算本质矩阵,五点算法会得到比七点法或八点算法更好的计算结果。五点法适用于一般结构,即使场景平坦,也可以继续正常运行。对于侧向运动尤其具有优势,通过单应性分解可以获得更好的运动假设。当超过五点可用时,差异甚至更大,因为单应性方法的准确性更好。当我们得知两幅视图中的多于五对对应点的时候,我们就可以估计出两幅视图对应的本质矩阵。对本质矩阵使用SVD 分解可以得到旋转矩阵和位移向量,这就完成了双目的相互位置标定。再用线性三角化算法[5]对特征点对进行三维重建,恢复出特征点对的三维信息。

通过双目三维重构我们已经知道如何从两幅视图中恢复运动和场景的几何结构,但是由于度量尺度不统一(up-to-scale)的原因。不能采用同样的过程去处理多视图三维重建。采用透视N 点法(Perspective N Point,PNP)去处理从多视图重构三维场景的问题。关于PNP 问题,有很多关于P3P、P4P、P5P 的研究[12~13],为了提高鲁棒性,一般采用多于4 个特征点来解决实际问题。通过叙述可以知道多目视图的重构三维场景步骤:1)使用双目三维重建,对序列图像中最开始的两幅视图进行三维重构,这样就得到了一些空间点的三维信息。2)加入第三幅视图,使其与前两幅图像进行匹配,在这些匹配结果中找到与图像一与图像二之间的匹配点(最少4 个)。3)求解PNP 问题。即通过前两幅图像求得的三维点坐标和这些点在第三幅图像中的像素坐标求得第三幅图像的位姿。依次类推到更多视图。

随着重构图像增多,相机的位置和姿态信息以及重建的三维点云信息其积累误差会越来越大,影响到最终的重建精度。引入非线性优化算法即光束平差法(bundle adjustment)解决这个问题。它利用最小二乘法减小观测图像点坐标与预测的图像点坐标之间的误差。即用下式表述其原型:

x 是待优化的参数,f 是代价函数,ρ 是损失函数。因为f 函数的返回值是一个向量,因此返回值向量的2 范式作为总体的代价。针对三维重建中的优化调整,代价函数就是反向投影误差,待优化的有相机内参矩阵,外参矩阵,以及三维点云数据。设图像i的内参矩阵为Ki,外参矩阵分别为Ri和Ti,点云某一点坐标为Pj,该点在图像上的像素坐标为pij,则反向投影误差为下式:

Pj和pij都是齐次坐标,其中p是投影函数,有

采用损失函数ρ 的目的是为了降低离群点对算法的影响,增强优化算法的鲁棒性。 一般损失函数可以采用Tukey 和Huber 函数,为了使误差较大的点对总体代价有一个较为良好的影响,实验中使用的是Huber函数。

4 稠密点云重建与点云过滤

本文采用CMVS 结合PMVS2 进行稠密点云重建[14],先用CMVS 算法聚簇用来加速处理稠密点云重建的速度,再用PMVS 算法得到场景的稠密点云。PMVS 算法大致流程就是特征匹配,扩展和过滤,其中扩展和过滤操作循环三次。

在获取点云数据的时候,由于拍摄环境因素、操作设备精度问题等带来的影响,会不可避免的产生一些测量随机误差所带来的噪声点。同时由于视线遮挡、障碍物遮挡等一些外界因素的影响,得到的点云数据中也可能会出现一些离主体点云较远的离散点。点云滤波处理是点云预处理流程中的第一步,对点云的后续处理操作影响很大。只有在点云滤波处理中定制一套有效的噪声点、离群点过滤方法,才能更好地进行后续曲面重建和可视化。

本文使用统计分析技术从得到的点云数据集中过滤掉离群点。该算法遍历整个输入点云两次:在第一次迭代期间,它将计算每个点对其最近的m个邻近点的平均距离。接下来,计算所有这些距离的平均值mean 和标准差stddev,以确定距离阈值η。

stddev_mult为标准差倍数,用来控制距离阈值的大小。在下一次迭代中,如果它们的平均邻近点距离高于该阈值,则点将被分类异常值即离群点[15]。本文将对每个点分析的邻近点的个数m 设置为200,即表示如果一个点计算得到的200 个邻近点平均距离超过平均距离stddev_mult 个标准差以上则认为是离群点并移除。

5 Poisson重构与裁剪

PMVS 生成的点云经过过滤后可以得到待重构物体的主体三维点云信息,接下来通过三角化得到物体的三维表面。直接对散乱点云进行三角化会使重构出来的物体模型显得僵硬并且看起来很尖锐,所以对散乱点云直接进行三角化只适合于点云密度较为均匀并且总体点云所构成曲面连续光滑的情况。

相对而言,泊松重建就是一种针对散乱点云进行快速有效的曲面重建方法。泊松表面重建是一种全局曲面重建方法,考虑到全部数据进行表面重建而不借助与启发式的点云分割和合并。泊松表面重建算法融合了全局重建和局部重建方法的优点,采用隐性拟合的方式得到具有良好细节特性的平滑的重建表面,对噪声有一定的鲁棒性。泊松表面重建的缺点也很明显,因为不引入与模型形态相关的信息,所以容易错误地把本不该进行连接的点云空洞区域连接,对某些非封闭物体的点云自动构建出封闭的模型表面[3~4]。

由于Poisson 重构会自动重建出封闭的曲面,产生很多冗余数据,因而如果待重构的物体不是封闭的物体就会使得Poisson 重构出来的模型难以直接运用到实际应用中。如果想要删除掉多余的曲面信息,则需要对Poisson 重构生成的结果进行裁剪。可以采用第4 节中类似的方法,对多余的曲面点进行过滤删除后,再对被删除的离群点相关的三角面信息进行删除,就可以得到较为理想的三维模型的可见外壳。

至此双层过滤机制如图2所示。

图2 双层过滤流程图

在点云过滤阶段设置较好的邻近点个数m 和标准差倍数stddev_mult 能保证稠密点云在进行Poisson 重构的时候不产生除目标物体以外的不规则球体。三角面片过滤阶段设置较好的邻近点个数m 和标准差倍数stddev_mult 能保证稠密点云在进行Poisson 重构时能保证主体模型没有空洞的情况下较好地去掉泊松重构产生的冗余面片。

6 自动纹理映射

对Poisson 重构出来的三角网格模型进行纹理映射是为了获取表面带有颜色纹理的具有真实感的三维模型。本文采用对选取纹理视图择优处理,首先对模型的三角形网格进行视角和可见性分析,为模型的表面三角形网格选取一个较为合适的纹理,然后通过映射关系批量映射到模型表层。

对于多视图的三维场景重建,一个三维模型的表面三角形有多张视图可以提取纹理信息,需要解决的问题就是如何从这多张视图中得到合适的纹理。通常而言,在观测视角和源视图的拍摄视角越接近的情况下获得的模型纹理越好。但存在的问题是为模型在不同观测角度存储不同的纹理信息会造成渲染慢和数据量大等问题,而观测效果仅稍微优于为模型选取最佳纹理贴附[16]。因此本文采用为模型每个三角面选择一个最佳纹理,通过映射关系贴附到模型表面的方法。

由于三角面在多个视图中可见,考虑到拍摄时光照的影响会造成同一位置的纹理颜色并不相同的因素,以及在三维重过程中不可避免产生的误差,所以尽量选择一幅主要的视图对模型进行主要的纹理贴图(如果没有人工选择主要视图进行映射就会默认第一幅输入图像为主要视图),剩余的视图则按照与主视图的距离依次进行丰富,这样生成的彩色模型才会有较为准确的着色。

图3 视角分析

设模型三角面的法向量为N,各个图像的拍摄朝向为方向向量vi,N 和vi的夹角为θi,可以知道θi的值越接近180h表示映射所产生的形变越小。所以只有当120°<θi<180°才认为第i 幅视图有资格给该位置赋予纹理,至于具体用那一幅图像给该处赋予纹理则依据哪一幅图像作为主要纹理贴图和序列图像的拍摄移动方向确定。

在重构出的三维场景模型中,模型的表面三角网格在各个视图中分为可见和不可见,而可见又分为完全可见和部分可见。对三维网格中的三角面进行相机视图的可见性分析。在每幅视图中只对可见的三角面和部分可见的三角面提供候选纹理。选定了具体的图像为三角面位置进行纹理映射后,由针孔相机模型可知,第i幅图像的内参矩阵K 和外参矩阵[Ri|Ti]与三维点云坐标和对应图像点坐标pi有如下关系:

我们根据上式分析三维模型的三维点X 所对应图像的纹理坐标的像素坐标。只有当pi位于图像范围内就表示该点在第i 幅图像上可见,则可以根据pi所在点的像素值给该三维点赋予纹理信息。

7 实验结果

本文采用的实验环境:Inter(R)Core(TM)i5-4590 CPU 3.30GHz,4GB 内存,Windows 10 操作系统,C++编程语言。

通过多个位置和角度对真实物体或者场景进行拍摄的一组序列图片修改为原尺寸的一半后作为原始输入数据。华为荣耀7i 手机所拍摄的为纪念石,大疆精灵4无人机所拍摄的是一个真实场景。

图4 输入图片(第一组)

图5 稀疏点云重建(第一组)

图6 第一次过滤前后比较(第一组)

图7 三角面过滤前后比较(第一组)

图8 自动纹理映射结果(第一组)

图9 纹理映射结果细节(第一组)

图10 输入图片(第二组)

图11 稀疏点云重建(第二组)

图12 第一次过滤前后比较(第二组)

图13 三角面过滤前后比较

图4 ~图9为华为荣耀7i手机所拍摄的纪念石,记为第一组数据。图4 表示第一组数据为手机拍摄纪念石的43 张图片。图5 表示第一组数据进行稀疏点云重构后的结果,图6 表示稠密点云重构后的结果和第一次过滤(即点云过滤)的结果,图7 为第二次过滤(即三角面片过滤)的结果,图8、图9所示为自动纹理映射生成的结果。图10~图15 为大疆精灵4 无人机所拍摄的场景,记为第二组数据。图10 表示无人机拍摄的15 张图片,图11 表示第二组数据进行稀疏点云重构后的结果,图12 为第一次过滤(即点云过滤)的结果,图13 为第二次过滤(即三角面片过滤)的结果,图14、图15为自动纹理生成的结果。可以看到PMVS 生成的结果在作为输入数据的图像是有较复杂环境下的图片时,会生成较多不属于主观目标物体的点云数据,如图6(a)和图12(a)所示,在进行过滤后如图6(b)和图12(b)所示。第一组设置的作为阈值的标准差倍数为4,第二组设置作为阈值的标准差倍数为12,这样选取的原则是视稠密点云输出的结果离群点的数量和结构来决定的。具体优化数据如表2所示。

图14 自动纹理映射结果

图15 纹理映射结果细节

表2 点云过滤前后结果

使用Poisson 表面重建来对点云重构出模型,执行泊松重构的时候命令行参数设置degree值为4和设置depth 值为11,所以会多出很多数据丰富模型,也会存在一些冗余的数据。

表3 三角面过滤前后结果

通过图7(a)和图13(a)可以看到泊松重构出来的模型有较多的冗余数据。在进行三角面过滤后如图7(b)和图13(b)所示,第一组设置的作为阈值的标准差倍数为2,第二组设置作为阈值的标准差倍数为3.5。这样选取的原则是视Poisson 重构生成的结果的结构来决定的。具体优化数据如表3所示。

根据表2 和表3 可知,第一组数据点云过滤的滤除率约为5.4%,第二组点云滤除率约为0.07%;第一组三角面过滤的滤除率约为1.9%,第二组三角面过滤的滤除率约为0.3%。实验结果表明,二次过滤后的结果能有效过滤掉三维重构过程中稠密点云结果中的离群点和过滤掉Poisson 重构结果中的多余面片。由图9 和图15 可以看出自动纹理映射也可以较为准确的体现完整真实物体的表面。实验结果与其他三维重建方法[17~19]比较而言,模型结果明显少了空洞和不规则球体以及边缘的冗余面片。观测效果更好。

8 结语

本文实现了一种使用常见可移动单目相机所拍摄的序列图像的三维场景重建的方法,实验中使用的设备是手机相机或者无人机携带的相机,可以让没有专业硬件设备的人群也可以进行目标三维重构。实验结果证明:本文的三维重建方法很好的重构出较为逼真的三维场景,并且能较好体现场景或者物体的表面。

猜你喜欢
离群三维重建视图
基于Mimics的CT三维重建应用分析
软件(2020年3期)2020-04-20 00:56:34
5.3 视图与投影
视图
Y—20重型运输机多视图
现代兵器(2017年4期)2017-06-02 15:59:24
SA2型76毫米车载高炮多视图
现代兵器(2017年4期)2017-06-02 15:58:14
基于关系图的无人机影像三维重建
三维重建结合3D打印技术在腔镜甲状腺手术中的临床应用
离群数据挖掘在发现房产销售潜在客户中的应用
多排螺旋CT三维重建在颌面部美容中的应用
离群的小鸡