一种基于单目相机进行稠密建图的方法

文档序号:27617526发布日期:2021-11-29 13:34阅读:240来源:国知局
一种基于单目相机进行稠密建图的方法

1.本发明涉及计算机图像信息技术领域,具体涉及一种基于单目相机进行稠密建图的方法。


背景技术:

2.当一个设备在空间要求具有导航和避障等功能时,它就需要用相机建立起稠密或半稠密地图,即获得视频中每个像素对应的空间点坐标。这其中最重要的就是获得点的深度(空间点到相机光心的距离)。目前主流的建图方法采用rgbd相机和双目相机。
3.采用双目相机进行稠密建图之前,需要对双目相机进行标定和配置,较为复杂。测量范围受基线长度影响。深度计算复杂,在特殊情况下视差图并不会生成。
4.采用rgbd相机进行稠密建图的原理是通过“结构光”或“飞行时间”来测量深度。rgbd相机发射红外光到物体上,红外光再被物体反射回来。“结构光”原理通过检测反射的红外光结构发生的变化来确定深度,“飞行时间”则是通过检测发送到接收的时间来计算深度,红外光会受到日光的干扰,在户外使用时,稠密地图十分粗糙以致于不能使用,另外,由于rgbd利用时间的特性和红外光穿透能力强的特性,所以不适用于对运动物体和透射材质的测量。


技术实现要素:

