三维场景构建方法、装置、存储介质与电子设备与流程

文档序号:23728635发布日期:2021-01-26 18:44阅读:46来源:国知局
三维场景构建方法、装置、存储介质与电子设备与流程

[0001]
本公开涉及计算机视觉技术领域,特别涉及一种三维场景构建方法、三维场景构建装置、计算机存储介质与电子设备。


背景技术:

[0002]
三维重建是指对三维物体建立适合计算机表示和处理的数学模型,是在计算机环境下对其进行处理、操作和分析其性质的基础,也是在计算机中建立表达客观世界的虚拟现实的关键技术。
[0003]
相关技术中,在对大型场景进行三维重建之前,一般需要对采图人员进行专业培训,以确保所采集图像的相邻子区域保证同时包含相同的控制点,进而,在后续重建出局部三维模型后,通过控制点进行拼接融合,得到完整的三维模型。然而,该方法需要进行大规模人工干预,成本较高且且效率较低。


技术实现要素:

[0004]
本公开的目的在于提供一种三维场景构建方法、三维场景构建装置、计算机存储介质与电子设备,进而至少在一定程度上避免了相关技术中采图过程复杂耗时、模型精度低的缺陷。
[0005]
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
[0006]
根据本公开的第一方面,提供一种三维场景构建方法,包括:获取采集到的多张场景图像;根据所述场景图像之间的匹配关系,将所述场景图像划分为至少两个图像组;在至少一个图像组中添加与该图像组相邻的场景图像,以对所述至少一个图像组进行扩展;分别对每个图像组中的所述场景图像进行三维重建处理,得到每个图像组对应的局部场景模型;对所述局部场景模型进行合并处理,得到完整的三维场景模型。
[0007]
根据本公开的第二方面,提供一种三维场景构建装置,包括:图像采集模块,用于获取采集到的多张场景图像;图像匹配模块,用于根据所述场景图像之间的匹配关系,将所述场景图像划分为至少两个图像组;扩展模块,用于在至少一个图像组中添加与该图像组相邻的场景图像,以对所述至少一个图像组进行扩展;三维重建模块,用于分别对每个图像组中的所述场景图像进行三维重建处理,得到每个图像组对应的局部场景模型;合并模块,用于对所述局部场景模型进行合并处理,得到完整的三维场景模型。
[0008]
根据本公开的第三方面,提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面的三维场景构建方法及其可能的实现方式。
[0009]
根据本公开的第四方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述第一方面的三维场景构建方法及其可能的实现方式。
[0010]
本公开的技术方案具有以下有益效果:
[0011]
一方面,获取采集到的多张场景图像,根据所述场景图像之间的匹配关系,将所述场景图像划分为至少两个图像组,能够将属于同一个子场景的图像聚合在一起,保证各图像组内的相似度足够高,不同图像组之间的相似度足够低。进一步的,在至少一个图像组中添加与该图像组相邻的场景图像,以对所述至少一个图像组进行扩展,能够解决相关技术中在采图时需要人为控制各个子区域之间包含相同的控制点所导致的采图过程耗时复杂的技术问题,无需额外的硬件,仅利用摄像头即可进行图像采集,降低采图成本,并且还能够使得相邻场景图像中包含一定数量的公共点,避免因公共点数量过少而导致后续重建模型断开或重建失败的情况,保证模型的精度。另一方面,分别对每个图像组中的所述场景图像进行三维重建处理,得到每个图像组对应的局部场景模型,对所述局部场景模型进行合并处理,得到完整的三维场景模型,能够将大型场景拆分为多个部分进行三维重建,避免了在大型数据集下内存和计算资源的负担,缩短重建耗时,提高重建效率。
[0012]
本公开应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
[0013]
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0014]
图1示出本示例性实施方式中一种电子设备的结构示意图;
[0015]
图2示出本示例性实施方式中一种三维场景构建方法的流程图;
[0016]
图3示出本示例性实施方式中一种获取图像组方法的流程图;
[0017]
图4示出本示例性实施方式中一种匹配关系模型的示意图;
[0018]
图5a至图5d示出本示例性实施方式中一种三维场景构建方法的示意图;
[0019]
图6示出本示例性实施方式中一种确定合并顺序方法的流程图;
[0020]
图7示出本示例性实施方式中一种局部场景模型合并方法的流程图;
[0021]
图8示出本示例性实施方式中一种确定尺度变换参数方法的流程图;
[0022]
图9示出本示例性实施方式中一种确定旋转平移参数方法的流程图;
[0023]
图10示出本示例性实施方式中一种三维场景构建方法的整体流程图;
[0024]
图11示出本示例性实施方式中一种三维场景构建装置的结构示意图。
具体实施方式
[0025]
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免本公开的各
graphics,便携式网络图形)、bmp(bitmap,位图)等图像格式,mpeg(moving picture experts group,动态图像专家组)1、mpeg2、h.263、h.264、hevc(high efficiency video coding,高效率视频编码)等视频格式。
[0034]
在一些实施方式中,处理器110可以包括一个或多个接口,通过不同的接口和移动终端100的其他部件形成连接。
[0035]
内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括易失性存储器与非易失性存储器。处理器110通过运行存储在内部存储器121的指令,执行移动终端100的各种功能应用以及数据处理。
[0036]
外部存储器接口122可以用于连接外部存储器,例如micro sd卡,实现扩展移动终端100的存储能力。外部存储器通过外部存储器接口122与处理器110通信,实现数据存储功能,例如存储图像,视频等文件。
[0037]
usb接口130是符合usb标准规范的接口,可以用于连接充电器为移动终端100充电,也可以连接耳机或其他电子设备。
[0038]
充电管理模块140用于从充电器接收充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为设备供电;电源管理模块141还可以监测电池的状态。
[0039]
移动终端100的无线通信功能可以通过天线1、天线2、移动通信模块150、无线通信模块160、调制解调处理器以及基带处理器等实现。天线1和天线2用于发射和接收电磁波信号。移动通信模块150可以提供应用在移动终端100上的包括2g/3g/4g/5g等无线通信的解决方案。无线通信模块160可以提供应用在移动终端100上的包括wlan(wireless local area networks,无线局域网)(如wi-fi(wireless fidelity,无线保真)网络)、bt(bluetooth,蓝牙)、gnss(global navigation satellite system,全球导航卫星系统)、fm(frequency modulation,调频)、nfc(near field communication,近距离无线通信技术)、ir(infrared,红外技术)等无线通信解决方案。
[0040]
移动终端100可以通过gpu、显示屏190及ap等实现显示功能,显示用户界面。例如,当用户开启拍摄功能时,移动终端100可以在显示屏190中显示拍摄界面和预览图像等。
[0041]
移动终端100可以通过isp、摄像模组191、编码器、解码器、gpu、显示屏190及ap等实现拍摄功能。例如,用户可以启动视觉定位的相关服务,触发开启拍摄功能,此时可以通过摄像模组191实时采集图像,并进行定位。
[0042]
移动终端100可以通过音频模块170、扬声器171、受话器172、麦克风173、耳机接口174及ap等实现音频功能。
[0043]
传感器模块180可以包括深度传感器1801、压力传感器180/2、陀螺仪传感器1803、气压传感器1804等,以实现相应的感应检测功能。
[0044]
指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。马达193可以产生振动提示,也可以用于触摸振动反馈等。按键194包括开机键,音量键等。
[0045]
移动终端100可以支持一个或多个sim卡接口195,用于连接sim卡,以实现通话与移动通信等功能。
[0046]
图2示出了上述三维场景重建方法的示例性流程,可以包括:
[0047]
步骤s210,获取采集到的多张场景图像;
[0048]
步骤s220,根据所述场景图像之间的匹配关系,将所述场景图像划分为至少两个图像组;
[0049]
步骤s230,在至少一个图像组中添加与该图像组相邻的场景图像,以对所述至少一个图像组进行扩展;
[0050]
步骤s240,分别对每个图像组中的所述场景图像进行三维重建处理,得到每个图像组对应的局部场景模型;
[0051]
步骤s250,对所述局部场景模型进行合并处理,得到完整的三维场景模型。
[0052]
通过上述方法,一方面,获取采集到的多张场景图像,根据所述场景图像之间的匹配关系,将所述场景图像划分为至少两个图像组,能够将属于同一个子场景的图像聚合在一起,保证各图像组内的相似度足够高,不同图像组之间的相似度足够低。进一步的,在至少一个图像组中添加与该图像组相邻的场景图像,以对所述至少一个图像组进行扩展,能够解决相关技术中在采图时需要人为控制各个子区域之间包含相同的控制点所导致的采图过程耗时复杂的技术问题,无需额外的硬件,仅利用摄像头即可进行图像采集,降低采图成本,并且还能够使得相邻场景图像中包含一定数量的公共点,避免因公共点数量过少而导致后续重建模型断开或重建失败的情况,保证模型的精度。另一方面,分别对每个图像组中的所述场景图像进行三维重建处理,得到每个图像组对应的局部场景模型,对所述局部场景模型进行合并处理,得到完整的三维场景模型,能够将大型场景拆分为多个部分进行三维重建,避免了在大型数据集下内存和计算资源的负担,缩短重建耗时,提高重建效率。
[0053]
以下对图2中的步骤进行具体说明。
[0054]
步骤s210中,获取采集到的多张场景图像。
[0055]
本步骤中,可以预先采集多张场景图像,该多张场景图像可以是通过同一摄像头拍摄的、同一场景在不同视角下的多张二维图像,或者,通过不同的摄像头采集的、同一场景下的不同视角的多张二维图像。
[0056]
继续参考图2,步骤s220中,根据场景图像之间的匹配关系,将场景图像划分为至少两个图像组。
[0057]
本步骤中,可以提取每张场景图像的特征点,特征点是图像中具有代表性的、辨识度较高的点或区域,例如图像中的角点、边缘点等梯度变化较大的像素点,例如在深度图像中,可以检测灰度值发生突变的区域,在该区域中提取特征点。本示例性实施方式可以采用fast(features from accelerated segment test,基于加速分割检测的特征)、brief(binary robust independent elementary features,二进制鲁棒独立基本特征)、orb(oriented fast and rotated brief,面向fast和旋转brief)、sift(scale-invariant feature transform,尺度不变特征变换)、surf(speeded up robust features,加速鲁棒特征)、superpoint以及r2d2(recurrent replay distributed dqn)等算法提取特征点。
[0058]
进而,可以将任意两张场景图像的特征点进行匹配,以确定任意两张场景图像的匹配关系。
[0059]
具体的,可以将任意两张场景图像的特征点进行匹配,以得到任意两张场景图像的匹配点对的数量,具体的,可以对特征点进行主方向分配,在特征点周围取沿着主方向的矩形区域块,每个矩形区域块统计25个像素的水平方向和垂直方向的harr小波特征,将水
平方向值之和、垂直方向值之和、水平方向绝对值之和以及垂直方向绝对值之和这四个值作为每个特征点对应的特征描述子,进而,可以计算特征描述子之间的欧式距离,当欧式距离小于距离阈值时,确定两张场景图片上的特征点为匹配点对。当匹配点对数量大于阈值时,可以确定上述任意两张场景图像具备匹配关系,并将匹配点对数量确定为上述任意两张场景图像之间的匹配度。
[0060]
需要说明的是,在进行特征点匹配时,还可以根据任意两张图像的几何约束关系在任意两张场景图像的匹配点对中剔除误匹配点对。例如,可以采用ransac算法(random sample consensus,随机抽样一致,简称:ransac)估计两张图像之间的基础矩阵(如果相机内参数已知,可以估计本质矩阵),剔除不满足基础矩阵约束的错误匹配点对,从而能够保证匹配精度,避免错误匹配点对后续重建过程的影响。
[0061]
在得到场景图像之间的匹配关系之后,参考图3,图3示出根据场景图像之间的匹配关系,将场景图像划分为至少两个图像组的流程图,包含步骤s310-步骤s320,以下结合图3对步骤s220进行解释。
[0062]
在步骤s310中,根据场景图像之间的匹配关系构建匹配关系模型。
[0063]
本步骤中,可以根据上述场景图片之间的匹配关系构建匹配关系模型g(v,e),示例性的,可以参考图4,图4示出上述匹配关系模型g(v,e)的示意图,其中,匹配关系模型中的顶点元素v表示场景图片,匹配关系模型中的边元素表示场景图片之间的匹配关系,任意两张场景图片之间的匹配点对数目为边元素的权值e。
[0064]
在步骤s320中,基于匹配关系模型中边元素的权重,将匹配关系模型分割为多个子模型,得到每个子模型对应的图像组。
[0065]
本步骤中,可以基于上述匹配关系模型中边元素的权重,将匹配关系模型分割为多个子模型,得到每个子模型对应的图像组。具体的,可以基于上述匹配关系模型中边元素的权重,采用归一化图割算法、自适应聚类算法或近邻聚类传播算法(affinity propagation,ap)等将上述匹配关系模型分割为多个子模型,以下实施例中以归一化聚类算法为例进行说明。
[0066]
具体的,匹配关系模型g(v,e)可以通过删去某些边元素,将其分为两个非连接性点集a和b,使得a∪b=v,这两个部分的不相似程度可以定义为原先连接两部分而现在被删去的所有边元素的权的总和,在图论中称之为割(cut),cut(a,b)=∑
u∈a,v∈b
w(u,v),w(u,v)表示连接点u和点v的边元素的权值之和,它表示两点之间的相似程度,最小割算法就是使得该式的和最小的分割。
[0067]
最小割算法可以保证类内相似度足够高,类间相似度足够低,当图像之间越相似,越可能属于同一个子场景,后续重建过程中越不会因为匹配点数过少,导致重建模型断开或重建失败。
[0068]
然而,最小化分割可能存在切割后形成的子集中顶点元素数目相差过大的问题,为了满足切割后的子区域中顶点元素个数尽可能的相近,以保证内存和计算资源的合理分配和重建时间尽可能的相同,因而,本公开在最小化分割的基础上,基于归一化图割算法进行再次处理,归一化图割算法的具体算法可以参照以下公式(1):
[0069]
[0070][0071]
其中,assoc(a,v)=∑
u∈a,t∈v
w(u,t),assoc(a,v)的含义是a中所有点到图v中所有点之间连接边元素的权值之和(即a中所有的点和v中所有的点的联系程度);assoc(b,v)=∑
v∈b,t∈v
w(v,t),assoc(b,v)的含义是b中所有点到图v中所有点之间连接边元素的权值之和(即b中所有的点和v中所有的点的联系程度);assoc(a,a)表示a中所有边元素的权值之和,assoc(b,b)表示b中所有边元素的权值之和。
[0072]
示例性的,在得到上述公式(1)的基础上,可以定义同一个组内相似性度量函数nassoc:
[0073][0074]
则上述公式(1)可以转化为ncut(a,b)=2-nassoc(a,b),通过该公式可知,当ncut(a,b)越小时,则nassoc(a,b)越大,即归一化图割在追求不同子集间点的权值最小的同时也追求同一子集间点的权值之和最大,以此来达到不同子集之间顶点元素个数相对均衡,以保证后续在进行三维重建时内存和计算资源的合理分配,以及,各个机器的重建时间尽可能的相同。
[0075]
通过上述归一化图割算法,可以在无需人工干预的情况下将上述匹配关系模型分割为多个子模型(即将采集到的场景图像分为多个图像组),示例性的,可以参考图5a,基于图5a中的分割线oa、ob、oc、od可以将图g(v,e)分割为四个子模型(p1、p2、p3、p4),每个子模型对应一个图像组,虚线表示被切割的边元素,被切割的边元素连接的是不同子模型中的顶点元素,以下称跨子模型边元素。需要说明的是,在通过归一化图割算法确定出上述分割线之后,可以先保留上述被切割边元素,以便于后续根据跨子模型边元素的权重对图像组进行扩展。
[0076]
继续参考图2,步骤s230中,在至少一个图像组中添加与该图像组相邻的场景图像,以对至少一个图像组进行扩展。
[0077]
为了增强不同区域之间的连接以便于后续模型的配准对齐,本步骤中通过将相邻两个子模型中一个子模型的顶点元素复制到另一个子模型,以对上述另一个子模型进行扩展。
[0078]
具体的,可以先根据各个子模型之间的匹配度确定出与任一图像组场景相邻的图像组。示例性的,接着参照图5a,在得到多个子模型之后,可以计算任意两个子模型中跨子模型边元素的数目,进而,将每个子模型视为顶点元素,将跨子模型边元素数目作为任意两个子模型的之间的匹配度。参考图5b可知,子模型p1与子模型p2的匹配度为6,子模型p1与子模型p3的匹配度为6,子模型p1与子模型p4的匹配度为1;子模型p2与子模型p4的匹配度为4,子模型p3与子模型p4的匹配度为5。进而,当上述匹配度小于预设目标值(例如:2)时,可以忽略子模型p1对应的图像组中相关图像与子模型p4对应的图像组中相关图像的匹配
关系,参考图5c,可以取消连接子模型p1与子模型p4之间的边元素,以确定两个子模型对应的图像组中的场景不相邻。从而,可以确定出子模型p1对应的图像组与p2、p3对应的图像组中的场景相邻,子模型p2对应的图像组与p1、p4对应的图像组中的场景相邻,子模型p3对应的图像组与p1、p4对应的图像组中的场景相邻。
[0079]
进而,在一种实施方式中,可以先确定待扩展子模型,获取与待扩展子模型的场景相邻的其他子模型,进而,直接根据跨子模型边元素的权重由大到小的顺序依次选取跨子模型边元素。在选取好跨子模型边元素之后,可以获取跨子模型边元素两端顶点元素所在的子模型中包含的顶点元素数量,若两个子模型中的顶点元素数量均达到预设最大顶点元素数,则重新选取下一跨子模型边元素;若存在顶点元素数量未达到预设最大顶点元素数的子模型,则将跨子模型边元素的一端顶点元素复制到另一端顶点元素所在的子模型。从而,能够避免因顶点元素数量过大导致限制设备性能,影响后续三维重建速度的问题。
[0080]
在另一种实施方式中,还可以先确定待扩展子模型,进而,获取与待扩展子模型的场景相邻的其他子模型,根据其他子模型与上述待扩展子模型之间的匹配度大小,依次从其他子模型中选取目标子模型,并根据目标子模型与待扩展子模型之间的跨子模型边元素的权重由大到小的顺序,选取跨子模型边元素。
[0081]
示例性的,当将子模型p1确定为待扩展子模型时,可以确定与p1场景相邻的其他子模型为p2、p3。进一步的,可以确定出p1与p2之间的匹配度为6,p1与p3之间的匹配度为6,从而,示例性的,当二者不相等时,可以按照匹配度由大到小的顺序依次选取目标子模型,若二者相等时,则示例性的,可以先将子模型p2确定为目标子模型,并根据p1与p2之间的跨子模型边元素的权重由大到小的顺序,选取跨子模型边元素,将与跨子模型边元素相连接的顶点元素复制到子模型p1中;再将子模型p3确定为目标子模型,并根据p1与p3之间的跨子模型边元素的权重由大到小的顺序,选取跨子模型边元素,将与跨子模型边元素相连接的顶点元素复制到子模型p1中。
[0082]
需要说明的是,在进行顶点元素复制的过程中,还可以实时记录已复制的顶点元素数量、复制后子模型中的顶点元素总数量,进而,可以计算上述已复制的顶点元素数量占复制后顶点元素总数量的比例,将该比例确定为匹配关系模型的重叠率。当重叠率达到预设重叠阈值(例如:0.25,可以根据实际情况自行设定,属于本公开的保护范围)时,可以确定完成对上述至少一个图像组的扩展。
[0083]
在对各个子模型扩展完成之后,示例性的,可以参考图5d,图5d示出本示例性实施方式中一种三维场景重建方法的示意图,具体示出对各个图像组进行扩展之后形成的匹配关系模型的示意图,基于该图可知,扩展之后相邻两个子模型之间均存在一定数量的公共顶点元素,即相邻两个子模型对应的图像组中存在相同的场景图像,从而,一方面,本公开能够克服相关技术中依赖硬件、需要对采图人员进行专业培训,以使采集到的图像必须在不同的子区域中包含相同的控制点的问题,降低采图成本,提高采图效率;另一方面,本公开还能够避免因公共点数量过少而导致后续重建模型断开或重建失败的情况,保证模型的合并准确度及生成的模型精度。
[0084]
示例性的,在对至少一个图像组进行扩展之后、在根据图像组进行三维重建之前,可以根据各图像组之间的匹配度确定各个图像组对应的局部场景模型的合并顺序。参考图6,图6示出确定不同图像组对应的局部场景模型的合并顺序的流程图,包括以下步骤s610
至步骤s650:
[0085]
步骤s610,确定不同图像组之间的匹配度。
[0086]
其中,可以确定不同图像组之间的匹配度,具体的,可以将连接任意两个子模型的跨子模型边元素的数目确定为上述任意两个子模型对应的两个图像组之间的匹配度。
[0087]
步骤s620,建立路径树,将任一图像组添加为路径树的根节点,将根节点确定为当前父节点。
[0088]
其中,可以建立路径树,并将任一图像组确定为路径树的根节点,并将上述根节点确定为当前父节点。
[0089]
示例性的,可以通过kruskal算法(克鲁斯卡尔算法,指求加权连通图的最小生成树的算法)构造最小高度树,最小高度树的定义如下:对于具有树特征的无向图,我们可以选择任何节点作为根,生成的图就是一棵有根的树,在所有可能的有根数树,具有最小高度的被称为最小高度树。最小高度树具有的性质是,所有子节点到根节点的路径之和最小,从而,基于该路径,能够实现用最少的变换次数,合并所有的局部场景模型。
[0090]
步骤s630,将未添加的图像组中与当前父节点的匹配度超过预设匹配阈值的图像组添加为当前父节点的子节点。
[0091]
其中,可以将未添加的图像组中与当前父节点的匹配度超过预设匹配阈值的图像组添加为当前父节点的子节点。
[0092]
步骤s640,在当前父节点的子节点中,选取与当前父节点的匹配度最低的子节点作为新的当前父节点,并跳转至将未添加的图像组中与当前父节点的匹配度超过预设匹配阈值的图像组添加为当前父节点的子节点的步骤。
[0093]
其中,可以在上述当前父节点的子节点中,选取与当前父节点的匹配度最低的子节点作为新的父节点,并从其他未添加的图像组中,选取与当前父节点的匹配度超过预设匹配度阈值的图像组,将该图像组添加为上述当前父节点的子节点,直至将所有图像组全部添加至上述路径树中。
[0094]
步骤s650,当图像组全部添加至路径树中,根据路径树确定图像组对应的局部场景模型的合并顺序。
[0095]
其中,当将图像组全部添加至上述路径树中之后,可以将上述路径树确定为图像组对应的局部场景模型的合并顺序。从而,能够用最少的变换关系,合并所有的局部场景模型。
[0096]
继续参考图2,步骤s240中,分别对每个图像组中的场景图像进行三维重建处理,得到每个图像组对应的局部场景模型。
[0097]
本步骤中,可以将上述至少两个图像组中的场景图像分配到对应的至少两个机器中分别进行三维重建,以得到每个图像组对应的局部场景模型,从而,能够解决因单一机器的计算资源和内存资源不足所导致的重建失败的问题,缩短重建时间,提高重建效率。
[0098]
示例性的,可以采用sfm算法(structure form motion,运动化结构,简称:sfm)对每个图像组中的场景图像进行三维重建,该方法包括图像匹配、初始像对选取、增量式添加、集束调整(bundle adjustment,ba)四个步骤。首先进行所有可能图像之间的特征匹配,随后进行几何验证,保留满足几何约束的匹配。若两幅图像之间的匹配对数量大于阈值,则认为这两幅图像存在场景的重叠;在所有图像中寻找两幅具有较多的匹配数量、且具有较
宽的基线长度的图像作为重建的起点,以获得较为精确的初始三维结构;从剩下的图像中选出一个与当前重建结果有最多重叠部分的图像,加入当前模型。新加入图像的姿态参数由n点透视(perspective-n-point,pnp)算法求出,并依据其参数引入新的三维点。如果一个图像已经被加入当前模型并且已估到其参数,则这幅图像被称作已经标定的图像。为了避免每次加入新的图像导致误差的累积,每加入若干幅图像之后利用ba算法进行一次全局参数优化;以上过程不断重复直到没有新的图像可以加入重建过程,得到每个图像组对应的局部场景模型。
[0099]
继续参考图2,步骤s250中,对局部场景模型进行合并处理,得到完整的三维场景模型。
[0100]
本步骤中,示例性的,可以参考图7,图7示出对局部场景模型进行合并处理,得到完整的三维场景模型的流程图,包括以下步骤s710至s730:
[0101]
步骤s710,获取待合并的两个局部场景模型;每个局部场景模型对应一坐标系。
[0102]
示例性的,上述两个局部场景模型可以是拼接顺序相邻的两个局部模型。
[0103]
步骤s720,确定两个局部场景模型对应的两个坐标系之间的变换参数。
[0104]
两个坐标系之间的变换参数可以包括两个坐标系之间的尺度变换参数、旋转平移参数。
[0105]
示例性的,可以参考图8,图8示出确定两个局部场景模型对应的两个坐标系之间的尺度变换参数的流程图,包含步骤s810至步骤s820:
[0106]
步骤s810,确定两个局部场景模型的至少两个公共点。
[0107]
示例性的,可以获取两个局部场景模型对应的两个图像组共有的场景图像,根据两个图像组共有的场景图像中的特征点,确定两个局部场景模型的公共点。
[0108]
步骤s820,根据至少两个公共点在两个坐标系下的距离之比,确定两个坐标系之间的尺度变换参数。
[0109]
每个局部场景模型对应一坐标系,可以根据上述公共点在两个坐标系下的距离之比,确定两个坐标系之间的尺度变换参数。
[0110]
以任意两个公共点(例如:坐标系k1中的点i和坐标系k2中的点j为公共点)为例进行说明,举例而言,在坐标系k1中,点i和点j之间的距离可以表示为在坐标系k2中,点i和点j之间的距离可以表示为进而,可以将上述两个距离之比确定为两个坐标系之间的尺度变换参数
[0111][0112]
进而,针对上述至少两个公共点,可以将得到的至少两个相对尺度的均值确定为上述两个坐标系之间的尺度变换参数s
k1k2

