视觉定位方法、设备和存储介质与流程

文档序号:31126431发布日期:2022-08-13 03:37阅读:44来源:国知局
视觉定位方法、设备和存储介质与流程

1.本技术涉及增强现实技术领域,尤其涉及一种视觉定位方法、设备和存储介质。


背景技术:

2.随着软硬件技术的快速发展,基于电子设备(如智能手机)实现的增强现实(augmented reality,ar)技术被越来越多地应用在诸如教育培训、展览展示等行业中。
3.ar技术,是一种基于设备自身的位姿,在显示屏上特定位置显示虚拟图像的技术。通过应用ar技术,电子设备可以使设备屏幕中虚拟图像和实物的图像相结合,达到虚实结合的效果。设备位姿的准确度,对ar的性能有重要影响。设备位姿越准确,则虚拟图像和实物的图像的结合越自然,用户的视觉效果越好,反之设备的位姿不准确,则视觉效果较差。
4.目前设备的位姿一般通过视觉定位的方法确定,即根据设备的摄像头当前拍摄到的图像确定设备的位姿。而现有的视觉定位方法,仅利用了设备上单个摄像头(例如手机的后置摄像头)拍摄的图像,准确度较低。


技术实现要素:

5.针对上述问题,本技术提供了一种视觉定位方法、设备和存储介质,结合电子设备不同方向的摄像头拍摄到的照片来计算电子设备的位姿,从而提高计算结果的准确度。
6.为了实现上述目的,本技术提供了以下技术方案:
7.本技术第一方面提供一种视觉定位方法,包括:
8.获得前置图像和后置图像,所述前置图像为第一设备的前置摄像头拍摄的图像,所述后置图像为所述第一设备的后置摄像头拍摄的图像;
9.在离线地图中查找得到与所述前置图像相似的前置候选帧,以及与所述后置图像相似的后置候选帧,所述离线地图包括第二设备拍摄的多帧图像;
10.根据所述前置候选帧确定所述前置图像的点对,并根据所述后置候选帧确定所述后置图像的点对,所述前置图像的点对包括所述前置图像的像素点和投影出所述前置图像的像素点的空间点,所述后置图像的点对包括所述后置图像的像素点和投影出所述后置图像的像素点的空间点;
11.根据所述前置图像的点对,所述后置图像的点对,以及所述第一设备的相对位姿,确定所述第一设备的位姿,所述第一设备的相对位姿为所述第一设备的前置摄像头和所述第一设备的后置摄像头的相对位姿。
12.其中,第一设备可以是用户使用的电子设备,即用户设备,例如可以是智能手机;第二设备是专门用于拍摄构建离线地图所需图像的摄像设备,即采集设备。
13.本实施例的有益效果在于,利用前置摄像头拍的前置图像以及前后置摄像头间的相对位姿确定第一设备的位姿,提高了视觉定位的准确度。
14.在一些可选的实施例中,所述在离线地图中查找得到与所述前置图像相似的前置候选帧,以及与所述后置图像相似的后置候选帧,包括:
15.将所述第二设备的前置摄像头拍摄的图像中,和所述前置图像的相似度大于预设的相似度阈值的图像确定为前置候选帧;
16.将所述第二设备的后置摄像头拍摄的图像中,和所述后置图像的相似度大于预设的相似度阈值的图像确定为后置候选帧。
17.可以理解,前置候选帧和后置候选帧可以有多个。示例性的,可以选取和前置图像相似度大于0.8的多帧图像作为前置候选帧,选取和后置图像相似度大于0.8的多帧图像作为后置候选帧。
18.在一些可选的实施例中,所述根据所述前置候选帧确定所述前置图像的点对,并根据所述后置候选帧确定所述后置图像的点对之前,还包括:
19.识别出所述前置候选帧和所述后置候选帧中的图像组合,所述图像组合包括所述第二设备同时拍摄的一帧所述前置候选帧和一帧所述后置候选帧;
20.针对每一个所述图像组合,计算所述图像组合的相对位姿误差,所述图像组合的相对位姿误差,为所述图像组合的所述前置候选帧和所述后置候选帧的相对位姿,与所述第二设备的相对位姿的误差,所述第二设备的相对位姿,为预先标定的所述第二设备的前置摄像头和后置摄像头的相对位姿;
21.按对应的所述相对位姿误差从小到大的顺序将所述图像组合重新排序。
22.在一些可选的实施例中,所述识别出所述前置候选帧和所述后置候选帧中的图像组合之后,还包括:
23.删除未组成图像组合的前置候选帧和后置候选帧。
24.在一些可选的实施例中,所述根据所述前置候选帧确定所述前置图像的点对,并根据所述后置候选帧确定所述后置图像的点对,包括:
25.根据重新排序后的前n个所述前置候选帧确定所述前置图像的点对,并根据重新排序后的前n个所述后置候选帧确定所述后置图像的点对,所述n为预设的正整数。
26.上述实施例的好处在于,按相对位姿误差从小到大重新排序并优先选用相对位姿误差较小的图像组合,可以提高视觉定位结果的准确度。
27.在一些可选的实施例中,所述根据所述前置候选帧确定所述前置图像的点对,包括:
28.提取所述前置候选帧的图像特征和所述前置图像的图像特征;
29.通过比对所述前置候选帧的图像特征和所述前置图像的图像特征,确定和所述前置图像的像素点匹配的所述前置候选帧的像素点;
30.将投影出所述前置候选帧的像素点的空间点,以及和所述前置候选帧的像素点匹配的所述前置图像的像素点,确定为所述前置图像的点对。
31.示例性的,离线地图中已经记录有前置候选帧的像素点b1为空间点b的投影,通过比对前置候选帧的图像特征和前置图像的图像特征,确定前置图像的像素点b2和前置候选帧的像素点b1匹配,于是,可以进一步确定像素点b2和空间点b为前置图像的一个点对,即前置图像的像素点b2为空间点b的投影。
32.在一些可选的实施例中,所述根据所述前置图像的点对,所述后置图像的点对,以及所述第一设备的相对位姿,确定所述第一设备的位姿,包括:
33.根据所述前置图像的点对计算得到所述第一设备的前置摄像头的位姿估计值;
34.根据所述后置图像的点对计算得到所述第一设备的后置摄像头的位姿估计值;
35.基于非线性优化方法优化所述第一设备的前置摄像头的位姿估计值和所述第一设备的后置摄像头的位姿估计值,得到所述第一设备的位姿,所述非线性优化方法的优化函数至少包括所述第一设备的相对位姿误差;
36.所述第一设备的相对位姿误差为,根据所述第一设备的前置摄像头的位姿估计值和所述第一设备的后置摄像头的位姿估计值计算得到的所述第一设备的相对位姿估计值,与预先标定的所述第一设备的相对位姿的误差,所述第一设备的相对位姿为所述第一设备的前置摄像头和后置摄像头之间的相对位姿。
37.在一些可选的实施例中,所述非线性优化方法的优化函数包括所述第一设备的相对位姿误差,所述前置图像的重投影误差和所述后置图像的重投影误差。
38.本技术第二方面提供一种电子设备,包括存储器,一个或多个处理器;
39.所述存储器用于存储计算机程序;
40.一个或多个处理器用于执行计算机程序,具体用于实现本技术第一方面任意一项所提供的视觉定位方法。
41.本技术第三方面提供一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,具体用于实现本技术第一方面任意一项所提供的视觉定位方法。
42.本技术实施例提供一种视觉定位方法、设备和存储介质,方法包括,获得第一设备的前置摄像头拍的前置图像和后置摄像头拍的后置图像,找到和前置图像相似的前置候选帧,以及和后置图像相似的后置候选帧;根据前置候选帧确定前置图像的点对,根据后置候选帧确定后置图像的点对,前置图像的点对包括前置图像的像素点和投影出像素点的空间点,后置图像的点对包括后置图像的像素点和投影出像素点的空间点;根据前置图像和后置图像的点对,以及第一设备的前置摄像头和后置摄像头的相对位姿,确定第一设备的位姿。本方案利用前置摄像头拍的前置图像以及前后置摄像头间的相对位姿确定第一设备的位姿,提高了视觉定位的准确度。
附图说明
43.图1为本技术实施例提供的一种电子设备的结构示意图;
44.图2为本技术实施例提供的一种视觉定位服务的应用场景示意图;
45.图3为本技术实施例提供的一种视觉定位方法的流程图;
46.图4为本技术实施例提供的一种对前置候选帧和后置候选帧重排序的示意图;
47.图5为本技术实施例提供的一种像素点和空间点配对的示意图;
48.图6为本技术实施例提供的一种计算用户设备位姿的方法的流程图;
49.图7为本技术实施例提供的一种用户设备和云端的交互示意图;
50.图8为本技术实施例提供的另一种视觉定位方法的流程图。
具体实施方式
51.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本技术的限制。如在本技术的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括例如“一个或多个”这种表达形式,除非其上下文中明确地有相反指示。还应当理解,在本技术实施例中,“一个或多个”是指一个、两个或两个以上;“和/或”,描述关联对象的关联关系,表示可以存在三种关系;例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a、b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
52.为了方便说明,首先对本技术可能涉及的术语做简要说明。
53.设备的位姿,包括电子设备上一个或多个摄像头的位姿,也就是包括电子设备上一个或多个摄像头的位置和姿态。以一个具有前置摄像头和后置摄像头的智能手机为例,该智能手机的位姿,包括前置相机位姿,也就是该手机的前置摄像头的位置和姿态,以及后置相机位姿,也就是该手机的后置摄像头的位置和姿态。摄像头的位姿可以用平移矩阵t和旋转矩阵r表示。
54.摄像头的位置可以记为平移矩阵t:
[0055][0056]
其中x,y和z表示在空间直角坐标系下摄像头位置的坐标,摄像头的姿态可以记为旋转矩阵r,r为一个3
×
3的矩阵,用于表示摄像头的方向(也可以理解为摄像头的光轴的方向)相对于空间直角坐标系的x,y和z轴旋转的角度。在一些应用场景中,旋转矩阵和平移矩阵也可以合并为如下形式的外参矩阵p:
[0057][0058]
图像的位姿。对于电子设备拍摄得到的一帧图像,可以将拍摄这一帧图像时该电子设备的位姿,称为这帧图像的位姿。
[0059]
相机内参,用于描述摄像头内部的一些固有参数,如相机焦距、畸变参数等。已知空间中某点在相机坐标系下的坐标时,可以通过相机内参计算出该点在照片上投影出的像素点的平面坐标。其中,相机坐标系是指,以摄像头的光心作为原点,以摄像头的光轴作为z轴而确定的空间直角坐标系。相机内参一般在带摄像头的电子设备(如有拍照功能的手机,数码相机等)出厂前就预先标定好并存储在电子设备的存储介质中。例如,对具有前置摄像头和后置摄像头的智能手机,手机的存储器中存储有预先标定好的前置摄像头的相机内参,和后置摄像头的相机内参。
[0060]
离线地图。要实现在特定场景下电子设备的视觉定位,需要预先构建该场景的离线地图。某场景的离线地图,可以包括如下信息:在该场景中连续拍摄得到的多帧图像,每帧图像的位姿,图像中像素点的投影关系,以及采集设备的参数。
[0061]
其中,采集设备是指用于拍摄该离线地图中多帧图像的电子设备。采集设备的参数可以包括采集设备上一个或多个摄像头的相机内参,采集设备上一个或多个摄像头之间的相对位姿。一般的,采集设备的相对位姿在采集设备出厂前由厂商预先标定好并记录在采集设备中。
[0062]
两个摄像头之间的相对位姿,可以理解为,在一个摄像头的相机坐标系中,另一个摄像头的位置和姿态,两个摄像头之间的相对位姿也可以用旋转矩阵和平移矩阵表示。
[0063]
一般的,离线地图的构建方法可以是,用采集设备拍摄某场景的多帧图像,然后采
集设备将拍摄到的多帧图像和自身的参数上传到云端,云端的服务器通过三维重建等算法处理采集设备上传的图像,得到每帧图像的位姿,以及图像中像素点的投影关系,最后将这些数据作为相应场景的离线地图保存在云端。
[0064]
以商场a为示例,采集设备在商场a中拍摄多帧图像,然后将商场a的多帧图像和采集设备的参数上传到云端,云端的服务器通过三维重建等算法处理采集设备上传的图像,得到每帧图像的位姿,以及图像中像素点的投影关系,最后将这些商场a的图像,图像的位姿,图像中像素点的投影关系,以及采集设备的参数作为商场a的离线地图保存在云端。
[0065]
空间点(也称3d点),可以理解为实物表面的点。相对的,图像上的像素点,可以称为2d点。
[0066]
像素点投影关系。照片上实物的图像,可以理解为空间中实际存在的物体在摄像头的成像平面上的投影,对应的,照片上组成实物图像的每一个像素点,显示都是实物表面的若干个空间点的投影。例如,照片上一辆汽车的图像,可以视为汽车本体在成像平面上的投影,那么,构成汽车的图像的各个像素点,显然是由汽车表面的点在成像平面上投影产生的。离线地图中像素点投影关系,就是用于说明离线地图拍摄到的照片中的像素点,分别是由特定场景中物体表面的哪个空间点投影得到的,以及投影出这些像素点的空间点的坐标(位置)。
[0067]
示例性的,对于图像的像素点a1,该像素点的投影关系可以是,像素点a1,由空间坐标为(xa,ya,za)的空间点a1-3d投影得到。换言之,图像上的像素点a1,是空间中物体表面位于(xa,ya,za)这一坐标的空间点的投影。
[0068]
为了减少离线地图总体的数据量,上述投影关系一般不记录每一个像素点的投影关系,而只记录一部分具有代表性的像素点的投影关系。例如,对于一张658
×
658的图像,上述投影关系可能只记录其中30个像素点的投影关系,即记录30个像素点是由物体表面哪些空间点投影得到,以及这些空间点的坐标是多少。
[0069]
世界坐标系,是指以空间中任意一个固定点为原点而建立的空间直角坐标系。不同的离线地图所用的世界坐标系一般不同。一个离线地图的世界坐标系的原点可以指定为拍摄离线地图中第一帧图像时采集设备的某个摄像头光心的位置,例如指定为拍摄第一帧图像时手机的前置摄像头光心的位置。世界坐标系的z轴可以指定为垂直于地表的轴线,垂直地表向上的方向为z轴的正方向。
[0070]
示例性的,利用采集设备拍摄得到商场a中连续的多帧图像,例如商场a的1至n帧图像之后,可以根据这些图像建立商场a的离线地图。商场a的离线地图,包括商场a的1至n帧图像,1至n帧图像中每一帧图像的位姿,采集设备上每个摄像头的相机内参,以及1至n帧图像中的多个像素点,是由商场a中位于哪些位置的空间点的投影。
[0071]
需要说明的,本技术实施例中,如无特别说明,摄像头的位姿,以及物体表面的空间点的坐标,均以世界坐标系为参照。换言之,摄像头的位姿,是指摄像头在世界坐标系下的位置和姿态;空间点的坐标,是指空间点在世界坐标系下的坐标。
[0072]
本技术实施例提供一种电子设备100,其具体可以是手机,平板电脑等设备。
[0073]
如图1所示,电子设备100可以包括:处理器110,外部存储器120,内部存储器(也称“内存”)121,通用串行总线(universal serial bus,usb)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,
扬声器170a,受话器170b,麦克风170c,耳机接口170d,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,sim)卡接口195等。其中传感器模块180可以包括压力传感器,陀螺仪传感器,气压传感器,磁传感器,加速度传感器,距离传感器,接近光传感器,指纹传感器,温度传感器,触摸传感器,环境光传感器,骨传导传感器等。
[0074]
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,ap),通信处理器(communication processor,cp,也可以称为调制解调器),图形处理器(graphics processing unit,gpu)等。
[0075]
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
[0076]
摄像头193可以包括一个或多个摄像头,例如,摄像头193可以包括安装于电子设备背面的一个或多个后置摄像头,以及安装于电子设备正面(以屏幕所在的一面为正面)的一个或多个前置摄像头。
[0077]
显示屏194可以包含一个或多个屏幕。电子设备通过屏幕显示视频,图像以及一系列图形用户界面。在一些实施例中,显示屏194可以和触摸传感器组合为触摸屏,用户可以通过(用手指或触控笔)在触摸屏上点击或者滑动的方式和电子设备交互。
[0078]
本技术实施例中,电子设备100可以通过安装特定的应用而具有ar功能,ar功能启动后,电子设备100通过摄像头193拍摄得到当前场景的图像并将当前场景的图像显示在显示屏194上,同时,电子设备100根据自身的位姿,在屏幕上显示预设的虚拟图像(例如虚拟人物的图像)。由此,电子设备100可以在屏幕上呈现虚拟图像和当前场景中实物图像的互动。
[0079]
本技术实施例中,外部存储器120可以存储计算机指令。
[0080]
处理器110可以执行计算机指令,使得电子设备100实现本技术任一实施例所提供的视觉定位的方法。
[0081]
其中,本技术的视觉定位的方法需要利用电子设备100的前置图像和后置图像,前置图像是指由前置摄像头拍摄得到的照片,后置图像是指后置摄像头拍摄得到的照片。
[0082]
以上是以电子设备100为例对本技术实施例作出的具体说明。应该理解的是,本技术实施例示意的结构并不构成对电子设备100的具体限定。电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件.软件.或硬件和软件的组合中实现。
[0083]
本技术实施例提供的电子设备可以是用户设备(user equipment,ue),例如可以为移动终端(例如用户手机)、平板电脑、桌面型、膝上型笔记本电脑、手持计算机、上网本、个人数字助理(personal digital assistant,pda)等设备。
[0084]
另外,在上述部件之上,运行有操作系统。例如苹果公司所开发的ios操作系统,谷歌公司所开发的android开源操作系统,微软公司所开发的windows操作系统,以及系统等。在该操作系统上可以安装运行程序。
[0085]
示例性的,电子设备100可以安装有视觉定位服务(visual positioning service,vps)组件,电子设备100可以通过运行vps组件,执行本技术任一实施例所提供的视觉定位的方法。
[0086]
本技术实施例中,根据功能的不同,可能涉及两类设备,一类称为采集设备,是指用于拍摄离线地图中多帧图像的摄像设备,另一类称为用户设备,是指需要通过本技术的视觉定位方法确定位姿的设备。采集设备和用户设备均可以具有如图1的电子设备的结构。
[0087]
一般的,采集设备和用户设备不为同一设备,下文均针对采集设备和用户设备不为同一设备进行说明。当然,在一些可选的实施例中,采集设备和用户设备也可以是同一设备,本技术的视觉定位方法不受此影响,本技术对此也不作限定。
[0088]
结合前述示例,提供相关服务的厂商可以预先用专业的摄像设备拍摄商场a的一系列照片,由此构建商场a的离线地图,用户在商场a内使用智能手机的ar功能,ar功能开启期间,用户的智能手机通过本技术的视觉定位方法确定智能手机的位姿(即手机前后置摄像头的位姿)。上述场景中,厂商所用的摄像设备即采集设备,用户的智能手机即用户设备。
[0089]
请参见图2,为vps的一种典型的应用场景,即手机的ar功能的示意图。
[0090]
用户设备200响应于用户的操作,开启用户设备200的ar功能,例如打开预先安装的ar应用。
[0091]
ar功能开启后,用户设备200通过后置摄像头实时拍摄得到当前场景的图像,并将当前场景的图像显示在屏幕上。如图2所示,用户设备200拍摄到的图像中包括实物图像201。
[0092]
在此基础上,用户设备200在当前场景的图像中的特定位置进一步显示预设的虚拟图像,例如用户设备200可以在实物图像201的上方显示一个虚拟人物,即图2所示的虚拟图像202。在一些可选的实施例中,屏幕上的虚拟图像可以根据用户的操作或者用户设备的移动而移动或作特定动作,从而实现基于真实场景下用户和虚拟图像的交互。
[0093]
不难理解,在图2所示的场景中,为了准确地将虚拟图像202显示在实物图像201上方,用户设备200需要获得实时拍摄的实物图像在屏幕上的位置。而屏幕上实物图像的位置可以根据拍摄图像时用户设备200的后置摄像头的位姿,以及实际物体,例如图2中实物图像201的水杯在场景中的位置确定。
[0094]
其中,实际物体在场景中的位置可以由离线地图中像素点的投影关系确定,用户设备200的后置摄像头的位姿,则需要通过本技术的视觉定位方法获得。
[0095]
请参见图3,为本技术提供的一种视觉定位方法的流程图。
[0096]
s301a,用前置摄像头拍摄前置图像。
[0097]
步骤s301a中的前置摄像头,是指用户设备的前置摄像头。
[0098]
s301b,用后置摄像头拍摄后置图像。
[0099]
步骤s301b中的后置摄像头,是指用户设备的后置摄像头。
[0100]
需要说明,步骤s301a和步骤s301b由用户设备同时执行。
[0101]
结合前述示例,用户设备可以是某用户携带的具有ar功能的智能手机。用户进行一家商场后,手机的ar功能被开启,此时手机为确定自身的位姿,同时执行步骤s301a和s301b,即同时调用自身的前置摄像头和后置摄像头拍照,获得对应的前置图像和后置图像。
[0102]
在一些可选的实施例中,用户设备可以在屏幕上显示后置图像,而前置图像一般不在屏幕上显示。
[0103]
例如图2所示的ar功能的场景中,手机的后置摄像头拍摄到的照片可以显示在屏幕上,以便和屏幕上的虚拟图像结合。
[0104]
s302a,检索得到前置候选帧。
[0105]
前置候选帧,是指离线地图的前置图像中,和步骤s301a中用户设备的前置图像相似的若干帧图像。换言之,步骤s302a,相当于在离线地图的前置图像中查找和用户设备的前置图像相似的若干帧图像。
[0106]
离线地图的前置图像,是指离线地中由采集设备的前置摄像头拍摄得到的图像。也就是说,本实施例中,由于确定用户设备的位姿时结合了用户设备拍摄的前置图像和后置图像,对应的,拍摄用于构建离线地图的图像时所用的采集设备也具备前置摄像头和后置摄像头,并且拍摄过程中采集设备分别用前置摄像头和后置摄像头拍摄,其中由采集设备的前置摄像头拍摄到的多帧图像记为离线地图的前置图像,由采集设备的后置摄像头拍摄得到的多帧图像记为离线地图的后置图像。
[0107]
在一些可选的实施例中,步骤s302a的实施方式可以是,逐一计算每一帧离线地图的前置图像和用户设备的前置图像的相似度,然后将其中相似度大于预设相似度阈值的离线地图的前置图像确定为前置候选帧。例如,若一帧离线地图的前置图像和用户设备的前置图像的相似度大于70%,则确定这一帧离线地图的前置图像为一帧前置候选帧。
[0108]
在一些可选的实施例中,步骤s302a的实施方式也可以是,逐一计算每一帧离线地图的前置图像和用户设备的前置图像的相似度,根据相似度由高到低对离线地图的前置图像排序,选取其中前n帧离线地图的前置图像,也就是选取其中相似度最高的前n帧离线地图的前置图像作为n帧前置候选帧。n为预设的正整数,示例性的,n可以设定为20,即选取离线地图的全部前置图像中相似度最高的前20帧作为20帧前置候选帧。
[0109]
以上仅为步骤s302a的两种示例性的实施方式,在实际应用中步骤s302a也可以通过其他方式实施,本实施例对此不做限定。
[0110]
步骤s302a中,用户设备的前置图像和离线地图的前置图像的相似度可以通过图像处理技术等相关技术领域中任意一种图像相似度算法计算得到,例如结构相似性(structural similarity)算法,感知哈希算法(perceptual hash algorithm),直方图方法等,本实施例对具体使用的图像相似度算法不做限定。
[0111]
作为一个示例,在步骤s302a中可以用直方图方法计算得到每一帧离线地图的前置图像和用户设备的前置图像的相似度,下面以一帧离线地图的前置图像的计算过程为例说明直方图方法计算图像相似度的过程:
[0112]
步骤a,将离线地图的前置图像和用户设备的前置图像的尺寸统一。例如,若离线地图的前置图像的尺寸大于用户设备的前置图像,可以将离线地图的前置图像的尺寸缩小至和用户设备的前置图像的尺寸一致。可以理解,若离线地图的前置图像和用户设备的前置图像原本就具有相同尺寸,可以不执行步骤a,直接执行步骤b。
[0113]
步骤b,将用户设备的前置图像和离线地图的前置图像均转换为灰度图。若用户设备的前置图像和离线地图的前置图像原本就是灰度图,可以跳过步骤b直接执行步骤c。
[0114]
步骤c,确定离线地图的前置图像的灰度直方图,以及用户设备的前置图像的灰度
直方图。
[0115]
灰度直方图,反映了图像中每一种灰度值的像素点的数量。
[0116]
例如,假设灰度值的取值范围是0至255,则依次统计离线地图的前置图像中每个灰度值对应的像素点的个数,如灰度值为0的像素点以及灰度值为1的像素点各由30个,灰度值为2的像素点有45个,灰度值为3的像素点有60个
……
等等,这些数据表示成直方图的形式,就是离线地图的前置图像的灰度直方图。
[0117]
步骤d,分别将离线地图的前置图像的灰度直方图和用户设备的前置图像的灰度直方图归一化,得离线地图的前置图像的归一化直方图,以及用户设备的前置图像的归一化直方图。
[0118]
将灰度直方图归一化,可以理解为,用灰度直方图中每种灰度值对应的像素点的个数,除以图像中像素点的总数,从而得到每种灰度值对应的像素点在图像中的比例,换言之,归一化的灰度直方图,反映了图像中每一种灰度值的像素点的比例。
[0119]
结合步骤c的例子,依次将离线地图的前置图像中每个灰度值对应的像素点的个数,除以离线地图的前置图像的像素点的总数,即得到离线地图的前置图像的归一化直方图,离线地图的前置图像的归一化直方图中可以包含如,灰度值为0的像素点以及灰度值为1的像素点各占1%,灰度值为2的像素点占1.5%,灰度值为3的像素点占2%
……
等等的数据。
[0120]
步骤e,计算离线地图的前置图像的归一化灰度直方图和用户设备的前置图像的归一化灰度直方图的相关系数,将计算结果确定为用户设备的前置图像和离线地图的前置图像的相似度。
[0121]
两个归一化灰度直方图的相关系数r可以按如下公式(1)计算:
[0122][0123]
其中,i表示灰度值,n为灰度值的取值范围的上限,例如255,xi表示离线地图的前置图像中,灰度值i的像素点所占的比例,xavg表示离线地图的前置图像的归一化灰度直方图中全部xi的平均值,yi表示用户设备的前置图像中灰度值i的像素点所占的比例,yavg表示用户设备的前置图像的归一化灰度直方图中全部yi的平均值。
[0124]
s302b,检索得到后置候选帧。
[0125]
后置候选帧,是指离线地图的后置图像中,和步骤s301b中用户设备的后置图像相似的若干帧图像。换言之,步骤s302b,相当于在离线地图的后置图像中查找和用户设备的后置图像相似的若干帧图像。
[0126]
和步骤s302a类似的,在步骤s302b中,既可以按相似度是否大于预设的相似度阈值来检索后置候选帧,也可以按相似度从高到低选取离线地图的后置图像中和用户设备的后置图像的相似度最高的前n帧作为后置候选帧。本实施例对具体实施方式不做限定。
[0127]
步骤s302b中,计算用户设备的后置图像和离线地图的后置图像的相似度的算法可以和步骤s302a中计算相似度的算法相同,也可以不相同。
[0128]
示例性的,在步骤s302b中也可以利用算法计算用户设备的后置图像和离线地图的后置图像的相似度,具体计算方法参见步骤s302a,此处不再赘述。
[0129]
可以理解,不同场景对应有不同的离线地图,例如商场a对应有商场a的离线地图,学校b对应有学校b的离线地图。因此步骤s302a和s302b中检索前置候选帧和后置候选帧,是指,在用户设备当前所在场景的离线地图中检索前置候选帧和后置候选帧。
[0130]
因此,在检索候选帧之前可以先根据用户设备的定位信息(如gps定位信息)确定用户设备所在场景。例如根据用户设备的定位信息指示用户设备在商场a的范围内,则确定用户设备当前所在场景为商场a,检索候选帧时就可以确定在商场a的离线地图中检索。
[0131]
作为一个示例,用户设备在商场a内进行视觉定位时,分别用前置摄像头和后置摄像头拍摄得到一张商场a的前置图像和一张商场a的后置图像,然后用商场a的前置图像在商场a的离线地图中检索,得到若干前置候选帧,用商场a的后置图像在商场a的离线地图中检索,得到若干后置候选帧。
[0132]
s303,将候选帧重排序。
[0133]
将候选帧重排序,是指,识别出检索到的若干前置候选帧和若干后置候选帧中的图像组合,然后计算每一个图像组合的相对位姿误差,最后根据相对位姿误差对识别出的图像组合从低到高排序,即相对位姿误差越小的图像组合排序越靠前。
[0134]
如前所述,采集设备在拍摄构成离线地图的图像时,同时调用自身的前置摄像头和后置摄像头拍摄,相应的,离线地图的每一帧前置图像,都对应有一帧采集设备同一时间拍摄的后置图像,离线地图中由采集设备同一时间拍摄的一帧前置图像和一帧后置图像,可以记为离线地图中的一个图像组合。
[0135]
例如,t1时刻,采集设备同时拍摄的一帧前置图像和一帧后置图像可以视为一个图像组合。
[0136]
在一些可选的实施例中,请参见图4,步骤s303的具体实施方式可以包括如下步骤:
[0137]
s501,识别出前置候选帧和后置候选帧中的图像组合。
[0138]
识别图像组合可以通过比对拍摄时间实现。即,若一帧前置候选帧的拍摄时间和一帧后置候选帧的拍摄时间相同,或者两者的拍摄时间的偏差在可接受范围内(例如小于0.5秒),则可以将这一帧前置候选帧和这一帧后置候选帧视为一个图像组合。采集设备上传图像到云端时可以一并将图像的拍摄时间上传到云端。
[0139]
以图4为例,经识别,发现前置候选帧1和后置候选帧1拍摄时间相同,将这两个候选帧确定为一个图像组合,记为组合1-1,还发现前置候选帧2和后置候选帧2拍摄时间相同,将这两个候选帧确定为一个图像组合,记为组合2-2。
[0140]
在检索前置候选帧和后置候选帧的过程中,可能出现离线地图的一帧前置图像被确定为前置候选帧,而离线地图中同时拍摄的后置图像未被确定为后置候选帧,这种情况下该前置候选帧就无法和后置候选帧构成图像组合;或者反之,离线地图的一帧后置图像被确定为后置候选帧,而离线地图中同时拍摄的前置图像未被确定为前置候选帧,这种情况下该后置候选帧就无法和前置候选帧构成图像组合。
[0141]
在步骤s501中,对于上述情况,可以直接将未构成图像组合的前置候选帧和后置候选帧删除,即,若有前置候选帧未和后置候选帧构成图像组合,则可以删除对应的前置候选帧,若有后置候选帧未和前置候选帧构成图像组合,则可以删除对应的后置候选帧。
[0142]
s502,计算相对位姿。
[0143]
步骤s502中需要计算s501中识别的每一个图像组合的相对位姿。以图4为例,s501中识别出前置候选帧1和后置候选帧1为一个图像组合,前置候选帧2和后置候选帧2为一个图像组合,则步骤s502中,需要计算前置候选帧1和后置候选帧1的相对位姿,计算结果记为相对位姿1-1,以及计算前置候选帧2和后置候选帧2的相对位姿,计算结果记为相对位姿2-2。
[0144]
为了计算方便,图像组合的相对位姿可以和采集设备的相对位姿对应。若采集设备的相对位姿是,前置摄像头相对于后置摄像头的相对位姿,则s502中就计算图像组合中前置候选帧相对于后置候选帧的相对位姿;若采集设备的相对位姿是,后置摄像头相对于前置摄像头的相对位姿,则s502中就计算图像组合中后置候选帧相对于前置候选帧的相对位姿。
[0145]
下面说明一个图像组合的相对位姿的含义,以图4中前置候选帧1和后置候选帧1为例,将采集设备拍摄前置候选帧1和后置候选帧1的时刻记为t。
[0146]
由于前置候选帧1和后置候选帧1的位姿,都由服务器根据采集设备拍摄的多帧图像进行三维重建后计算得到,再结合前文图像的位姿的概念,前置候选帧1的位姿,可以视为t时刻采集设备的前置摄像头的位姿的估计值;后置候选帧1的位姿可以视为t时刻采集设备的前置摄像头的位姿的估计值。
[0147]
进一步的,前置候选帧1相对于后置候选帧1的相对位姿,可以视为,t时刻,采集设备的前置摄像头在后置摄像头的相机坐标系下的位姿的估计值。同理,后置候选帧1相对于前置候选帧1的相对位姿,可以视为,t时刻,采集设备的后置摄像头在前置摄像头的相机坐标系下的位姿的估计值。
[0148]
如前所述,位姿可以用平移矩阵t和旋转矩阵r表示,故前置候选帧1的位姿可以记为旋转矩阵rfront-1和平移矩阵tfront-1,后置候选帧1的位姿可记为旋转矩阵rback-1和平移矩阵tback-1,由此,前置候选帧1相对于后置候选帧1的相对位姿可以用如下公式(2)计算:
[0149][0150]
其中:
[0151][0152][0153]
其中,rfb-1表示前置候选帧1相对于后置候选帧1的旋转矩阵,tfb-1表示前置候选帧1相对于后置候选帧1的平移矩阵。inv表示对括号内的矩阵做逆运算,pback-1为后置候选帧1的外参矩阵,pfront-1为前置候选帧1的外参矩阵,具体请参见前文对设备的位姿的介绍。
[0154]
也就是说,前置候选帧1相对于后置候选帧1的相对位姿,等于后置候选帧1的外参矩阵的逆矩阵,左乘前置候选帧1的前置候选帧1的外参矩阵的乘积。
[0155]
参见前文对离线地图概念的说明,上述计算过程中所用的前置候选帧的位姿,以及后置候选帧的位姿,均可以从离线地图中读取。
[0156]
s503,计算相对位姿误差。
[0157]
相对位姿误差,是指一个图像组合的相对位姿,与采集设备的前置摄像头和后置摄像头的相对位姿之间的偏差。通过步骤s503,可以计算得到每一个图像组合的相对位姿和采集设备的相对位姿的偏差。
[0158]
需要指出,步骤s503中所述的采集设备的相对位姿,是指采集设备上预先标定好的,前置摄像头相对于后置摄像头的相对位姿,或者预先标定好的后置摄像头相对于前置摄像头的位姿。
[0159]
以图4为例,在步骤s503中,分别计算相对位姿1-1和采集设备相对位姿的偏差,得到图像组合1-1的误差1-1,以及计算相对位姿2-2和采集设备相对位姿的偏差,得到图像组合2-2的误差2-2。
[0160]
相对位姿误差可以通过多种方法计算,本实施例对具体的计算方法不做限定。
[0161]
下面结合前述示例说明一种相对位姿误差的计算方法:
[0162]
图像组合1-1的相对位姿用相对旋转矩阵rfb-1,以及相对平移矩阵tfb-1表示,采集设备的前置摄像头相对于后置摄像头的相对位姿用相对旋转矩阵rfb-gt,以及相对平移矩阵tfb-gt表示,则可以基于如下公式(3)计算得到角度误差angle-err:
[0163][0164]
公式(3)中,arccos为反余弦函数,tr(rfb-gt)表示相对旋转矩阵rfb-gt的迹。
[0165]
基于如下公式(4)计算得到平移误差t-err:
[0166][0167]
换言之,平移误差t-err,等于,相对平移矩阵tfb-1和相对平移矩阵tfb-gt的内积的反余弦函数值,除以相对平移矩阵tfb-1的行列式和相对平移矩阵tfb-gt的行列式的乘积,相对平移矩阵tfb-1和相对平移矩阵tfb-gt的内积的计算方式可以参见公式(3)。
[0168]
平移误差和角度误差之和,就可以视为图像组合1-1的相对位姿误差,记为p-err-1-1,即:
[0169]
p-err-1-1=angle-err+t-err
[0170]
s504,根据相对位姿误差将图像组合重新排序。
[0171]
以图4为例,经s503计算后,误差1-1小于误差2-2,所以在重新排序时,将组合1-1排在组合2-2之前。
[0172]
需要说明,步骤s303为可选的步骤,在一些可选的实施例中,也可以不对候选帧进行重排序,在检索得到前置候选帧和后置候选帧后直接执行步骤s304a和s304b。
[0173]
执行步骤s303的原因在于,校验离线地图中前置候选帧的位姿和后置候选帧的位姿的准确度。
[0174]
采集设备中预先标定好的相对位姿,如预先标定好的前置摄像头在后置摄像头的相机坐标系下的位姿可以认为是准确的,并且,采集设备的前置摄像头和后置摄像头是固定好的,使用过程中前置摄像头在后置摄像头的相机坐标系下的位姿显然不会变化。
[0175]
并且,离线地图的前置图像和后置图像是由采集设备同时用自身的前置和后置摄像头拍摄得到的,即前置图像的位姿和后置图像的位姿所用的是同一个世界坐标系。
[0176]
因此,对于图像组合中采集设备同时拍摄的前置候选帧和后置候选帧,如果构建
离线地图时计算的这两个候选帧的位姿准确度较高,那么根据这两个候选帧的位姿计算得到的图像组合的相对位姿,也即前置摄像头在后置摄像头的相机坐标系下的位姿的估计值,应当与采集设备上预先标定的相对位姿相接近,所以相对位姿误差应当较小;反之,若构建离线地图时计算的这两个候选帧的位姿不准确,那么由此计算得到的前置摄像头在后置摄像头的相机坐标系下的位姿的估计值就和标定好的准确的相对位姿就会偏差较大,即相对位姿误差较大。
[0177]
可见,执行步骤s303的好处在于:
[0178]
图像组合的相对位姿误差的大小可以反应图像组合中前置候选帧的位姿和后置候选帧的位姿的准确度,相对位姿误差越小,则对应的前后置候选帧的位姿的准确度越高,根据相对位姿误差从小到大排序,可以在后续步骤中优先使用位姿的准确度较高的前置候选帧和后置候选帧,从而提高最后确定出的用户设备的位姿的准确度。
[0179]
s304a,提取前置图像和前置候选帧的图像特征。
[0180]
在步骤s304a,可以分别提取前置图像的图像特征,以及按步骤s303中的排序,从前往后依次提取m个前置候选帧的图像特征。m为预设的正整数,一般的,m可以小于检索出的前置候选帧的总数。
[0181]
例如,经步骤s303排序后,共有20个前置候选帧,在步骤s304a中,可以只提取其中前14个前置候选帧的图像特征,之后的6个前置候选帧可以直接移除。
[0182]
如步骤s303所述,排序越靠后的前置候选帧的位姿的准确度越低,按上述方式剔除排序靠后的前置候选帧,可以避免后续使用位姿的准确度过低的前置候选帧来计算用户设备的位姿,从而提高确定出的用户设备的位姿的准确度。
[0183]
s304b,提取后置图像和后置候选帧的图像特征。
[0184]
和步骤s304a类似,执行步骤s304b时,也可以分别提取后置图像的图像特征,以及按步骤s303中的排序,从前往后依次提取m个后置候选帧的图像特征。m为预设的正整数,一般的,m可以小于检索出的后置候选帧的总数。
[0185]
例如,经步骤s303排序后,共有20个后置候选帧,在步骤s304a中,可以只提取其中前14个后置候选帧的图像特征,之后的6个后置候选帧可以直接移除。
[0186]
相应的有益效果参见步骤s304a,不再赘述。
[0187]
在步骤s304a和s304b中,可以采用图像处理等相关技术领域中的任意一种图像特征算法来提取指定图像的图像特征,既可以采用传统的图像处理方法,例如尺度不变特征变换(scale-invariant feature transform,sift)方法提取图像特征,也可以采用基于深度学习的方法,例如采用预先训练的卷积神经网络来提取图像特征,本实施例对具体的提取图像特征的算法不做限定。
[0188]
s305a,匹配图像特征,确定前置图像的2d-3d点对。
[0189]
匹配图像特征,是指,将s304a中提取的前置图像的图像特征,和前置候选帧的图像特征进行比对,从而确定前置图像和前置候选帧中哪些像素点相互匹配。
[0190]
比如,通过比对前置图像的图像特征和前置候选帧的图像特征,可以确定前置图像的像素点a1和前置候选帧的像素点a1’相互匹配。
[0191]
结合一个示例说明匹配过程,在步骤s305a中,可以计算前置图像中一个区域的图像特征和前置候选帧中一个区域的图像特征的相似度,若两者的相似度大于预设的相似度
阈值,则可以认为前置图像中该区域中心的像素点,和前置候选帧中该区域的中心的像素点相互匹配。
[0192]
两帧图像中的两个像素点相互匹配,是指,这两个像素点由同一个空间点投影得到。作为一个示例,假设前置图像和前置候选帧中都显示有同一个立方体的图像,前置图像中立方体的一个顶点a投影的像素点为a1,前置候选帧中立方体的顶点a投影的像素点则是a1’,这种情况下,前置图像的像素点a1和前置候选帧的像素点a1’可以认为是两个相互匹配的像素点。
[0193]
确定前置图像的2d-3d点对,可以理解为,确定前置图像中的像素点,分别是离线地图所记录的多个空间点中的哪个空间点的投影,也就是确定前置图像的像素点的投影关系,确定投影关系的前置图像的像素点和投影出该像素点的空间点,就是一个2d-3d点对。
[0194]
参见前文对离线地图概念的说明,离线地图包含前置候选帧中多个像素点的投影关系,即包含投影出前置候选帧的像素点的空间点的坐标,所以,只要在前置图像中找到和前置候选帧的像素点匹配的像素点,就可以将前置候选帧的像素点的投影关系,确定为相互匹配的前置图像中像素点的投影关系。
[0195]
s305b,匹配图像特征,确定后置图像的2d-3d点对。
[0196]
和步骤s305a类似,步骤s305b中,同样是通过比对后置图像的图像特征,和后置候选帧的图像特征,确定后置图像和后置候选帧中哪些像素点相互匹配,从而将后置候选帧中像素点的投影关系确定为后置图像中相互匹配的像素点的投影关系。
[0197]
下面结合图5的示例说明步骤s305b的执行过程:
[0198]
后置候选帧501为前述步骤中检索得到的一帧离线地图的后置图像,并且离线地图记录有后置候选帧501中像素点511的投影关系,即,像素点511是坐标为(x0,y0,z0)的空间点510的投影。
[0199]
s51,特征匹配。
[0200]
在执行步骤s305b时,首先将后置候选帧501的图像特征,和用户设备200拍摄的后置图像502的图像特征进行比对,以便在后置图像中找到和后置候选帧的像素点511匹配的像素点。
[0201]
比对后确定后置图像502的像素点512和后置候选帧的像素点511匹配,即确定像素点512和像素点511是同一个空间点在不同图像上的投影。
[0202]
s52,确定像素点512和空间点510为2d-3d点对。
[0203]
确定后置图像502的像素点512和后置候选帧的像素点511匹配后,就可以将离线地图中像素点511的投影关系,确定为后置图像502的像素点512的投影关系,也就是确定后置图像的像素点512,是坐标为(x0,y0,z0)的空间点510的投影,换言之,就是确定像素点512和空间点510为后置图像的一个2d-3d点对。
[0204]
步骤s305a的执行过程和图5的示例类似,不再赘述。
[0205]
s306,结合前置图像和后置图像的2d-3d点对,以及用户设备的相对位姿计算用户设备的位姿。
[0206]
用户设备的相对位姿,是指,用户设备的前置摄像头和后置摄像头之间的相对位姿,具体的,可以是用户设备的前置摄像头相对于后置摄像头的相对位姿,即用户设备的前置摄像头在后置摄像头的相机坐标系下的位姿,也可以是用户设备的后置摄像头相对于前
置摄像头的相对位姿。下文以用户设备的前置摄像头相对于后置摄像头的相对位姿为例进行说明。
[0207]
和采集设备相似,用户设备的相对位姿,属于预先标定的用户设备的参数的一部分,即用户设备出厂前厂商就通过多种测试手段标定了用户设备的相对位姿并将用户设备的相对位姿写入用户设备的存储器中,在步骤s306中,可以直接从用户设备上获得标定的相对位姿。
[0208]
获得前置图像的2d-3d点对之后,可以采用视觉定位等相关技术领域中任意一种计算设备位姿的算法,计算得到用户设备前置摄像头的位姿;同理可以用相同的算法根据后置图像的2d-3d点对计算得到用户设备后置摄像头的位姿。作为示例,采用的算法可以是n点透视(perspective-n-point,pnp)方法,高效n点透视(efficient perspective-n-point,epnp)方法,3点透视(perspective-3-point,p3p)方法等,本实施例对具体使用的算法不做限定。
[0209]
下面以p3p算法为例,说明步骤s306的一种可选的具体实施方式。请参见图6,步骤s306的具体实施方式可以包括如下步骤:
[0210]
s601,选择多个前置图像和后置图像的2d-3d点对加载。
[0211]
由于本实施例中所用的算法为p3p算法,步骤s601中,可以分别选择前置图像的3个未被加载过的2d-3d点对,以及选择后置图像的3个未被加载过的2d-3d点对。
[0212]
其中前置图像的2d-3d点对用于计算用户设备前置摄像头的位姿估计值,后置图像的2d-3d点对用于计算用户设备后置摄像头的位姿估计值。
[0213]
作为示例,步骤s601中选取的后置图像的3个2d-3d点对可以记为:
[0214]
a1(a1u,a1v),a(axw,ayw,azw);
[0215]
b1(b1u,b1v),b(bxw,byw,bzw);
[0216]
c1(c1u,c1v),c(cxw,cyw,czw);
[0217]
其中,a1,b1和c1为后置图像上的三个像素点,像素点的坐标为图像上的像素坐标,例如,a1(alu,alv),表示像素点a1是后置图像上第alu列,第alv行的像素点。a,b和c为投影出这三个像素点的空间点,空间点的坐标为世界坐标系下的坐标。
[0218]
s602,计算2d-3d点对中空间点在对应摄像头的相机坐标系的坐标。
[0219]
在步骤s602对后置图像的2d-3d点对和前置图像的2d-3d点对分别执行。即,根据前置图像的2d-3d点对,计算得到其中的空间点在前置摄像头的相机坐标系的坐标;根据后置图像的2d-3d点对,计算得到其中的空间点在后置摄像头的相机坐标系的坐标。
[0220]
结合步骤s601的示例,说明计算空间点在相机坐标系中坐标的方法。
[0221]
将后置摄像头的相机坐标系的原点,即后置摄像头的光心记为o,根据余弦定理可以确定如下方程组(5):
[0222]
oa2+ob
2-20a
·
ob
·
cos《a,b》=ab2[0223]
oa2+oc
2-2oa
·
oc
·
cos《a,c》=ac2[0224]
ob2+oc
2-2ob
·
oc
·
cos《b,c》=bc2[0225]
方程组(5)中,oa,ob和oc依次表示原点o到空间点a,b和c的距离,ab,ac和bc则表示空间点a,b和c两两之间的距离,cos《a,b》表示角aob的余弦值,cos《a,c》表示角aoc的余弦值,cos《b,c》表示角boc的余弦值。
[0226]
方程组(5)可以变形为如下方程组(6):
[0227]
式(1):x2+y
2-2x
·y·
cos《a,b》=u
[0228]
式(2):x2+1-2x
·
cos《a,c》=wu
[0229]
式(3):y2+1-2y
·
cos《b,c》=vu
[0230]
其中:
[0231][0232]
将方程组(6)化简可以得到如下方程组(7):
[0233]
(1-w)x
2-w
·y2-2x
·
cos《a,c》+2w
·
x
·y·
cos《a,b》+1=0
[0234]
(1-v)y
2-v
·
x
2-2y
·
cos《b,c》+2v
·
x
·y·
cos《a,b》+1=0
[0235]
方程组(7)中,x和y为未知量,其他参数u,w,cos《a,b》,cos《a,c》,cos《b,c》均可以根据加载的2d-3d点对中像素点a1,b1和c1的像素坐标,以及空间点a,b和c在世界坐标系的坐标计算得到,因此,可以求解方程组(7),得到x和y。
[0236]
方程组(7)可以用任意一种相关技术中任意一种二元二次方程组的机械化算法求解,本实施例对具体的求解方法不做限定。示例性的,可以采用吴消元法求解方程组(7)从而获得x和y。
[0237]
获得x和y后,代入方程组(6)的式1,可以计算出u,进而计算得到oc,再结合x和y的定义,可以计算得到oa和ob,即获得空间点a,b和c与后置摄像头的相机坐标系原点o的距离。
[0238]
由于a1,b1和c1分别相当于a,b和c在后置摄像头的成像平面上的投影,所以o,a1和a三点共线;o,b1和b三点共线;o,c1和c三点共线,在知道空间点a,b和c和原点o的距离的基础上,容易计算出a,b和c三点在后置摄像头的相机坐标系下的坐标。
[0239]
在实际应用中,可以先根据加载好的2d-3d点对计算方程组(7)中除x和y以外的参数,然后将这些参数输入到预先配置的方程组(7)的求解程序中解出x和y,进而计算得到2d-3d点对中空间点a,b和c在对应摄像头的相机坐标系下的坐标。
[0240]
s603,根据空间点在相机坐标系的坐标和在世界坐标系的坐标,计算用户设备的位姿估计值。
[0241]
对于任意一个空间点,空间点在摄像头的相机坐标系下的坐标(xc,yc,zc),空间点在世界坐标系下的坐标(xw,yw,zw)和摄像头在世界坐标系下的位姿三者之间满足关系:
[0242][0243]
其中,r就是摄像头的旋转矩阵,t就是摄像头的平移矩阵,r和t就是摄像头在世界坐标系的位姿。
[0244]
因此,对于用户设备的前置摄像头,在s602中获得了多个空间点在前置摄像头的相机坐标系的坐标之后,可以利用上述关系求解用户设备的前置摄像头在世界坐标系的位姿估计值,同理可以用s602中获得的多个空间点在后置摄像头的相机坐标系的坐标,求解用户设备的后置摄像头在世界坐标系的位姿估计值。
[0245]
为了便于说明,用户设备的前置摄像头的位姿估计值可以用旋转矩阵估计值
rfront-test和平移矩阵估计值tfront-test表示,用户设备的后置摄像头的位姿估计值可以用旋转矩阵估计值rback-test和平移矩阵估计值tback-test表示。
[0246]
在一些可选的实施例中,执行s603时可以选择多组空间点,每一组空间点可以用于求解得到一个用户设备的位姿估计值,然后选取其中相对位姿误差最小的位姿估计值作为步骤s603中输出的位姿估计值。
[0247]
步骤s602和s603,可以视为本实施例中p3p算法的具体实施过程。
[0248]
s604,用非线性优化方法优化用户设备的位姿估计值。
[0249]
非线性优化算法,是指,针对被优化对象,设定一个与被优化对象相关的优化函数,每次获得被优化对象后,基于被优化对象计算对应的优化函数值,如果优化函数值未满足设定的优化结束条件,例如不小于或者不大于设定的优化阈值,则计算新的被优化对象,如此循环,当某一次优化函数满足优化结束条件时,即输出当时的优化对象。
[0250]
在本实施例中,优化对象为用户设备前置摄像头的位姿估计值,以及后置摄像头的位姿估计值。
[0251]
优化函数则至少包括用户设备的相对位姿误差。用户设备的相对位姿误差,是指,根据前置摄像头的位姿估计值和后置摄像头的位姿估计值,计算得到的用户设备的前后置摄像头之间的相对位姿估计值,与用户设备中预先标定好的前后置摄像头的相对位姿之间的误差。
[0252]
优化结束条件为,使优化函数最小化。
[0253]
可见,在步骤s604中,可以以用户设备的相对位姿误差最小化,也就是以用户设备的相对位姿估计值尽可能接近用户设备标定好的相对位姿为目标,不断调整用户设备的位姿估计值,直至用户设备的相对位姿估计值最大程度地接近用户设备标定好的相对位姿为止。
[0254]
换言之,在本实施例优化用户设备的位姿估计值的过程中,引入了标定好的用户设备的相对位姿作为优化的约束条件。
[0255]
用户设备的前后置摄像头之间的相对位姿估计值,可以用相对旋转矩阵估计值rfb-test和相对平移矩阵估计值tfb-test表示,对应的,用户设备中标定好的相对位姿可以用用户设备的相对旋转矩阵rfb-user和用户设备的相对平移矩阵tfb-user表示。
[0256]
用户设备的相对位姿误差,可以包括用户设备的角度误差和用户设备的平移误差。
[0257]
其中,用户设备的角度误差angle-u-err可以按如下公式(8)计算:
[0258][0259]
公式(8)中,tr(rfb-user)表示用户设备的相对旋转矩阵rfb-user的迹。
[0260]
用户设备的平移误差t-u-err可以按如下公式(9)计算:
[0261][0262]
公式(8)和(9)中各符号的含义可以参见前述公式(3)。
[0263]
在一些可选的示例中,用户设备的前后置摄像头之间的相对位姿估计值,可以是用户设备的前置摄像头在后置摄像头的相机坐标系下的位姿估计值,用户设备中标定的相
对位姿可以是用户设备的前置摄像头在后置摄像头的相机坐标系下的位姿估计值。
[0264]
本示例中,相对位姿估计值可以按如下公式(10)计算:
[0265][0266]
其中:
[0267][0268][0269]
公式(10)中符号的含义可以参见前述公式(2)不再赘述。
[0270]
在又一些可选的示例中,用户设备的前后置摄像头之间的相对位姿估计值,也可以是用户设备的后置摄像头在前置摄像头的相机坐标系下的位姿估计值,用户设备中标定的相对位姿可以是用户设备的后置摄像头在前置摄像头的相机坐标系下的位姿估计值。计算方法可以刹那间公式(10),不再赘述。
[0271]
步骤s604中,优化函数可以为角度误差与平移误差之和,也可以为角度误差,平移误差以及其他可选的误差之和,本实施例对除角度误差和平移误差以外的其他误差不做限定。
[0272]
步骤s604中的非线性优化方法,可以是相关技术领域中的任意一种非线性优化方法,本实施例对具体使用的非线性优化方法不做限定。
[0273]
作为一个示例,在步骤s604中可以基于集束调整(bundle adjustment,ba)方法来优化步骤s603中计算的用户设备的位姿估计值,也即优化用户设备的前置摄像头的位姿估计值,以及后置摄像头的位姿估计值。
[0274]
下面以ba方法为例说明步骤s604的一种可选的实现方式:
[0275]
步骤a,获得s603中计算的用户设备前置摄像头的位姿估计值和后置摄像头的位姿估计值。
[0276]
步骤b,分别计算用户设备的平移误差t-u-err,用户设备的角度误差angle-u-err,前置图像的重投影误差(可以记为re-front-error)和后置图像的重投影误差(可以记为re-back-error)。
[0277]
用户设备的角度误差和平移误差的计算方法请参见前述公式(8)和(9)。
[0278]
步骤c,确定优化函数是否满足优化结束条件。
[0279]
优化函数,为步骤b中用户设备的平移误差,用户设备的角度误差,前置摄像头的重投影误差和后置摄像头的重投影误差之和,即优化函数target为:
[0280]
target=re-back-error+re-front-error+angle-u-err+t-u-err
[0281]
重投影误差。根据当前的摄像头位姿的估计值,将2d-3d点对中的空间点再次投影到摄像头的成像平面,即再次投影到对应的图像中,得到重投影像素点,重投影像素点在图像的坐标和2d-3d点对中像素点在图像的坐标之间的偏差,就是当前的摄像头位姿的估计值的重投影误差。
[0282]
结合前述示例,将点对(a1,a),(b1,b),(c1,c)中的空间点a,b和c根据后置摄像头的位姿估计值重新投影到后置图像上,可以得到对应的重投影像素点a1’,b1’和c1’。a1’和a1的坐标的偏差,b1’和b1的坐标的偏差,以及c1’和c1的坐标的偏差之和,可以视为后置摄
像头的重投影误差。
[0283]
如前所述,优化结束条件为,使优化函数最小化。
[0284]
在一些可选的实施例中,该优化结束条件具体可以表现为,步骤c中算出的优化函数的值小于预设的优化阈值。
[0285]
在另一些可选的实施例中,该优化结束条件具体可以表现为,本次执行步骤c时算出的优化函数的值,和前一次执行步骤c时算出的优化函数的值,两者之间的偏差小于预设的优化阈值。
[0286]
具体选用哪一种优化结束条件可以根据实际情况决定,本实施例对此不作限定。
[0287]
步骤d,再次执行步骤s601至s603,获得新的前置摄像头的位姿估计值和新的后置摄像头的位姿估计值后,再次执行步骤a。
[0288]
在步骤d中,当再次执行步骤s601至s603时,可以加载与前一次执行时不同的2d-3d点对,从而计算出新的前后置摄像头的位姿估计值。
[0289]
也就是说,在步骤s305中,通过比对图像特征,可以匹配得到前置图像的多个2d-3d点对,以及后置图像的多个2d-3d点对,每次执行步骤s601至s603时,可以只加载其中的一部分2d-3d点对,下次再执行步骤s601至s603时,再加载另外的2d-3d点对。
[0290]
结合前述示例,首次执行步骤s601至s603时,根据后置图像的点对(a1,a),(b1,b),(c1,c)计算得到用户设备后置摄像头的位姿估计值,当在步骤d中再次执行步骤s601至s603时,则可以加载不同的2d-3d点对,如加载后置图像的(d1,d),(e1,e),(f1,f)来计算得到新的用户设备后置摄像头的位姿估计值。
[0291]
步骤e,结束优化方法。
[0292]
s605,将用户设备的位姿估计值确定为用户设备的位姿。
[0293]
优化结束后,当前的用户设备的位姿的估计值,就可以视为当前的用户设备的位姿,也就是拍摄前置图像和后置图像时,用户设备的前置摄像头的位姿,和后置摄像头的位姿。
[0294]
本技术实施例所提供的视觉定位方法,具有如下的有益效果:
[0295]
第一方面,用户设备进行视觉定位时,同时用前置摄像头和后置摄像头拍摄了前置图像和后置图像,扩大了视觉定位时用户设备的视野,使用户设备获得所在场景中更多的图像信息。
[0296]
第二方面,在缺乏显著的图像特征的场景中,例如室内的白墙场景,室外的海边场景等场景中,有助于提高视觉定位结果的准确度。在缺乏显著的图像特征的场景中,通过提取图像特征和比对图像特征,只能在用户设备拍摄的图像中确定出较少的2d-3d点对,而2d-3d点对的数量过少对视觉定位结果的准确度有负面影响。本实施例中,与仅拍摄后置图像相比,同时拍摄前置图像和后置图像显然能增加确定出的2d-3d点对的数量,从而有助于提高视觉定位结果的准确度。
[0297]
视觉定位结果,相当于步骤s605中确定的用户设备的位姿,也就是用户设备的前置摄像头的位姿和后置摄像头的位姿。
[0298]
第三方面,引入标定好的用户设备的相对位姿作为视觉定位的约束条件(参见步骤s604),也有助于提高视觉定位结果的准确度。和采集设备类似的,对于用户设备同时用自身的前后置摄像头拍摄到的前置图像和后置图像,如果基于这两帧图像计算得到的前置
摄像头的位姿估计值和后置摄像头的位姿估计值,与拍摄时前后置摄像头的真实位姿一致,则用前置摄像头的位姿估计值和后置摄像头的位姿估计值计算出的相对位姿估计值,也应该和用户设备中预先标定的真实的相对位姿一致。可见,相对位姿估计值越接近用户设备标定的相对位姿,则计算出的前后置摄像头的位姿估计值越准确,反之,相对位姿估计值越偏离用户设备标定的相对位姿,则计算出的前后置摄像头的位姿估计值越不准确。所以在传统的视觉定位方法的基础上引入用户设备的相对位姿这一约束,有助于加强约束条件,从而提高视觉定位结果的准确度。
[0299]
本实施例所提供的视觉定位方法,可以在用户设备开启需要视觉定位的功能后实时执行。结合图2的示例,用户设备开启ar功能后,通过后置摄像头和前置摄像头实时拍摄得到后置图像和前置图像,其中后置图像在屏幕上显示,前置图像则不在屏幕显示。每完成一次拍摄,用户设备就基于拍摄得到的后置图像和前置图像确定调用图3所示的视觉定位方法,从而获得本次拍摄时用户设备的位姿,以便根据其中后置摄像头的位姿确定屏幕上特定实物图像的位置。
[0300]
实时执行视觉定位方法的好处在于,实时确定用户设备当前的位姿,保障用户设备上需要视觉定位的相关功能准确实现,改善用户的使用体验。
[0301]
在一些可选的实施例中,也可以间隔一定时间执行一次,例如每隔2秒确定一次用户设备的位姿。结合图2的示例,用户设备的ar功能开启后,每隔2秒,用户设备就通过后置摄像头和前置摄像头同时进行一次拍摄,得到后置图像和前置图像,然后基于拍摄得到的后置图像和前置图像确定调用视觉定位方法确定本次拍摄时用户设备的位姿,此时,用户设备可以根据最近一次确定的用户设备的位姿来确定屏幕上实物图像的位置。
[0302]
间隔一定时间执行一次视觉定位方法的好处在于,可以降低用户设备的耗电量,延长用户设备的使用时间。
[0303]
以上实施方式仅为本技术的视觉定位方法的一些可选的实施方式,实际应用中实施方式可以按需调整,本技术对视觉定位方法的具体实施方式不做限定。
[0304]
本技术提供的视觉定位方法,主要可以由采用应用程序虚拟化技术的软件平台(例如云端)来执行,用户设备通过向云端发送请求的方式来触发云端执行视觉定位方法,云端执行完毕后,再将计算得到的用户设备的位姿反馈回用户设备。
[0305]
请参见图7,为本技术实施例提供的用户设备和云端的交互示意图。
[0306]
s701,用户设备拍摄前置图像和后置图像。
[0307]
步骤s701的实施方式可以参见图3所示的实施例中的步骤s301a和s301b,此处不再赘述。
[0308]
s702,云端检索候选帧。
[0309]
在s702中,用户设备可以将拍摄的前置图像和后置图像上传给云端,云端根据上传的前置图像和后置图像执行步骤s702。
[0310]
步骤s702的具体实施方式可以参见图3所示的实施例的步骤s302a和s302b,此处不再赘述。
[0311]
如前所述,检索候选帧时需要找到用户设备当前所在的场景的离线地图。本实施例中,用户设备在向云端上传前置图像和后置图像时,可以将自身的定位信息一并上传到云端,云端根据定位信息即可确定用户设备当前所在的场景,从而在多个离线地图中找到
用户设备当前所在的场景的离线地图。例如用户设备在商场a内进行视觉定位,则云端可以根据定位信息找到商场a的离线地图。
[0312]
s703,云端将候选帧重排序。
[0313]
在步骤s703中,云端可以根据前置候选帧和后置候选帧的拍摄时间是否相同,确定出多个图像组合,然后从离线地图中读取出每一个前置候选帧和每一个后置候选帧的位姿,以及读取出采集设备的前置摄像头和后置摄像头之间的相对位姿,基于这些数据计算每一个图像组合的相对位姿误差,最终按相对位姿误差从小到大对候选帧排序,即相对位姿误差较小的图像组合中的候选帧排序靠前,相对位姿误差较大的图像组合中的候选帧排序靠后。
[0314]
步骤s703的具体实施过程可以参见图3所示的实施例的步骤s303,此处不再赘述。
[0315]
s704,云端提取图像特征。
[0316]
云端调用图像特征提取算法,分别提取前置图像的,前置候选帧,后置图像和后置候选帧的图像特征,图像特征提取算法可以是sift方法,也可以是其他方法,本实施例对此不作限定。
[0317]
步骤s704的具体实施过程可以参见图3所示的实施例的步骤s304a和s304b。
[0318]
s705,云端匹配图像特征,以确定2d-3d点对。
[0319]
云端将前置图像的图像特征和前置候选帧的图像特征做比对,从而确定前置图像和前置候选帧中相互匹配的像素点,然后将前置候选帧中像素点的投影关系,确定为前置图像中相匹配的像素点的投影关系,由此得到前置图像的2d-3d点对。
[0320]
同理,云端将后置图像的图像特征和后置候选帧的图像特征做比对,从而确定后置图像和后置候选帧中相互匹配的像素点,然后将后置候选帧中像素点的投影关系,确定为后置图像中相匹配的像素点的投影关系,由此得到后置图像的2d-3d点对。
[0321]
步骤s705的具体实施方式可以参见图3所示的实施例的步骤s305a和s305b。
[0322]
s706,云端根据2d-3d点对计算用户设备的位姿。
[0323]
云端根据前置图像的2d-3d点对,计算用户设备的前置摄像头的位姿估计值,根据后置图像的2d-3d点对,计算用户设备的后置摄像头的位姿估计值,然后以用户设备的相对位姿误差最小化为目标优化前置摄像头的位姿估计值和后置摄像头的位姿估计值,最终确定拍摄前置图像和后置图像时用户设备的位姿,即此时用户设备的前置摄像头的位姿和后置摄像头的位姿。
[0324]
步骤s706的具体实施方式可以参见图3所示的实施例的步骤s306,此处不再赘述。
[0325]
参见图7,云端计算出用户设备的位姿后,将用户设备的位姿反馈给用户设备,具体的,云端可以将用户设备的前置摄像头的位姿,以及后置摄像头的位姿反馈给用户设备。由此,用户设备通过本实施例的视觉定位方法获得了自身的位姿。
[0326]
本实施例的好处在于,一方面用户设备不需要存储离线地图,节约了用户设备的存储空间,另一方面,云端相对于用户设备具有更高的处理速度,因此能更快的计算出用户设备的位姿,提高视觉定位方法的效率。
[0327]
本技术对视觉定位方法中各个步骤的执行主体不做限定。在一些可选的实施例中,视觉定位方法也可以完全由用户设备执行。换言之,在用户设备的性能允许的前提下,用户设备也可以预先从云端下载所在场景的离线地图,例如进入商场a时,用户设备预先向
云端发送自身的定位信息,云端根据定位信息找到对应场景,即商场a的离线地图,随后用户设备可以下载云端的商场a的离线地图,然后根据商场a的离线地图执行如图3所示的实施例中的各个步骤,从而获得用户设备自身的位姿。
[0328]
这样做好处在于,可以避免网络质量对视觉定位过程的影响,即使在相应场景中用户设备的网络质量差或者完全没有网络连接,也可以顺利通过视觉定位方法确定自身的位姿。
[0329]
根据上述用户界面以及对应的实施过程,可以得到一种视觉定位方法,请参见图8,本实施例的视觉定位方法可以包括如下步骤:
[0330]
s801,获得前置图像和后置图像。
[0331]
前置图像为第一设备的前置摄像头拍摄的图像,后置图像为第一设备的后置摄像头拍摄的图像。
[0332]
第一设备可以理解为图3所示的实施例中的用户设备,例如可以视为进入某商场的用户所使用的智能手机。
[0333]
步骤s801的具体实施方式可以参见图3所示的实施例的步骤s301a和s301b。
[0334]
s802,在离线地图中查找得到与前置图像相似的前置候选帧,以及与后置图像相似的后置候选帧。
[0335]
离线地图包括第二设备拍摄的多帧图像。第二设备可以理解为图3所示的实施例中的采集设备。
[0336]
s802的具体实施方式可以参见图3所示的实施例的步骤s302a和s302b。
[0337]
s803,根据前置候选帧确定前置图像的点对,并根据后置候选帧确定后置图像的点对。
[0338]
前置图像的点对包括前置图像的像素点和投影出前置图像的像素点的空间点,后置图像的点对包括后置图像的像素点和投影出后置图像的像素点的空间点。
[0339]
步骤s803中前置图像的点对,就是图3所示的实施例中前置图像的2d-3d点对,后置图像的点对,即图3所示的实施例中后置图像的2d-3d点对。
[0340]
s803的具体实施过程可以参见图3所示的实施例的步骤s304a,s304b,s305a和s305b。
[0341]
在一些可选的实施例中,在执行s803之后,执行s804之前,可以先对前置候选帧和后置候选帧重排序,即:
[0342]
识别出前置候选帧和后置候选帧中的图像组合,图像组合包括第二设备同时拍摄的一帧前置候选帧和一帧后置候选帧;
[0343]
针对每一个图像组合,计算图像组合的相对位姿误差,图像组合的相对位姿误差,为图像组合的前置候选帧和后置候选帧的相对位姿,与第二设备的相对位姿的误差,第二设备的相对位姿,为预先标定的第二设备的前置摄像头和后置摄像头的相对位姿;
[0344]
按对应的相对位姿误差从小到大的顺序将图像组合重新排序。
[0345]
以上重排序步骤的具体实施过程,可以参见图3所示的实施例的步骤s303。
[0346]
s804,根据前置图像的点对,后置图像的点对,以及第一设备的相对位姿,确定第一设备的位姿。
[0347]
第一设备的位姿,相当于图3所示的实施例中,用户设备的前置摄像头的位姿,以
及用户设备的后置摄像头的位姿。
[0348]
第一设备的相对位姿为第一设备的前置摄像头和第一设备的后置摄像头的相对位姿。
[0349]
步骤s804的具体实施过程可以参见图3所示的实施例的步骤s306。
[0350]
本实施例的有益效果可以参见前述实施例,不再赘述。
[0351]
本技术实施例提供一种电子设备,包括存储器和一个或多个处理器。
[0352]
存储器用于存储计算机程序。
[0353]
一个或多个处理器用于执行计算机程序,具体用于实现本技术任一实施例所提供的视觉定位的方法。
[0354]
上述电子设备可以是用户设备,如用户使用的智能手机,也可以是云端的服务器。
[0355]
本技术实施例还提供一种计算机存储介质,用于存储计算机程序,该计算机程序被执行时,具体用于实现本技术任一实施例所提供的视觉定位的方法。
[0356]
在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
[0357]
本技术实施例涉及的多个,是指大于或等于两个。需要说明的是,在本技术实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1