5.本发明的目的是针对现有稠密建图中,rgbd相机易受日光干扰、视场小,双目相机标定复杂、算力消耗大、成本高的缺点,而提供一种基于单目相机进行稠密建图的方法。
6.为实现上述目的,本发明采用如下技术方案:一种基于单目相机进行稠密建图的方法,包括:第一步,将单目相机拍摄下的一段视频,以灰度图的形式读取第一帧图像,先以第一帧为参考帧,初始化深度滤波器的深度均值和深度方差;第二步,梯度剔除;以灰度图的形式读取第二帧图像,遍历参考帧上的每个像素块,计算每个像素块的灰度梯度,如果某个像素块的梯度的2范数小于设定的阈值,则剔除该像素块;第三步,深度剔除;遍历参考帧上经梯度剔除余下的其他像素块,读取深度滤波器存储的每个像素块的深度方差值,如果某个像素块的深度方差小于设定的最小方差或大于设定的最大方差,说明该像素块的深度已收敛或发散,则剔除该像素块;第四步,遍历第二帧图像上的像素块,用极线搜索方法查找每个像素块与所述参考帧上经第二、第三步剔除后余下像素块对应的位置;如果查找到参考帧上某个像素块在当前第二帧对应的位置,则通过三角化方法求出参考帧上该像素块的深度均值和深度方差,并将该深度均值和深度方差存入深度滤波器中,用于更新深度滤波器,对查找到的参考帧与当前第二帧有对应位置的所有像素块重复该步骤,直到每个像素块的深度都收敛;通过传感器得到当前相机在世界坐标系的位姿twc,通过该位姿twc的逆乘上参考帧在世界坐
标系的位姿twr,得到参考帧到当前第二帧的位姿tcr;第五步,以灰度图的形式读取第三帧图像,遍历参考帧上经梯度剔除余下的其他像素块,读取深度滤波器存储的每个像素块的深度方差值,如果某个像素块的深度方差小于设定的最小方差或大于设定的最大方差,说明该像素块的深度已收敛或发散,则剔除该像素块;第六步,遍历第三帧图像上的像素块,以第四步所述方法得到第三帧与参考帧对应的所有像素块,得到参考帧到当前第三帧的位姿tcr;重复第五和第六步,遍历第四帧及之后的每一帧,直到查找得到单目相机拍摄视频中每一帧与该参考帧对应的所有像素块,通过三角化方法求出该参考帧上这些像素块的深度;再以第二帧为参考帧,重复上述步骤,遍历第三帧及之后的每一帧,直到查找得到单目相机拍摄视频中每一帧与该参考帧对应的所有像素块,通过三角化方法求出该参考帧上这些像素块的深度;重复上述步骤,得到单目相机拍摄视频中每一帧上用于稠密建图的像素块的空间位置,从而实现稠密建图,具有成本低、效率高、准确度高等优点。
7.只有参考帧需要剔除,当前帧都是被搜索的,不需要剔除。
8.具体地,第四步中极线搜索方法为:假设第一帧像素块x对应第二帧像素块y,将第一帧像素块x的像素坐标转化成归一化坐标,乘上深度均值,再左乘位姿tcr,转换回像素坐标,这样就得到了深度均值点在当前帧的像素位置;将深度均值取倒数,加减三倍的深度标准差得出需要搜索的深度的最小值和最大值的倒数,深度标准差为深度方差的开方,将第一帧该像素块的像素坐标转化为归一化坐标,乘上深度最值,再左乘位姿tcr,转换回像素坐标,得到深度最值点在当前帧的像素位置。
9.获得深度均值点在第二帧的位置和深度最值,即深度最大值和深度最小值点在当前帧的位置,就可以确定极线的方向和搜索的范围,即要找的点p对于参考帧的深度大于深度最小值,小于深度最大值。
10.具体地,沿着极线以一定步长遍历像素块,求出当前帧与参考帧上两个像素块之间的去均值ncc,如果分数大于阈值,则这两个像素块匹配对应,反之说明在当前帧上找不到与参考帧匹配的像素块,即匹配失败。
11.进一步地,将参考帧的像素坐标转成归一化坐标,乘上当前的深度,左乘位姿,再转化成当前帧的像素坐标;对于像素块中的每个像素,累加它们的灰度值,最后取平均值,然后代入公式求出ncc分数,公式为:其中,a为参考帧的像素块,b为当前帧的像素块,a(i,j) 为参考帧上某个像素块的像素灰度值,b(i,j)为当前帧上某个像素块的像素灰度值;为参考帧某个像素块的灰度均值,为当前帧某个像素块的灰度均值。
12.本发明的有益效果在于:本发明采用单目相机,不需要复杂的标定和配置,只需要拍照即可。因为其稠密建图全部依赖于软件,利用逆深度就可以测量很远的距离;由于单目相机不需要发射光线,所以在户外条件下工作良好,可以检测透射材质。
附图说明
13.图1显示了极线搜索原理。
具体实施方式
14.一种基于单目相机进行稠密建图的方法,其特征在于,包括:第一步,将单目相机拍摄下的一段视频,以灰度图的形式读取第一帧图像,先以第一帧为参考帧,初始化深度滤波器的深度均值和深度方差;第二步,梯度剔除;以灰度图的形式读取第二帧图像,遍历参考帧上的每个像素块,计算每个像素块的灰度梯度,如果某个像素块的梯度的2范数小于设定的阈值,则剔除该像素块;第三步,深度剔除;遍历参考帧上经梯度剔除余下的其他像素块,读取深度滤波器存储的每个像素块的深度方差值,如果某个像素块的深度方差小于设定的最小方差或大于设定的最大方差,说明该像素块的深度已收敛或发散,则剔除该像素块;第四步,遍历第二帧图像上的像素块,用极线搜索方法查找每个像素块与所述参考帧上经第二、第三步剔除后余下像素块对应的位置;如果查找到参考帧上某个像素块在当前第二帧对应的位置,则通过三角化方法求出参考帧上该像素块的深度均值和深度方差,并将该深度均值和深度方差存入深度滤波器中,用于更新深度滤波器,对查找到的参考帧与当前第二帧有对应位置的所有像素块重复该步骤,直到每个像素块的深度都收敛;通过传感器得到当前相机在世界坐标系的位姿twc,通过该位姿twc的逆乘上参考帧在世界坐标系的位姿twr,得到参考帧到当前第二帧的位姿tcr;如图1所示,参考帧上的像素点p1对应的空间点的位置在射线o1p1上,准确来说在d标记的线段,这个线段与当前相机的光心o2的连线会在当前帧上投影出一条直线l2,称为极线,所以空间点在当前帧上的位置只需要在极线上搜索就行。遍历极线上的每个像素块,计算它与p1的相似程度,沿着极线以一定步长遍历极线上的每个像素块,求出当前帧与参考帧上两个像素块之间的去均值ncc,如果分数大于阈值,则这两个像素块匹配对应,反之说明在当前帧上找不到与参考帧匹配的像素块,即匹配失败。当找到匹配对应的像素块之后,就用三角化求出该像素块深度,进而用新的深度均值和深度方差更新深度滤波器直到深度收敛。
15.根据对极约束的原理,在当前帧上用极线搜索查找与参考帧像素块对应的位置,假设第一帧像素块x对应第二帧像素块y,则有:假设第一帧像素块x对应第二帧像素块y,则有:其中,s1为第一帧像素块x的深度,s2为第二帧像素块y的深度,p1为x在图片上的平面坐标,p2为y在图片上的平面坐标,p为空间中的某个点坐标,满足投影到第一帧时为x,投
影到第二帧时为y,k为相机内参,r是旋转矩阵,t是平移向量。
16.将第一帧像素块x的像素坐标转化成归一化坐标,乘上深度均值,再左乘位姿tcr,转换回像素坐标,这样就得到了深度均值点在当前帧的像素位置。
17.在室外场景下,深度很多时候不满足正态分布,比如深度的分布并不对称,有些点可能会在很远的地方,解决的方法是假设深度的倒数服从正态分布,即逆深度。将深度均值取倒数,加减 3倍标准差得出需要搜索的深度的最小值和最大值的倒数,获得深度最值,将第一帧该像素块的像素坐标转化为归一化坐标,乘上深度最值,再左乘位姿tcr,转换回像素坐标,得到深度最值点在当前帧的像素位置,这样就确定了极线搜索范围。
18.考虑到如果相机发生旋转,则像素块也可能发生旋转,所以,在做块匹配之前,应该把参考帧到当前帧的运动加入像素块中,即做一次仿射变换。将参考帧的像素坐标转成归一化坐标,乘上当前的深度,左乘位姿,再转化成当前帧的像素坐标;对于像素块中的每个像素,累加它们的灰度值,最后取平均值,然后代入公式求出ncc分数,公式为:其中,a为参考帧的像素块,b为当前帧的像素块,a(i,j)和b(i,j)为像素灰度值,为参考帧某个像素块的灰度均值,为当前帧某个像素块的灰度均值。
19.如果极线搜索失败,则跳过该像素块。如果查找到参考帧上某个像素块在当前帧对应的位置,则通过三角化方法求出参考帧上该对应像素块的深度均值,进而计算深度方差,根据对极几何和针孔相机原理有,其中x1为第一帧某一个像素块的归一化坐标,x2为第二帧某一个像素块的归一化坐标,上式推导出等式:接下来用求得的数据更新深度滤波器的均值和方差,根据正态分布乘积公式,新值需要旧值和当前值计算得到。当前深度均值为上一步求得的s1,当前的深度方差为假设误差为一个像素下深度的差距。
20.最后用新值代替旧值更新深度滤波器,然后重复以上步骤直到每个像素的深度都收敛。
21.第五步,以灰度图的形式读取第三帧图像,遍历参考帧上经梯度剔除余下的其他像素块,读取深度滤波器存储的每个像素块的深度方差值,如果某个像素块的深度方差小于设定的最小方差或大于设定的最大方差,说明该像素块的深度已收敛或发散,则剔除该像素块;第六步,遍历第三帧图像上的像素块,以第四步所述方法得到第三帧与参考帧对应的所有像素块,得到参考帧到当前第三帧的位姿tcr;重复第五和第六步,遍历第四帧及之后的每一帧,直到查找得到单目相机拍摄视频中每一帧与该参考帧对应的所有像素块,通过三角化方法求出该参考帧上这些像素块的深度;
再以第二帧为参考帧,重复上述步骤,遍历第三帧及之后的每一帧,直到查找得到单目相机拍摄视频中每一帧与该参考帧对应的所有像素块,通过三角化方法求出该参考帧上这些像素块的深度;重复上述步骤,得到单目相机拍摄视频中每一帧上用于稠密建图的像素块的空间位置。
22.本方法在只需要半稠密建图时,通过梯度过滤掉一部分光滑表面上的点,这样点云更加平滑,降低耗时和算力要求;使深度的倒数满足正态分布,可以很好地解决深度分布不对称和远点无法覆盖的问题;在极线搜索和块匹配时增加一次像素间的仿射变换,可以避免旋转带来的两个像素块不同的结果;克服了传统建图方法在稠密建图时耗时久、算力要求高、效率低的问题,也能够克服对于光滑表面的深度估计不理想,具有纹理依赖性,在户外场景下,较远的点无法被侦查,以及相机在发生旋转时,极线搜索和匹配不准确等问题。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1