[0113][0114]
图9示出本示例性实施方式中确定两个局部场景模型对应的两个坐标系之间的旋转平移参数(包括旋转矩阵和平移矩阵)的流程图,包括以下步骤s910至步骤s920:
[0115]
步骤s910,获取至少两个公共点在两个坐标系下的位姿参数。
[0116]
示例性的,可以获取两个局部场景模型的公共点(可以是不在同一条直线上的至少两个公共点),示例性的,公共点x在坐标系k1下的位姿参数可以表示为x1矩阵,公共点x在坐标系k2下的位姿参数可以表示为x2矩阵。
[0117]
步骤s920,根据位姿参数,确定两个坐标系之间的旋转平移参数。
[0118]
示例性的,可以根据上述公共点的位姿参数建立对应关系:x2=r
12
x1+t
12
,其中,r
12
表示3
×
3的正交旋转矩阵,t
12
表示平移矩阵,显然只要求解出r
12
和t
12
,即可确定出坐标系k1和坐标系k2之间的变换参数,从而将两个局部模型拼接在一起,以下对具体的求解过程进行说明:
[0119]
示例性的,可以设定k1所在的局部坐标系为(r1,t1),设定k2所在的局部坐标系为(r2,t2),从而,上述位姿参数x1可以表示为:x1=r1x+t1,上述位姿参数x2可以表示为:x2=r2x+t2,进而,可以得到从而,旋转矩阵平移矩阵类似的,可以参照上述步骤确定出合并顺序相邻的两个局部场景模型对应的两个坐标系之间的旋转平移参数。
[0120]
继续参考图7,在步骤s730中,根据变换参数,将两个局部场景模型中的一个转换到另一个的坐标系中,并合并两个局部场景模型。
[0121]
本步骤中,在得到上述尺度变换参数之后,可以根据上述尺度变换参数对上述两个坐标系对应的局部场景模型进行放缩处理,以避免建图时尺度不统一而导致的模型大小不一致,无法合并的问题,保证模型的合并准确度。
[0122]
在得到上述旋转平移变换参数之后,可以根据上述旋转平移变换参数将两个局部场景模型中的其中一个转换到另一个的坐标系中,以合并上述两个局部场景模型。示例性的,对于所有的局部场景模型而言,可以选定任一局部模型对应的坐标系为标准坐标系,并将其他局部模型的坐标系均变换至上述标准坐标系下,以实现将所有的局部模型坐标系转换到上述标准坐标系下,得到完整的三维场景模型。
[0123]
需要说明的是,在得到上述完整的三维场景模型(三维地图)之后,还可以基于上述三维场景构建方法的基础上加入ar导航,视觉定位等相关算法。进而,示例性的,在无gps信号的室内情况下,可以将用户终端(例如:手机)拍摄到的二维图片,映射到重建好的三维地图上,以确定出终端的当前位姿,进一步的,可以生成导航信息发送到终端,实现室内导航服务、商场门店信息的ar显示等。
[0124]
示例性的,图10示出本公开示例性实施方式中三维场景重建方法的整体流程图,包括以下步骤s1001-s1006:
[0125]
在步骤s1001中,采集场景图像集;
[0126]
在步骤s1002中,构造匹配关系模型(特征提取,并进行特征匹配,以根据匹配关系构建匹配关系模型);
[0127]
在步骤s1003中,场景切割与扩展(通过归一化图割算法切割匹配关系模型,得到多个子模型;对每个子模型对应的图像组进行扩展)
[0128]
在步骤s1004中,三维重建;
[0129]
在步骤s1005中,子模型合并(构造最小高度树生成合并顺序,确定坐标系之间的变换参数,根据上述合并顺序和上述变换参数对各个局部场景模型进行合并)
[0130]
在步骤s1006中,得到完整的三维场景模型。
[0131]
本公开还提供了一种三维场景构建装置。参考图11所示,三维场景构建装置1100可以包括:
[0132]
图像采集模块1110,用于获取采集到的多张场景图像。
[0133]
图像匹配模块1120,用于根据场景图像之间的匹配关系,将场景图像划分为至少两个图像组。
[0134]
扩展模块1130,用于在至少一个图像组中添加与该图像组相邻的场景图像,以对至少一个图像组进行扩展。
[0135]
三维重建模块1140,用于分别对每个图像组中的场景图像进行三维重建处理,得到每个图像组对应的局部场景模型。
[0136]
合并模块1150,用于对局部场景模型进行合并处理,得到完整的三维场景模型。
[0137]
在一种实施方式中,图像匹配模块1120,被配置为:
[0138]
确定场景图像的特征点;
[0139]
将任意两张场景图像的特征点进行匹配,以确定任意两张场景图像的匹配关系。
[0140]
在一种实施方式中,图像匹配模块1120,被配置为:
[0141]
将任意两张场景图像的特征点进行匹配,得到任意两张场景图像的匹配点对的数量;
[0142]
根据匹配点对的数量确定任意两张场景图像的匹配度。
[0143]
在一种实施方式中,图像匹配模块1120,被配置为:
[0144]
根据任意两张图像的几何约束关系,在任意两张场景图像的匹配点对中剔除误匹配点对。
[0145]
在一种实施方式中,图像匹配模块1120,被配置为:
[0146]
根据场景图像之间的匹配关系构建匹配关系模型;其中,匹配关系模型中的顶点元素表示场景图像,匹配关系模型中的边元素表示场景图像之间的匹配关系;
[0147]
基于匹配关系模型中边元素的权重,将匹配关系模型分割为多个子模型,得到每个子模型对应的图像组。
[0148]
在一种实施方式中,图像匹配模块1120,被配置为:
[0149]
基于匹配关系模型中边元素的权重,采用归一化图割算法将匹配关系模型分割为多个子模型。
[0150]
在一种实施方式中,扩展模块1130,被配置为:
[0151]
将相邻两个子模型中一个子模型的顶点元素复制到另一个子模型,以对另一个子模型对应的图像组进行扩展。
[0152]
在一种实施方式中,扩展模块1130,被配置为:
[0153]
在匹配关系模型中确定跨子模型边元素的权重,跨子模型边元素连接不同子模型中的顶点元素;
[0154]
按照权重的顺序依次选取跨子模型边元素,将跨子模型边元素的一端顶点元素复制到另一端顶点元素所在的子模型。
[0155]
在一种实施方式中,扩展模块1130,被配置为:
[0156]
判断跨子模型边元素两端顶点元素所在的子模型是否均达到预设最大顶点元素
数,若是,则选取下一跨子模型边元素;若否,则执行将跨子模型边元素的一端顶点元素复制到另一端顶点元素所在的子模型的步骤。
[0157]
在一种实施方式中,扩展模块1130,被配置为:
[0158]
根据已复制的顶点元素数量占复制后顶点元素总数量的比例,确定匹配关系模型的重叠率;
[0159]
当判断重叠率达到预设重叠阈值时,确定完成对至少一个图像组的扩展。
[0160]
在一种实施方式中,三维重建模块1140,被配置为:
[0161]
确定不同图像组之间的匹配度;
[0162]
建立路径树,将任一图像组添加为路径树的根节点,将根节点确定为当前父节点;
[0163]
将未添加的图像组中与当前父节点的匹配度超过预设匹配阈值的图像组添加为当前父节点的子节点;
[0164]
在当前父节点的子节点中,选取与当前父节点的匹配度最低的子节点作为新的当前父节点,并跳转至将未添加的图像组中与当前父节点的匹配度超过预设匹配阈值的图像组添加为当前父节点的子节点的步骤;
[0165]
当图像组全部添加至路径树中,根据路径树确定图像组对应的局部场景模型的合并顺序。
[0166]
在一种实施方式中,合并模块1150,被配置为:
[0167]
获取待合并的两个局部场景模型;每个局部场景模型对应一坐标系;
[0168]
确定两个局部场景模型对应的两个坐标系之间的变换参数;
[0169]
根据变换参数,将两个局部场景模型中的一个转换到另一个的坐标系中,并合并两个局部场景模型。
[0170]
在一种实施方式中,合并模块1150,被配置为:
[0171]
确定两个局部场景模型的至少两个公共点;
[0172]
根据至少两个公共点在两个坐标系下的距离之比,确定两个坐标系之间的尺度变换参数。
[0173]
在一种实施方式中,合并模块1150,被配置为:
[0174]
获取两个局部场景模型对应的两个图像组共有的场景图像;
[0175]
根据两个图像组共有的场景图像中的特征点,确定两个局部场景模型的公共点。
[0176]
在一种实施方式中,合并模块1150,被配置为:
[0177]
获取至少两个公共点在两个坐标系下的位姿参数;
[0178]
根据位姿参数,确定两个坐标系之间的旋转平移参数。
[0179]
上述三维场景构建装置1100中各部分的具体细节已经在对应的三维场景构建方法中进行了详细的描述,因此此处不再赘述。
[0180]
本公开的示例性实施方式还提供了一种计算机可读存储介质,可以实现为一种程序产品的形式,其包括程序代码,当程序产品在电子设备上运行时,程序代码用于使电子设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。在一种实施方式中,该程序产品可以实现为便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在电子设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、
装置或者器件使用或者与其结合使用。
[0181]
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0182]
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0183]
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。
[0184]
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
[0185]
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的示例性实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
[0186]
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施方式。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施方式仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
[0187]
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1