匡文彬 ,梁文章 ,陈姝 ,林敏
(1.湘潭大学信息工程学院,湖南湘潭 411105;2.广西卡斯特动漫有限公司,广西南宁 530007)
通过图像重构出逼真的三维场景来丰富数字城市和虚拟现实等领域的应用是计算机视觉等领域一直关注的热点问题,通过图像进行三维重构有通过图像采集器(如激光扫描、Kinect等)采集深度图像进行三维重构[1]和通过图像序列进行多视图几何运算来实现三维重建[2]。通过普通摄像设备拍摄的图像序列进行三维重建是比较便捷经济的一种三维重建方法,但是缺点也是很明显的,容易受外界的影响,重构条件比通过深度图像采集器重构要苛刻一些。但是由于普通摄像设备现阶段使用人口占比重大,所以通过普通摄像设备进行三维重建有更广泛的使用场景。使得真实场景三维建模过程更加自动化,降低建模相关人员工作量,减少了真实场景建模成本。
通过图像序列对静止的物体进行三维重建的方法有很多,常被用来进行文物保护和地形构造和逆向工程等,但是对动态物体进行三维重建的研究却很少。诸如现实生活中行驶的车辆,行人的脸部,航行的巨轮,飞行的飞机等,对这些运动的物体进行三维模型重构使得可视化更强或是扩展用途也是尤为重要,而获取这些图像信息除了家中的相机和人们手中的手机之外,就是道路上随处可见的监控摄像了。监控摄像作为一种能收集到大量的视频图像信息的的设备,却少有方法能对这些采集到的海量的数据进行三维化处理,使收集到的信息可视化效果更强,扩展图像信息运用范围。然而与可移动摄像设备不同的是,监控摄像属于固定式摄像设备,不能主动去拍摄想主观上想得到的图像信息,只能被动式接受图像信息,这也造成了固定式摄像设备三维化图像信息的某些局限性。但是,监控摄像作为一种长期固定的采集图像信息的设备,更加容易在某些重要的场合中采集到人们主观想得到的图像信息,不容易漏掉某些图像信息。而普通的相机或者手机等信息采集设备就没有这种优势。
研究了一种基于固定式相机对动态目标的三维重建,使用了动态目标提取和目标跟踪算法[3]提取目标图像区域,并采用GMS特征匹配算法[4]进行图像特征匹配,将传统的三维重建拓展应用到更多的摄像情形,无需如Kinect等专业立体视觉成像设备,使用固定式的摄像设备就能对动态目标物体进行三维重构.对固定式图像采集设备采集到的图像信息增强可视化的同时,也为动态目标重建提供一种新的解决方法。
目前大多数的三维重构所使用的从运动恢复三维结构(SFM,Structure From Motion)算法[5],所使用的场景都针对的移动相机。通过移动相机位置姿态来对静止物体进行多方位拍摄进行三维场景重构,通过可移动相机所拍摄图像进行场景三维重建已经应用到多个方面,比如无人机,机器人等[6-7]。然而却没有针对固定相机进行三维重构,然而固定相机的遍布也是极其广泛,比如各种监控系统。从固定相机中恢复物体的三维结构也是从物理学中针对物体的运动的相对性引出(即固定摄像机位置拍摄移动物体恢复运动中物体的三维结构)。如下图。
假设实际上的运动为如图1(a)中小方块从位置a移动到位置b,而摄像机位置c是固定的,而根据运动的相对性可认为的运动关系为如图1(b)中的运动方式,即可认为是摄像机从位置c移动到位置d。
图1 固定相机分析
设位置a、b、c、d位置的摄像机坐标系分别为Xa,Xb,Xc,Xd,并且假定 a 位置为世界坐标系,根据计算机视觉中的多视图几何[8]可知,在图1(a)中,
式(1)表明b、c位置与a位置(指定的世界坐标系)之间的位置姿态关系,联立解得
式(3)表明了b、c之间的位置姿态关系。又根据图1(a)中a与c的位置姿态关系式子可得
式(3)(4)联立可得d将这种关系联系到图1(b)中
即式(5)表明了位置d与位置c之间的位置姿态关系。即原本是由图1(a)中物体从a运动到b位置c位置固定,转换成了如图1(b)中摄像机从位置d移动到c而物体固定在b位置。通过上面的推导可以得知,原本摄像机固定,而物体在运动的情况,可以转换成摄像机运动而物体固定的情况。从固定相机所拍得的多幅视图依据极线约束求得虚拟的相机移动位置姿态,从而接下来的三维重构工作。
从上节知道了可以从固定相机得到的视图进行三维重构,但是现实生活中大多数情况下的固定式摄像设备所得到的序列图像是不能得到虚拟的相机移动姿态,其原因在于在所得到的序列图像中,运动的物体常常不会只有一个,这些运动物体的运动性质常常是不一样的。如果在多个物体运动的情形,那么每一个运动物体需对应一个虚拟的相机运动轨迹。为了解决这个问题,引入动态目标提取和目标跟踪技术,分割出动态的物体和背景,即不管背景如何改变,只关注动态目标物体的信息,对感兴趣的动态目标物体进行三维重构,如此以来分割出的图像只会对应一条虚拟的相机移动轨迹,没有其他的背景因素干扰,因此,固定相机对动态目标进行三维重建的整体流程图如图2所示。
背景减除是提取前景对象预处理最常用的方法之一。当有完整静止的背景图像对象时候,可以用帧差法来计算两帧之间每个像素之间的差值从而得到大致的目标前景。通常而言,可能获取不到这样理想的背景图像,所以就只能利用已有的图像信息中计算得到背景图像信息。目前常用的有MOG 算法[9],MOG2 算法[10],GMG 算法[11]。本文使用的是MOG2方法,该方法对每个像素选取合适数目的高斯分布,具有对光照变化有更好的抗干扰能力。得到了背景图像就可以计算当前图像帧与背景图像之间每个像素的差值,定义在i时刻获取的图像与背景图像之间的差值图像为
其中h0表示为背景图像,hi表示为i时刻获取的图像,x,y表示像素位置,di表示差值图像,ω为阈值,一般取10~30。
差值图像中包含了i时刻图像相对于背景图像中运动物体的位置信息,但是因为光照等因素也会让图像中包含许多椒盐噪声,需要对图像再进行中值滤波处理来降低椒盐噪声的影响,然后再对图像进行开运算和闭运算,开运算是先进行腐蚀在膨胀操作,可以平滑物体的轮廓并且消除小的亮点。闭运算是先进行膨胀然后再腐蚀操作,可以用来消除小的暗点,开运算和闭运算都是用的是5*5的结构元素。经过上述处理后的图像就有了运动物体的大致轮廓如图3(c),可以看到对于目标物体还有较大的空洞,这时选择使用多边形拟合连通域处理,拟合出动态目标的区域,如图3(d)所示,根据掩码图像可以得到最终的动态目标的完整区域。
因为通常固定式摄像设备拍摄到的动态物体可能不止一个,而需要从多个动态目标中分割出目标,可以SAMF目标跟踪算法[3]来,该算法基于KCF[12],却是具备有多尺度自适应的特点,算法是在多尺度缩放的图像块中通过平移滤波器对目标进行检测,选择响应最大的平移位置与尺度。提取出图像中的动态目标物体之后,可以得到最终的动态目标物体如图3(f)。
图3 动态目标提取与目标跟踪
图3(a)为实验室中使用固定设备固定手机对两个动态物体进行拍摄,模拟固定式相机在多动态目标下的情形。而两个动态物体的运动轨迹是不同的,因此两个运动物体所对应的虚拟相机运动轨迹也是不一样的,所以采用目标跟踪技术跟踪我们想要得到的单个运动目标。在跟踪的同时,消除背景对重构的影响,对于静止的背景而言,相机的姿态是不变的,如果想要从序列图像中重构动态物体,就需要消除背景对计算虚拟相机轨迹的影响。
如图3(f)所示,经过背景分割和目标跟踪后的图像仅仅只含有目标物体的图像信息,经过处理后的图像既保证了原有摄像机内部参数不变的情况下,又有效消除了背景和其他动态物体对估计虚拟相机移动轨迹的影响。
特征点的提取与匹配作为三维重构当中的第一步,大量的正确的特征点对计算结果的影响尤为重要。经过图像分割之后的目标图像只能通过物体自己本身的特征点来进行特征点的提取与匹配,在这种情形下,普遍所用的根据SIFT特征点来进行特征点的提取与匹配往往已经满足不了目标图像分割后图像。
根据WYD Lin等人的文章所说[13],缺乏特征匹配数量并不是因为正确匹配对的数量少,而是在于很难分辨这些特征匹配对正确与否,就如通过背景分割和目标跟踪后的图像,即使缺乏了部分的图像信息,但是特征匹配对的数量还是不会特别少。目前的多数特征匹配算法,高精准度的匹配花的时间多,而匹配快的算法往往不稳定。本文采用基于网格运动统计(GMS)[4]的方法进行特征点的匹配,GMS是一种高效的基于网格的分数估计方法并且能实时特征匹配,它把一般的运动平滑约束问题转为统计测量匹配对来去除错误匹配对。并且比传统的SIFT[14],SURF[15]和 Harris[16]有更好的特征匹配效果。GMS匹配方法可以将高数量匹配转变成为高质量匹配。
正确的匹配对邻域,对应相同的3D区域,从而在两幅图像之间共享许多相似的特征。这导致邻域里有许多匹配对去支持这个正确匹配对成立。从而可以得到一个点运动统计值(即邻域中支持这个点匹配的个数)在正确和错误匹配情况下的的概率分布,分析这两者之间的分布差异,从而提高分辨正确匹配和错误匹配的能力。
定义图像对{Ia,Ib}各自有{N,M}个特征点,χ={w1,w2,wi,…,wN}是从图像 Ia到图像 Ib中所有点最近的特征匹配,又定义{a,b}为图像{Ia,Ib}所分割出来的子区域,并且在两个子区域中各自拥有{n,m}个特征点。vi为第i个特征匹配,fa为在图像Ia部分区域a中的一个特征,Tab为区域{a,b}表示的是同一位置,Fab为{a,b}表示的是不同位置。表示fa的匹配的是一个正确的匹配表示 fa的匹配是错误的匹配为最近的一个特征是在b区域中。
β的引入是为了弥补假设所造成的影响,因为可能在有些情况下错误的匹配并不是一个随机分布,当β为1的时候,即表示正好满足错误的匹配是服从一个随机分布的。pt表示的是已知ab区域表示的是同一位置的时,区域a中的一个点匹配从a到b的可能性,也就是当点的匹配是对的话,那么旁边的点支持它的概率大小。
pf表示ab区域表示的是不同位置的时,区域a中的一个点匹配从a到b的可能性,也就是当匹配是错误匹配的情形下,那么旁边的点支持它的概率大小。可知pt是接近t的数字,而pf是接近0的。这两者之间的差距是较大的,为了将这种差距拉的更大,我们将{a,b}周围的区域也考虑进去,即如图4,把{a,b}邻域考虑进来则有一个包含{a,b}的一个网格。
图4 {a,b}的领域参与运动评分评估
Si表示匹配对wi根据邻域所计算得到评分也是运动统计值,即为在区域{a,b}及其邻域对{ak,bk}中的匹配对个数。
至于为什么将a与b邻域考虑进去会将这种差距拉的更大,因为考虑到
根据Si的分布,引入P来表示对正确匹配和错误匹配进行区分的一个区分能力评分
P为Si两个分布的均值的差比上两个分布的标准差的和,P的值越大,表示对的匹配和和错的匹配之间的差异越大,区分正确匹配和错误匹配的能力越好。区分正确匹配和错误匹配的问题就转化成为设计一个算法来最大化P。已知,即我们考虑到a中的点越多,那么我们对的匹配与错误匹配的差异也就越大,所以我们将a区域扩展为包含a的邻域的3*3网格的区域。参见图4,此时的Sij为
τi是基于第i个特征是错误匹配的运动统计值的分布而来的经验值,试验中α=6。
GMS的算法流程如下
(1)对每幅图像进行特征点的提取得到描述算子,对Ib中的每一个特征点在Ia中找到最近的作为匹配对,之后在将两幅图像各自划分G(20*20)个网格
(2)以Ia中的某个格子i作为待匹配项,对Ib中的G个的格子循环查找,通过计算χij找到Ib中最为相似的格子区域j。
(3)计算 Sij和 τi,如果 Sij大于阈值 τi,则将 χij中匹配对归为可靠的匹配点集合中;
(4)循环(2)(3)步骤,直到Ia中的全部格子找完。
GMS的方法核心思想就是:将图像分割成若干个网格区域,运动的平滑性使得匹配的特征点周边区域有较多的匹配点,通过统计领域中匹配点数量来判断一个匹配项是否正确。
可以得知GMS方法能比SIFT+RATIO TEST有更好的结果,从匹配结果数量和匹配结果的正确程度上看,GMS远远优于SIFT+RATIO TEST,更多的结果比对参考边佳旺的结果[4]。由于对于三维重建中,特征点的匹配精准度要求比较高,因此还需要对GMS匹配得到的结果再进行随机采样一致性操作(Random Sample Consensus,RANSAC)[17]。所以我采用的是ORB+BF+GMS+RANSAC的模式,而采用RANSAC的目的是进一步消除错误的匹配对,从图5(b)和图5(c)的结果看来,加入 RANSAC 的匹配有更好的鲁棒性,而GMS选取的较好匹配对也是便于RANSAC能够得到更好的结果。
图5 各种特征点匹配对的方法比较
由对极几何[8]可以知道,当求出两幅视图间的基本矩阵F[8]或者本质矩阵E[8]时,就得到相应两幅视图间的位置姿态关系,可以利用已经得到的特征匹配对和五点算法[18]来求解两幅视图间的本质矩阵E。五点算法对平面或者近平面的场景比传统的七点法或者八点法有着更可靠的计算结果。然后对剔除伪解后的本质矩阵进行奇异值分解计算可以得到旋转矩阵和位移向量,至此也就估计出两个相机间的旋转和位置变换关系。采用线性三角化算法计算特征匹配对的空间坐标,至此也就恢复出两幅视图间的特征点对的三维信息。
由于度量尺度不统一(up-to-scale)的原因,并不能使用双目三维重建同样的方法去处理多视图三维重建。引入透视N点法(Perspective N Point,PNP)将双目三维重建拓展到多视图重建三维场景。有很多关于透视N点法的研究,如P3P、P4P、P5P[19-20]等。但为了提高重构算法的鲁棒性,一般使用多于4个特征点的算法来解决实际应用中的问题。PNP算法大致通过求得前两幅图像中的特征点的三维坐标以及这些空间点在第三幅图像中的像素坐标位置来计算估计第三幅视图拍摄时的位置姿态。并类推到更多视图的三维重建。
伴随着重构视图的增加,通过计算得到的表示相机位姿信息的旋转矩阵、位移向量和三维点云信息累积的误差会越来越大,会导致重建结果与实际偏差较大,故引入非线性优化算法光束平差法来优化相机的内外参数以及特征点的三维坐标数据。算法使用最小二乘法减小图像中观测点像素坐标与预测的像素坐标之间的误差,原型表示为式(14)
x是待优化的相机内外参数,c是代价函数,L是损失函数。对于重构过程中的优化调整,代价函数为点云中三维点通过相机内外参数计算投影到图像的像素坐标与该三维点所对应实际像素坐标之间的差值,由于c的返回值为一个表示误差的向量(图像齐次坐标差值),故取该向量的2范式作为总体的代价。而最小化这个误差则可视作是一个优化相机内外参数和点云数据的过程。设Ki,[Ri|Ti]分别表示图像i的内参矩阵和外参矩阵[8],点云中某点三维坐标为Pj,并与之在图像上对应像素坐标,投影误差则表示为式(15)
Pj和都是齐次坐标表示的三维点和二维点,其中π是投影函数,表示三维点投影到图像上的位置,并且返回值也是二维点的齐次坐标形式,有
引入损失函数L是为了降低离群点对优化算法的影响,如果不使用损失函数则L(x)=x,此时总体代价会随误差以二次幂的速度增长。为了让这些误差较大的点对总体代价有一个较好的引导作用,使用Huber函数作为损失函数来重映射加强优化算法的鲁棒性。
经过上面的流程,可以得到有关相机虚拟运动轨迹(即每个相机的位置姿态),并且得到相对稀疏的点云,接下来需要对稀疏的点云进行稠密化,使用Yasutaka Furukawa等人提出的CMVS算法结合PMVS2算法[21]对目标物体进行稠密点云的重构,首先使用CMVS算法将输入图像分解为更容易处理的图像簇,使之能更好并行处理来减少稠密点云重建的时间,然后使用PMVS2多视角立体视觉算法得到目标的准确并密集的点云。PMVS2是一种基于面片的多视角立体视觉算法,算法大体上流程为特征点匹配,点云的扩展和点云的过滤,循环点云扩展和过滤过程三次得到最终的稠密化的点云。
PMVS2算法生成的点云仅仅包含了重构物体的部分特征点的三维信息,若想增强重构的可视化效果就需要对点云进行三角网格化来得到物体的三维表面并生成其可观测的模型。直接对散乱无序点云进行三角网格化生成的模型观测效果显得物体毛糙且尖锐,只适用于点云空间密度均匀且点云数据连续光滑的情形。针对散乱无序点云而言,Poisson表面重建[22-23]是一种快捷高效的将点云数据转换成曲面的隐式曲面重建方法。该方法重构出的模型表面平滑连续且对噪声具有一定的鲁棒性,能较好的拟合出物体的表面轮廓,更符合人的直觉观测效果。
想要获得带有颜色信息的目标模型就需要对Poisson重构出的网格模型进行纹理映射,这样可以得到更具真实感的三维模型。使用纹理择优算法并批量对三角网格模型进行纹理映射。可知模型的三角网格中的某些三角面在多个视图中可见,并且由于光照等其他因素可能会造成目标物体同一位置在不同的视图中纹理颜色有所差异。因此防止在某些局部网格会因为不同的三角面在不同的视图选取了部分纹理而造成纹理不连续或者与实际物体颜色差距较大导致的观测效果不佳的影响,纹理择优算法首先考虑到以一幅视图作为模型主要的纹理贴图(可人工认定,如无人工认定则默认输入图像第一帧),剩下的视图依次按与主图的距离依次对模型进行再丰富。这样生成的带纹理的三维模型才会有较为良好的观测效果。
图6 视角分析
设三角网格中某三角面的可见面法向量为N(朝外的方向),各视图拍摄方向向量为vi,并设N和vi之间的夹角为θi,可知N与vi之间的夹角越接近180度表示映射形变越小,为了确保模型观测效果,仅当满足120°<θi<180°时才认定第i幅视图能作为该位置的候选纹理视图,至于该位置具体选用哪幅视图来赋予纹理信息则还依据选取哪幅视图作为主要纹理贴图的视图和与候选纹理图像与主要纹理贴图图像的距离来决定。
重构出的三维模型表面在各个图像中分为可见区域和不可见区域,因此还需要对模型网格的三角面在每个视图中进行可见性的分析,让候选纹理视图只对可见的三角面进行纹理映射。引入相机针孔模型,设第i幅候选纹理视图的内参矩阵和外参矩阵分别为Ki和[Ri|Ti],图像坐标pi(齐次坐标)所对应的点云三维坐标为X(非其次坐标),si为比例因子,则有投影公式如式(17)
根据式(17)可以计算得到点云中的某三维点X所对应于候选纹理视图中的像素坐标。仅当计算得到的像素坐标pi位于候选视图的图像范围内可见,则将pi所在像素坐标的颜色信息赋予三维点X作为纹理信息。
采用的实验环境:Inter(R)Core(TM)i5-4590 CPU 3.30GHz,4GB 内存,Windows 10 操作系统,C++编程语言。
图7为固定手机相机拍摄多动态物体的的图像,所使用的是华为荣耀7i,已经经过张正友提出的标定算法[24]标定出相机的内部参数。图7至图9为模拟在固定相机情形下对动态目标进行三维重构的过程。相同的输入图像在VisualSFM[25]下不能成功估计出相机的位置。原因是因为丰富的背景特征点并且这些背景特征点具有很高的正确匹配程度,被认为是拍摄的同一位置,从而不能三角化生成点云。图8(a)的稀疏点云重建表明了本文方法成功计算出了相机的模拟运动轨迹,估计出了每幅视图中对应目标的虚拟相机的位置姿态,说明了在仅靠目标物体本身的图像信息也能通过本文采用的GMS+RANSAC方法对分割后的图像提取特征点对是能够有效的提取足够的特征点对来辅助计算计算机的位置姿态,并对多视图进行特征点对三角化得到点云,有了初步的可视化效果。图8(b)稠密点云重建的可视效果更强,点云的结果也表明了相机姿态估计的正确性。图9是用本文对动态目标提取与跟踪处理后的图像作为VisualSFM输入图像对目标进行三维重构,可以看到图9(a)中的点云较为稀疏,是由于缺少可靠的匹配特征对才会出现这种情况,原因是图片缺少纹理信息导致VisualSFM中默认使用的SIFT特征提取匹配方法缺少足够的匹配对,如果图片的纹理再少一些可能导致VisualSFM对图像匹配结果的错误判断。而如图8(a)中本文的使用的特征点的提取和匹配方法则对纹理信息量少的情形有更好的表现效果。图9(b)是使用VisualSFM的输出作为输入来进行的稠密点云重建,这也证明了固定相机重构原理的正确性,并且使用本文对动态目标提取与跟踪处理能够对动态目标进行三维重构可行性。但是可以看到不同算法估计出的摄像机投影矩阵对重构的影响,可以看到图9(b)较图8(b)有更多的噪声面片。,部分原因是因为相机位置姿态估计的误差所造成的,当计算得到各个相机的投影矩阵时,PMVS所使用的利用极线来进行特征点匹配方法会错误将某些特征点认为是正确的匹配对。图10是对稠密点云进行poisson表面重建并且进行纹理映射后的结果,也有了更强的可视效果,更加的逼真的模型。通过实验结果可以证明通过本文的方法可以实现通过固定相机可以实现对目标动态物体实现较好的三维重构。
图7 输入图片
图8 本文方法点云重建
图9 VSFM对动态目标提取与跟踪处理后的图像进行重构
图10 poisson重构与纹理映射
针对运动物体重构困难的问题,采用基于固定相机所拍摄的图像对动态目标提取与跟踪对运动目标物体进行提取,然后采用GMS+RANSAC特征匹配方法得到的特征匹配对运动目标进行三维重建。本方法不仅对动态目标物体三维重建提供一种新思路,也扩展了如监控系统等固定式摄像设备的用途。实验结果也表明使用动态目标提取与跟踪能有效对动态目标进行三维重构,并且使用GMS+RANSAC方法能有效减小提取运动物体后图像可能造成的特征匹配对数量不足的影响,使最后生成的模型更加精准,纹理更加丰富,观测效果更加逼真。