一种通过检测和标定恢复单目SLAM尺度的方法及***
技术领域
本发明涉及计算机视觉的技术领域,尤其涉及一种通过检测和标定恢复单目SLAM尺度的方法及***。
背景技术
单目SLAM是指用一个摄像头进行SLAM的方法,单目相机的数据就是照片,照片就是拍照时的场景在相机的成像平面上留下的一个投影,它以二维的形式反映了三维的世界,在这个过程中丢掉了一个维度,无法通过单张照片计算场景中物体的距离,因此必须要进行尺度恢复。
目前可以通过相机的高度和道路的信息恢复尺度,现有的尺度恢复技术依赖于路标识别和道路几何模型计算的精度,计算复杂且量大,有待改进。
发明内容
本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
鉴于上述现有存在的问题,提出了本发明。
因此,本发明解决的一个技术问题是:提出一种通过检测和标定恢复单目SLAM尺度的方法,能够减小尺度恢复时的计算量和算法的复杂度。
为解决上述技术问题,本发明提供如下技术方案:一种通过检测和标定恢复单目SLAM尺度的方法,包括以下步骤,通过标定模块对相机进行标定;计算模块计算出在平面上的点距相机的深度;检测模块基于深度学习进行标志物的检测;尺度恢复模块进行SLAM后端优化,得到单目SLAM的尺度。
作为本发明所述的通过检测和标定恢复单目SLAM尺度的方法的一种优选方案,其中:一种通过检测和标定恢复单目SLAM尺度的方法,其特征在于:包括以下步骤,通过标定模块对相机进行标定;计算模块计算出在平面上的点距相机的深度;检测模块基于深度学习进行标志物的检测;尺度恢复模块进行SLAM后端优化,得到单目SLAM的尺度。
作为本发明所述的通过检测和标定恢复单目SLAM尺度的方法的一种优选方案,其中:所述计算模块通过透视变换进行深度计算,透视变换是将图片投影到一个新的视平面,从二维到三维(X,Y,Z),再到另一个二维(x’,y’)空间的映射。
作为本发明所述的通过检测和标定恢复单目SLAM尺度的方法的一种优选方案,其中:所述透视变换的公式如下,
作为本发明所述的通过检测和标定恢复单目SLAM尺度的方法的一种优选方案,其中:所述标志物的检测还包括以下步骤,选择一张图画作为标志物;基于深度学习检测算法检测标志物的四个角的像素坐标。
作为本发明所述的通过检测和标定恢复单目SLAM尺度的方法的一种优选方案,其中:所述深度学习检测算法为YOLO算法。
作为本发明所述的通过检测和标定恢复单目SLAM尺度的方法的一种优选方案,其中:所述深度学习检测算法进一步包括以下步骤,对标志物进行图像采集,构成深度学习的训练集。
作为本发明所述的通过检测和标定恢复单目SLAM尺度的方法的一种优选方案,其中:所述尺度恢复还包括以下步骤,对经过标定的相机运行ORB_SLAM2算法,通过特征点匹配得到一个单位不确定的尺度s;当检测到标记物时,通过深度学习检测算法得到标记物4个点的像素坐标;通过透视变换得到标记物4个点的深度;在SLAM算法中通过同一张图片中二维像素坐标位置询这4个点在SLAM算法中的相机坐标系下的值得到一个尺度的初值;通过高斯牛顿非线性优化的方法得到SLAM算法中的尺度在真实世界中的单位。
作为本发明所述的通过检测和标定恢复单目SLAM尺度的方法的一种优选方案,其中:所述高斯牛顿非线性优化的方法包括,给定初始值x0;对于第k次迭代,求出当前的雅克比矩阵J(xk)和误差f(xk)求增量方程:HΔxk=g;如Δxk足够小,则停止,否则,令xk+1=xk+Δxk,返回上述步骤。
本发明解决的另一个技术问题是:提供一种通过检测和标定恢复单目SLAM尺度的***,使上述方法能够依托于该***实现。
为解决上述技术问题,本发明提供如下技术方案:一种通过检测和标定恢复单目SLAM尺度的***,包括,标定模块,所述标定模块用于对相机进行标定;计算模块,所述计算模块用于计算平面上的点距相机的深度;检测模块,所述检测模块能够进行标志物的检测;尺度恢复模块,所述尺度恢复模块用于进行单目SLAM尺度的恢复。
本发明的有益效果:本发明采用标定和检测的方法进行尺度恢复,只需要在SLAM运行后在道路上摆放一个预先设定的标志物,无需采集稠密的点就可以恢复尺度,其算法的计算量和复杂度均大大减小。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。其中:
图1为本发明第一种实施例所述通过检测和标定恢复单目SLAM尺度的方法的整体流程结构示意图;
图2为本发明第一种实施例中相机标定的参数及其关系示意图;
图3为本发明第一种实施例中透视变换后的结果示意图;
图4为本发明第一种实施例中选择的棋盘格标志物示意图;
图5为本发明第一种实施例中YOLO网络的示意图;
图6为本发明第二种实施例所述通过检测和标定恢复单目SLAM尺度的整体结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明,显然所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护的范围。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。
本发明结合示意图进行详细描述,在详述本发明实施例时,为便于说明,表示器件结构的剖面图会不依一般比例作局部放大,而且所述示意图只是示例,其在此不应限制本发明保护的范围。此外,在实际制作中应包含长度、宽度及深度的三维空间尺寸。
同时在本发明的描述中,需要说明的是,术语中的“上、下、内和外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一、第二或第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
本发明中除非另有明确的规定和限定,术语“安装、相连、连接”应做广义理解,例如:可以是固定连接、可拆卸连接或一体式连接;同样可以是机械连接、电连接或直接连接,也可以通过中间媒介间接相连,也可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
实施例1
参照图1的示意,示意为本实施例中提出的一种通过检测和标定恢复单目SLAM尺度的方法,为了解决现有技术中单目SLAM尺度恢复方法复杂、操作和计算量大的问题,本实施例中提出通过标定和检测的方法进行单目SLAM尺度恢复,减小计算量和复杂度,使单目SLAM尺度恢复更容易实现。
更加具体的,本实施例提出的通过检测和标定恢复单目SLAM尺度的方法,包括以下步骤,
S1:通过标定模块100对相机进行标定;
其中,相机标定可以选用针孔相机模型,并利用张友正相机标定方法进行标定。具体的,参照图2的示意,标定还包括以下步骤,
获取标定板;
移动相机拍摄标定板各个角度的图片;
检测图片中的特征点;
计算出相机的内参K和畸变D,其中,
K=[fx cx fy cy]
D=[k1 k2 k3 p1 p2]
S2:计算模块200计算出在平面上的点距相机的深度;
其中,计算模块200通过透视变换进行深度计算,透视变换是将图片投影到一个新的视平面,从二维(x,y)到三维(X,Y,Z),再到另一个二维(x’,y’)空间的映射。具体的,其公式如下所示,
其中,变换之后的结果参照图3的示意。
S3:检测模块300基于深度学习进行标志物的检测;
具体的,标志物的检测还包括以下步骤,
选择一张图画作为标志物;参照图4所示,该标志物可以为相机标定时所使用的棋盘格。
基于深度学习检测算法检测标志物的四个角的像素坐标。其中,参照图4的示意,深度学习检测算法为YOLO算法,YOLO算法为开源算法,其具有速度快,对目标的检测准确率高的特点,在本实施例中,YOLO算法能够检测出当前画面中矩阵标志物的四个角的像素坐标。
该算法检测还包括以下步骤,
对标志物进行图像采集,构成深度学习的训练集;其采集的方法可以为将标志物摆在地面上,从前后左右、上下等多个方向进行采集,且每个方向采集50张图片为深度学习算法的训练集。
S4:尺度恢复模块400进行SLAM后端优化,得到单目SLAM的尺度。
具体的,尺度恢复还包括以下步骤,
对经过标定的相机运行ORB_SLAM2算法,通过特征点匹配得到一个单位不确定的尺度s;其中,参照图5的示意,ORB_SLAM2算法的框架如图5所示。
当检测到标记物时,通过深度学习检测算法得到标记物4个点的像素坐标;
通过透视变换得到标记物4个点的深度;
在SLAM算法中通过同一张图片中二维像素坐标位置询这4个点在SLAM算法中的相机坐标系下的值得到一个尺度的初值;
通过高斯牛顿非线性优化的方法得到SLAM算法中的尺度在真实世界中的单位。
其中,高斯牛顿非线性优化的方法包括,给定初始值x0;对于第k次迭代,求出当前的雅克比矩阵J(xk)和误差f(xk)求增量方程:HΔxk=g;如Δxk足够小,则停止,否则,令xk+1=xk+Δxk,返回上述步骤。
为对本方法中采用的技术效果加以验证说明,本实施例采用DPM,R-CNN,Fast R-CNN以及Faster R-CNN算法与本发明方法进行对比测试,以科学论证的手段对比试验结果,以验证本方法所具有的真实效果。
在实验中,Yolo算法在PASCAL VOC 2007数据集上的性能,本实施例Yolo与其它检测算法做了对比,包括DPM,R-CNN,Fast R-CNN以及Faster R-CNN,其对比结果如表1所示,与实时性检测方法DPM对比,可以看到Yolo算法可以在较高的mAP上达到较快的检测速度,其中Fast Yolo算法比快速DPM还快,而且mAP是远高于DPM,但是相比Faster R-CNN,Yolo的mAP稍低,但是速度更快。
表1:试验效果对比表。
实施例2
参照图6的示意,为实现上述通过检测和标定恢复单目SLAM尺度的方法,本实施例中提出一种通过检测和标定恢复单目SLAM尺度的***。具体的,该***包括标定模块100、计算模块200、检测模块300和尺度恢复模块400。其中,标定模块100用于对相机进行标定;计算模块200用于计算平面上的点距相机的深度;检测模块300能够进行标志物的检测;尺度恢复模块400用于进行单目SLAM尺度的恢复。
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机***通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机***的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。