一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种适用于移动机器人主动避障的快速双目方法与流程

2022-07-02 06:49:59 来源:中国专利 TAG:


1.本技术涉及机器人避障,并且更具体地,涉及适用于具有双目相机的移动机器人主动避障的快速双目方法。


背景技术:

2.目前基于双目的避障方案由于结构简单、稳定性高、成本低、适应室内外场景、视差估计范围大等特点,在机器人避障领域受到了越来越多的关注。但目前其视差估计的精度及性能难以平衡、障碍物检测泛化能力不足、噪声鲁棒性不高,从而严重制约了双目避障方案在实际场景中的应用,为此本技术提出了一种适用于移动机器人主动避障的快速双目方法。


技术实现要素:

3.提供本发明内容部分旨在以简要的形式介绍对发明构思的选择,而在下面的具体实施方式部分中将进一步描述这些发明构思。本发明内容部分目的不在于确认所要求保护的主题的关键特征或必要特征,也不籍此帮助确定所要求保护的主题的范围。
4.根据本发明的一方面,提供了一种适用于移动机器人主动避障的快速双目方法,该方法可包括:s1)基于双目相机中的初始左图像和初始右图像生成第一视差图和与第一视差图对应的具有与第一视差图相同的第一分辨率的深度与点云图;s2)使用预定数量的视差网格梯度算子以第一视差图的m行*m列个网格组成的超网格为单位从第一视差图生成预定比特数的视差网格梯度纹理图;s3)从视差网格梯度纹理图获取障碍前景物的位置和地面的位置;s4)基于所获取的障碍前景物的位置和地面的位置,从深度与点云图确定移动机器人需要主动避障的障碍前景物和地面,其中,每个网格由n行*n列个像素组成,其中m和n中的每个为大于或等于1的整数并且m为奇数。
5.步骤s1)可包括:将初始左图像和初始右图像转换成对齐的第一左图像和第一右图像;以第一左图像和第一右图像为金字塔底层依次进行下采样,得到由具有第一分辨率的第一左图像和第一右图像组成的第一图像对、由具有比第一分辨率低的第二分辨率的第二左图像和第二右图像组成的第二图像对以及由具有比第二分辨率低的第三分辨率的第三左图像和第三右图像组成的第三图像对;从第二图像对和第三图像对分别得到具有第二分辨率的第二视差图和具有第三分辨率的第三视差图;根据第三视差图和第二视差图建立视差模型;利用视差模型生成第一图像对的第一视差图;以及从第一视差图生成具有与第一视差图相同的第一分辨率的深度与点云图。
6.从第二图像对和第三图像对分别得到具有第二分辨率的第二视差图和具有第三分辨率的第三视差图可以是利用bm双目匹配算法进行的。
7.根据第三视差图和第二视差图建立视差模型可以包括:将第三视差图划分成多个图像块,获取每个图像块的视差范围;以及将第三视差图向第二视差图映射,并结合对第二视差图的边缘检测结果建立视差模型。
8.将第三视差图向第二视差图映射可以包括将第三视差图的视差范围、空洞坐标和噪声坐标向第二视差图映射。
9.利用视差模型生成第一图像对的第一视差图可以包括:对第一图像对的第一左图像和第一右图像进行census变换;基于视差模型中的视差范围确定经census变换后的第一左图像和第一右图像的代价函数;使用视差模型中的噪声坐标、空洞坐标和边缘坐标进行快速均值滤波;针对每个像素,基于代价函数从均值滤波后的视差模型输出具有最小视差的像素数据,以生成第一视差图。
10.视差模型中的视差范围可以随着移动机器人的低速运动而动态地更新。
11.视差模型中的视差范围随着移动机器人的低速运动而动态地更新可以包括:通过利用前一帧的与当前帧中每个位置对应的图像块邻域内的视差范围来更新视差模型中的视差范围。
12.步骤s1)可以包括:生成初始左图像和所初始右图像的初始视差图;将初始视差图转换为具有与初始视差图相同的第一分辨率的初始深度与点云图;以及从初始深度与点云图中去除具有大于或等于预定高度的数据以形成深度与点云图,并从被去除了数据的深度与点云图生成第一视差图。
13.预定高度可以是0.2米。
14.上述预定数量可以是32,并且上述预定比特数也可以是32。
15.32个视差网格梯度算子可以包括8个预定的点梯度算子、14个预定的线梯度算子和6个预定的面梯度算子以及4个随机梯度算子。
16.8个预定的点梯度算子可以包括:第一类型的点梯度算子,用于表示超网格中的处于中心位置处的中心网格与最近邻的网格之间的灰度变化;以及第二类型的点梯度算子,用于表示中心网格与最远距离的网格之间的灰度变化。
17.第一类型的点梯度算子可以分别用于表示:中心网格与最近邻的左网格之间的灰度变化;中心网格与最近邻的上网格之间的灰度变化;中心网格与最近邻的右网格之间的灰度变化;以及中心网格与最近邻的下网格之间的灰度变化。
18.第二类型的点梯度算子可以分别用于表示:中心网格与处于第一行第一列上的网格之间的灰度变化;中心网格与处于所第一行第m列上的网格之间的灰度变化;中心网格与处于第m行第m列上的网格之间的灰度变化;以及中心网格与处于第m行第一列上的网格之间的灰度变化。
19.8个预定的点梯度算子可以包括:第一类型的点梯度算子,用于表示相对于超网格中的处于中心位置的网格在上方向、下方向、左方向、右方向上的灰度变化;以及第二类型的点梯度算子,用于表示相对于中心网格在左上对角线方向、右上对角线方向、右下对角线方向和左下对角线方向上的灰度变化。
20.14个预定的线梯度算子可以包括:第一类型的线梯度算子,用于表示超网格中的处于一行上的m个网格与处于另一行上的m个网格之间的灰度变化;第二类型的线梯度算子,用于超网格中的处于一列上的m个网格与处于另一列上的m个网格之间的灰度变化;第三类型的线梯度算子,用于表示所超网格中的处于一行上的m个网格与处于一列上的m个网格之间的灰度变化;以及第四类型的线梯度算子,用于表示超网格中处于对角线上的m个网格与处于超网格的另一对角线上的m个网格之间的灰度变化。
21.第一类型的线梯度算子可以分别用于表示:超网格中的处于第一行上的m个网格与处于第二行上的m个网格之间的灰度变化;超网格中的处于第(m-1)/2行上的m个网格与处于第(m 1)/2行上的m个网格之间的灰度变化;超网格中的处于第(m 1)/2行上的m个网格与处于第(m 3)/2行上的m个网格之间的灰度变化;以及超网格中的处于第(m-1)行上的m个网格与处于第m行上的m个网格之间的灰度变化。
22.第二类型的线梯度算子可以分别用于表示:超网格中的处于第一列上的m个网格与处于第二列上的m个网格之间的灰度变化;超网格中的处于第(m-1)/2列上的m个网格与处于第(m 1)/2列上的m个网格之间的灰度变化;超网格中的处于第(m 1)/2列上的m个网格与处于第(m 3)/2列上的m个网格之间的灰度变化;以及超网格中的处于第(m-1)列上的m个网格与处于第m列上的m个网格之间的灰度变化。
23.第三类型的线梯度算子可以分别用于表示:超网格中的处于第一列上的m个网格与处于第一行上的m个网格之间的灰度变化;超网格中的处于第一行上的m个网格与处于第m列上的m个网格之间的灰度变化;超网格中的处于第m列上的m个网格与处于第m行上的m个网格之间的灰度变化;超网格中的处于第(m 1)/2行上的m个网格与处于第(m 1)/2列上的m个网格之间的灰度变化;以及超网格中的处于第m行上的m个网格与处于第一列上的m个网格之间的灰度变化。
24.6个预定的面梯度算子可以包括:第一类型的面梯度算子,用于表示超网格中的至少两行邻近网格与另一至少两行邻近网格之间的灰度变化;第二类型的面梯度算子,用于表示超网格中的至少两列邻近网格与另一至少两列邻近网格之间的灰度变化;第三类型的面梯度算子,用于表示超网格中的处于对角线和位于对角线的一侧上的所有网格与处于对角线和位于对角线的另一侧上的所有网格之间的灰度变化;第四类型的面梯度算子,用于表示超网格中的位于边缘处的所有网格与位于中央位置处的q*q个网格之间的灰度变化,其中q为大于或等于3的奇数;以及第五类型的面梯度算子,用于表示超网格中的沿第一对角线方向相对于中心网格对称的两组k*k个网格与沿第二对角线方向相对于中心网格对称的两组k*k个网格之间的灰度变化,其中k为大于或等于2的整数。
25.第一类型的面梯度算子可以用于表示由超网格中的处于第一行上的m个网格和处于第二行上的m个网格组成的矩形区域与由处于第(m-1)行上的m个网格和处于第m行上的m个网格组成的矩形区域之间的灰度变化。
26.第二类型的面梯度算子可以分别用于表示:由超网格中的处于第一列上的m个网格和处于第二列上的m个网格组成的矩形区域与由处于第(m-1)列上的m个网格和处于第m列上的m个网格组成的矩形区域之间的灰度变化。
27.第三类型的面梯度算子可以分别用于表示:由超网格中的处于第一列、第一行和第一对角线上及之间的网格组成的三角形区域与由处于第一对角线、第m行和第m列上及之间的网格组成的三角形区域之间的灰度变化;以及由超网格中的处于第一行、第m列和第二对角线上及之间的网格组成的三角形区域与由处于第二对角线、第一列和第m行上及之间的网格组成的三角形区域之间的灰度变化。
28.第四类型的面梯度算子可以用于表示:由超网格中的处于第一行、第一列、第m行和第m列上的所有网格与处于中央位置的q*q个网格之间的灰度变化。
29.第五类型的面梯度算子可以用于表示:由超网格中的处于第一行第一列上的网
格、处于第一行第二列上的网格、处于第二行第一列上的网格、处于第二行第二列上的网格、处于第(m-1)行第(m-1)列上的网格、处于第(m-1)行第m列上的网格、处于第m行第(m-1)列上的网格和处于第m行第m列上的网格组成的区域与处于第(m-1)行第一列上的网格、处于第(m-1)行第二列上的网格、处于第m行第一列上的网格、处于第m行第二列上的网格、处于第一行第(m-1)列上的网格、第一行第m列上的网格、第二行第(m-1)列上的网格和第二行第m列上的网格组成的区域之间的灰度变化。
30.m可以大于或等于5。
31.n可以大于或等于2。
32.从视差网格梯度纹理图获取障碍前景物的位置和地面的位置可以是利用预定的卷积神经网络实现的。
33.根据本发明的另一方面,提供了一种电子设备,该电子设备可以包括:处理器,与处理器连接的存储器,存储器中存储有指令,指令在被执行时致使处理器执行以上方法。
34.根据本发明的又一方面,提供了一种存储有计算机指令的非暂时性计算机可读存储介质,其中,计算机指令用于使计算机执行以上方法。
附图说明
35.图1是示出根据本技术实施方式的适用于移动机器人主动避障的快速双目方法的示意性流程图。
36.图2是示出根据本技术实施方式的图1的步骤s110的示意性流程图。
37.图3是示出根据本技术实施方式的图2的步骤s240的示意性流程图。
38.图4是示出根据本技术实施方式的图2的步骤s250的示意性流程图。
39.图5是示出根据又一实施方式的图1的步骤s110的示意性流程图。
40.图6a和图6b是根据本技术实施方式的用于说明图4的步骤s430中的快速均值滤波的示意图。
41.图7是根据本技术实施方式的用于说明根据本技术实施方式的超网格(视差网格)的示例的示意图。
42.图8a至图8h是根据本技术实施方式的用于说明根据本技术的8个点梯度算子的示例的示意图。
43.图9a至图9n是根据本技术实施方式的用于说明根据本技术的14个线梯度算子的示例的示意图。
44.图10a至图10f是根据本技术实施方式的用于说明根据本技术的6个面梯度算子的示例的示意图。
45.图11a至图11d是根据本技术实施方式的用于说明根据本技术的随机梯度算子的示例的示意图。
46.图12是示出根据本技术实施方式的应用于图1的步骤s130中的卷积神经网络模型的示例的示意图。
具体实施方式
47.提供以下描述以使得本领域技术人员能够更彻底和完全地理解本技术。以下描述
中的实施方式仅仅出于示意性和描述性目的,而不旨在进行限制,在不背离本技术的精神和范围的情况下,本领域技术人员可以想到其它显而易见的变型。
48.应理解,当特定实施方式可以不同地实施时,可以与所描述的顺序不同地执行具体的过程顺序。例如,两个连续描述的过程可以基本上同时执行或者以与所描述的顺序相反的顺序执行。
49.本技术中使用的术语仅用于描述特定实施方式的目的,并且不旨在限制本公开。如本技术中所使用的,单数形式“一”和“一种”旨在还包括复数形式,除非上下文另有明确说明。将进一步理解,当在本说明书中使用时,术语“包括”、“包含”、“具有”指定所阐述的特征、整体、步骤、操作、算子、视差图、元件和/或组件的存在,但不排除一个或多个其它特征、整体、步骤、操作、算子、视差图、元件、组件和/或其组合的存在或添加。如本技术中使用的,术语“和/或”包括相关列出项目中的一个或多个的任何和所有组合。
50.应理解,虽然在本技术中可以使用“第一”、“第二”、“第三”等来描述各种算子、视差图、元件或组件,但是这些算子、视差图、元件或组件不应被这些术语限制。这些术语仅用于将一个算子、视差图、元件或组件与另一算子、视差图、元件或组件区分开。因此,在不背离本技术的精神和范围的情况下,以下讨论的第一算子、第一视差图、第一元件或第一组件可以被称作第二算子、第二视差图、第二元件或第二组件。
51.在本技术中,术语“一个实施方式”、“一些实施方式”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施方式或示例描述的具体特征、结构、材料或者特点包含于本技术的至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施方式或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施方式或示例以及不同实施方式或示例的特征进行结合和组合。
52.可以以在获得对本技术的公开内容的理解之后将显而易见的各种方式组合本技术中描述的示例的特征。此外,尽管本技术中描述的示例具有多种配置,但是在理解本技术的公开内容之后将显而易见的其它配置也是可行的。
53.以下将结合附图描述本技术的实施方式。
54.图1是示出根据本技术实施方式的适用于移动机器人主动避障的快速双目方法的示意性流程图。图2是示出根据本技术实施方式的图1的步骤s110的示意性流程图。图3是示出根据本技术实施方式的图2的步骤s240的示意性流程图。图4是示出根据本技术实施方式的图2的利用视差模型生成第一视差图的示意性流程图。图5是示出根据又一实施方式的图1的步骤s110的示意性流程图。
55.如图1中所示,根据本技术的适用于移动机器人主动避障的快速双目方法包括以下步骤。
56.步骤s110:基于双目相机中的初始左图像和初始右图像生成第一视差图和与第一视差图对应的具有与第一视差图相同的第一分辨率的深度与点云图。如本领域技术人员所公知的,视差图和对应的深度与点云图可以通过如下等式(1)相互转化:
57.58.其中,z表示像素的深度,d表示像素的视差,b表示左相机和右相机在垂直于光轴方向上的间距,并且f表示左相机和右相机的焦距。
59.初始左图像可以是双目相机中的左相机拍摄的原始图像,初始右图像可以是双目相机中的右相机在与左相机拍摄的原始图像同一时刻处拍摄的原始右图像。初始左图像和初始右图像可以实时地从双目相机获取,也可以从与双目相机通信连接的模块或装置获取。
60.根据本技术的一些实施方式,第一视差图可以是如现有技术中那样先基于双目相机的内参和外参将初始左图像和初始右图像转换成对齐的第一左图像和第一右图像,然后从对齐的第一左图像和第一右图像直接转换的视差图(第一方式)。根据本技术的另一些实施方式,第一视差图可以是先基于双目相机的内参和外参将初始左图像和初始右图像转换成对齐的第一左图像和第一右图像,然后通过金字塔分层并建立视差模型而间接生成的视差图(第二方式),这将在下文中参考图2进行描述。在本技术的又一些实施方式中,第一视差图可以是将利用上述第一方式或第二方式获得的视差图转换成深度与点云图,从该深度与点云图去除一些点云,然后从去除了一些点云的深度与点云图生成的视差图(第三方式),这将在下文中参考图5进行描述。
61.步骤120:使用预定数量的视差网格梯度算子(例如,32个)以第一视差图的m行*m列个网格组成的超网格为单位从第一视差图生成预定比特数(例如,32比特)的视差网格梯度纹理图(dggmap),每个网格由n行*n列个像素组成,其中,m和n中的每个为大于或等于1的整数并且m为奇数。
62.在步骤120中,将第一视差图划分成多个超网格,每个超网格由m行*m列个网格组成,而每个网格由n行*n列个像素组成,其中m和n中的每个为大于或等于1的整数并且m为奇数。换言之,每个网格可以代表一个像素也可以是由多个像素组成的超像素。例如,可以将m设定为大于或等于5,将n设定为大于或等于2,优选地,m=5,n=2,以在确定精度的同时还能加快运算速度,降低成本。
63.例如,根据本技术的视差网格梯度纹理图(dggmap)可以按如下等式(2)定义:
[0064][0065]
其中,di=gm
a-gmb,下标a和b代表超网格中的a区域和b区域,因此di是用于表示a区域与b区域之间的灰度变化的第i个算子,而gma和gmb为梯度算子中两个区域集合中的像素的灰度和的平均值,bi表示第i个梯度算子的权重。
[0066]
在本发明的示例性实施方式中,所采用的32个视差网格梯度算子可包括8个预定的点梯度算子(b4~b11)、14个预定的线梯度算子(b12~b25)、6个预定的面梯度算子(b26~b31)以及4个随机梯度算子(b00~b3)。这些算子对应的比特位置如下面的表1中所示,并且将参照图8a至图11d描述这些梯度算子的示例。
[0067]
表1
[0068]
b31

b26b25

b12b11

b4b3

b0
[0069]
步骤s130:从视差网格梯度纹理图获取障碍前景物的位置和地面的位置。
[0070]
在步骤s130中,可以利用经训练的神经网络模型来从步骤s120生成的视差网格梯
度纹理图获取障碍前景物的位置和地面的位置。
[0071]
经训练的神经网络模型可以通过以下方式获得:利用大量的视差网格梯度纹理图(例如,通过对先前存储的大量的由双目相机获取的初始左图像和初始右图像执行上述步骤s110和s120而获得的大量的视差网格纹理图)对现有技术的神经网络模型进行训练而得到的。
[0072]
可选地,经训练的神经网络模型可以通过以下方式获得:利用大量的视差网格梯度纹理图(例如,通过对先前存储的大量的由双目相机获取的初始左图像和初始右图像执行上述步骤s110和s120而获得的大量的视差网格纹理图)对本技术如图12中所示的视差网格地面神经网络(disparity grid ground net,dggnet)进行训练而得到的。本领域技术人员可以结合现有技术的神经网络从图12所示的dggnet的示意图清楚地理解本技术所采用的dggnet,因此在此省略了对该网络中各功能模块的具体描述。
[0073]
步骤s140:基于所获取的障碍前景物的位置和地面的位置,从步骤s110得到的深度与点云图确定移动机器人需要主动避障的障碍前景物和地面。
[0074]
在步骤s140中,基于所获取的障碍前景物的位置和地面的位置,可以基于点云聚类的方式来从步骤s110得到的深度与点云图确定移动机器人需要主动避障的障碍前景物和地面。
[0075]
下面将参考图2对图1中的步骤s110进行示例性说明。
[0076]
参考图2,在本技术中,为了在确保精度的同时优化速度,优选地,在图1的步骤s110中,将初始左图像和初始右图像转换成对齐的第一左图像和第一右图像(步骤s210);利用金字塔图像分层技术将原分辨率的第一左图像和第一右图像进行分层,得到原分辨率(高分辨率,下文中称为“第一分辨率”)的第一图像对(包括第一左图像和第一右图像)、中分辨率(下文中称为“第二分辨率”)的第二图像对(包括第二左图像和第二右图像)以及低分辨率(下文中称为“第三分辨率”)的第三图像对(步骤s220);从第二图像对和第三图像对分别得到具有第二分辨率的第二视差图和具有第三分辨率的第三视差图(步骤s230);根据第二视差图和第三视差图建立视差模型(步骤s240);利用所建立的视差模型生成第一图像对的第一视差图(步骤s250);以及将第一视差图转换成具有第一分辨率的深度与点云图(步骤s260)。
[0077]
具体地,在步骤s210中,将初始左图像和初始右图像转换成对齐的第一左图像和第一右图像包括:利用双目相机中的每个相机的内参和外参,建立从三维世界坐标系映射到双目相机的左成像面和右成像面的几何模型;基于该几何模型,将初始左图像和初始右图像进行畸变校正和极线校正,以使得校正后的左图像和右图像对齐(为便于描述,本技术中将校正后的左图像称为第一左图像,将校正后的右图像称为第一右图像)。
[0078]
以下将描述该几何模型。
[0079]
对于左相机,从像素坐标系到三维世界坐标系的矩阵变换如下:
[0080]
[0081]
其中,为左相机的内参矩阵,为左相机的外参矩阵,并且zr为缩放系数。
[0082]
类似地,对于右相机,从像素坐标系到三维世界坐标系的矩阵变换如下:
[0083][0084]
其中,为右相机的内参矩阵,为右相机的外参矩阵,并且z
′r为缩放系数。
[0085]
根据本技术的实施方式,可以基于该几何模型对初始左图像和初始右图像进行畸变校正,然后将左相机坐标系和右相机坐标系乘以各自的旋转矩阵r、r

,使得左右相机的主光轴平行,像平面与基线平行,从而得到对齐的第一左图像和第一右图像,这样只需要在同一行上搜索第一左图像和第一右图像的匹配点,以便提高搜索效率。
[0086]
根据本技术的一些实施方式,在步骤s230中,可以以bm双目匹配算法为基础,对第二图像对和第三图像对进行快速视差计算,以加快运算速度。
[0087]
为了加速,在本技术的一些实施方式中,可以对低分辨率(第三分辨率)的第三图像对采用例如5*5邻域的census变换:
[0088][0089][0090]
其中,(u,v)为所考虑的5*5邻域内的中心像素(感兴趣的三维世界中的点(兴趣点)在成像面上的像)的像素坐标,而(u i,v j)为与中心像素相邻的像素的像素坐标。
[0091]
然后通过hamming距离获取第三图像对中的第三左图像和第三右图像的像素点的匹配代价:
[0092]
c(u,v,d):=hamming(c
sl
(u,v),c
sr
(u-d,v))
[0093]
其中,d为兴趣点在左右图像之间的视差。对于某个兴趣点,匹配代价最小时对应的左图像中的像素和右图像中的像素即为关于该特征点相互匹配的像素。
[0094]
因此,在本技术中,优选地,可以利用census变换和hamming距离获得匹配代价来寻找左右图像中匹配的像素。对于相互匹配的像素,在视差维度方向上输出最小视差的数据,以生成第三左图像和第三右图像的视差图(第三视差图)。类似地,可以生成第二左图像和第二右图像的视差图(第二视差图)。应理解,这仅仅是从第二图像对和第三图像对分别得到具有第二分辨率的第二视差图和具有第三分辨率的第三视差图(上述步骤s230)的示例性说明,但其不限于此。
[0095]
下面将参考图3对图2中的步骤s240进行示例性说明。
[0096]
根据本技术的一些实施方式,由于第二视差图具有比第三视差图高的分辨率,第二视差图中关于边缘信息的成像会更加清楚,因而可以使步骤s240包括图3中所示的步骤s310和s320,以在加速的同时更高的精度。具体地,在步骤s310中,将第三视差图划分成多个图像块(patch),获取每个图像块的视差范围;在步骤s320中,将第三视差图向第二视差图映射,并结合对第二视差图的边缘检测结果建立视差模型。根据本技术的一些实施方式,将第三视差图向第二视差图映射包括将第三视差图的视差范围、空洞坐标和噪声坐标向第二视差图映射。应理解,图3仅仅是对根据第三视差图和第二视差图建立视差模型(上述步骤s240)的示例性说明,但步骤s240的具体过程不限于此。
[0097]
为了便于理解,下面将参考图4对图2中的步骤s250进行示例性说明。
[0098]
如图4中所示,根据本技术的示例性实施方式,图2中的步骤s250可以包括以下的步骤s410、步骤s420和步骤s430。
[0099]
在步骤s410中,对具有原分辨率(第一分辨率)的第一图像对的第一左图像和第一右图像进行census变换。为了保证精度,可以采用9*9邻域的census变换,但本技术不限于此。
[0100]
在步骤s420中,基于所建立的视差模型中的视差范围,确定经census变换后的第一左图像和第一右图像的代价函数。具体地,可以基于所建立的视差模型中的视差范围获取经census变换后的第一左图像和第一右图像的每个图像块(patch)的候选视差范围,以图像块为单位按逐像素可变候选视差范围的方式确定经census变换后的第一左图像和第一右图像的代价函数,从而加快运算速度。
[0101]
在步骤s430中,使用所建立的视差模型中的噪声坐标、空洞坐标和边缘坐标进行快速均值滤波。
[0102]
在步骤s440中,针对每个像素,基于代价函数从均值滤波后的视差模型输出具有最小视差的像素数据,以生成第一视差图。
[0103]
应理解,图4仅仅是图2中的步骤s250的一种优选的过程,但图2的步骤s250的具体过程不限于此。
[0104]
图6a和图6b是用于说明图4的步骤s430中的快速均值滤波的示意图。
[0105]
在本技术的示例性实施方式中,可以使用视差模型中的噪声、空洞、边缘等位置对h*w*d个位置进行快速均值滤波,以保证精度与性能上的平衡,其中h表示像素平面上的h个行,w表示像素平面上的w个列,并且d表示视差维度上的视差。
[0106]
结合图6a和图6b,本技术中所采用的快速均值滤波算法的初始化示例如下:
[0107]
v0_i=p00 p10 p20 p30 p40
[0108]
v1_i=p01 p11 p21 p31 p41
[0109]
v2_i=p02 p12 p22 p32 p42
[0110]
v3_i=p03 p13 p23 p33 p43
[0111]
v4_i=p04 p14 p24 p34 p44
[0112]

[0113]
本技术中所采用的快速均值滤波算法的kernel示例如下:
[0114]
v0=v0_i p40-p00
[0115]
v1=v1_i p41-p01
[0116]
v2=v2_i p42-p02
[0117]
v3=v3_i p43-p03
[0118]
v4=v4_i p44-p04
[0119]

[0120]
sum_1=v0 v1 v2 v3 v4
[0121]
sum_2=sum_1 v5

v0
[0122]
sum_3=sum_2 v6

v1
[0123]

[0124]
其中,p00至p53

为像素值,并且v0_i至v4_i等为h*w平面上垂直方向的像素值之和。
[0125]
由于均值滤波只与h*w平面有关,而在视差维度d方向上邻域无关,因此在实际应用中,可以在movidus平台下在视差维度方向上的每8个位置做simd并行计算,取得使用硬件指令集加速的效果。simd指令的示例如下表2中所示。
[0126]
表2
[0127]
功能描述c接口simd汇编simd8short加法指令__builtin_shave_vau_iadds_i16_rrvau.iadds.i168short减法指令__builtin_shave_vau_isubs_i16_rrvau.isubs.i168short移位指令__builtin_shave_vau_shr_i16_rivau.shr.i16
[0128]
以下将参考图5描述根据本技术又一实施方式的图1的步骤s110的具体过程。
[0129]
如图5中所示,基于双目相机中的初始左图像和初始右图像生成第一视差图和与第一视差图对应的具有与第一视差图相同的第一分辨率的深度与点云图(上述步骤s110)可以包括步骤s510、步骤s520和步骤s530。
[0130]
在步骤s510中,生成初始左图像和初始右图像的初始视差图。该初始视差图为利用初始左图像和初始右图像对齐后的第一左图像和第一右图像而生成的视差图。在步骤s510中生成的视差图可以是采用如步骤s210至步骤s250中类似的方法从初始左图像和初始右图像生成的视差图。为了避免重复,不再对此过程进行描述。
[0131]
在步骤s520中,将初始视差图转换为具有第一分辨率的初始深度与点云图。具体地,可以利用上述等式(1)将初始视差图转换为初始深度与点云图。
[0132]
在步骤s530中,从初始深度与点云图中去除具有大于或等于预定高度的数据以形成图1中的深度与点云图,并从所形成的深度与点云图生成第一视差图(例如,利用上述等式(1))。例如,该预定高度可以是0.2米。
[0133]
应理解,步骤是s110不限于图5中所示的具体过程,本领域技术人员还可以进采用图2中所示的过程或者结合图2和图5中所示的过程来实现步骤s110。
[0134]
以上介绍了根据视差模型中的视差范围来生成第一视差图的示例性过程,但是在实际应用中,由于移动机器中低速运动,因此本技术的视差模型中的视差范围随着移动机器人的低速运动而动态地更新。具体地,通过利用前一帧的与当前帧中每个位置对应的图像块(patch)邻域内的视差范围来更新视差模型中的视差范围。
[0135]
下面将详细描述根据本技术的实施方式中使用的梯度算子。为了描述这些梯度算子,将首先介绍视差网格的概念。
[0136]
图7是用于说明根据本技术实施方式的视差网格的示例的示意图。
[0137]
如步骤s120中所描述的,使用预定数量的视差网格梯度算子(例如,32个)以第一视差图的m行*m列个网格组成的超网格为单位从第一视差图生成预定比特数(例如,32比特)的视差网格梯度纹理图。步骤s120中的m行*m列个网格组成的超网格也称为视差网格,视差网格的示例如图7中所示。图7示出了根据本技术的一些实施方式的由5行*5列个网格组成的超网格(视差网格),但是本技术的视差网格的尺寸不限于此。在图7的示例中,网格g0至g24中的每个由2行*2列个像素组成(因此,网格g0至g24中的每个可以是超网格)以加快运算速度,但是本技术的网格的尺寸不限于此。
[0138]
将基于上述超网格(视差网格)描述本技术中采用的梯度算子。
[0139]
图8a至图8h是用于说明根据本技术的8个点梯度算子的示例的示意图。
[0140]
根据本技术的一些示例性实施方式,8个预定的点梯度算子可以包括多个第一类型的点梯度算子和多个第二类型的点梯度算子,其中,第一类型的点梯度算子用于表示超网格中的处于中心位置处的中心网格与最近邻的网格之间的灰度变化,第二类型的点梯度算子用于表示中心网格与最远距离的网格之间的灰度变化。
[0141]
例如,4个第一类型的点梯度算子可以分别用于表示:中心网格与最近邻的左网格之间的灰度变化;中心网格与最近邻的上网格之间的灰度变化;中心网格与最近邻的右网格之间的灰度变化;以及中心网格与最近邻的下网格之间的灰度变化。4个第二类型的点梯度算子可以分别用于表示:中心网格与处于第一行第一列上的网格之间的灰度变化;中心网格与处于所第一行第m列上的网格之间的灰度变化;中心网格与处于第m行第m列上的网格之间的灰度变化;以及中心网格与处于第m行第一列上的网格之间的灰度变化。
[0142]
根据本技术的又一些示例性实施方式,8个预定的点梯度算子可以包括多个第一类型的点梯度算子和多个第二类型的点梯度算子,其中,第一类型的点梯度算子可以用于表示相对于超网格中的处于中心位置的网格在上方向、下方向、左方向、右方向上的灰度变化,第二类型的点梯度算子可以用于表示相对于中心网格在左上对角线方向、右上对角线方向、右下对角线方向和左下对角线方向上的灰度变化。
[0143]
在图8a至图8d的示例中,第一类型的点梯度算子b4至b7分别用于表示网格g12(第3行第3列上的网格,中心网格)与网格g11之间的灰度变化(参考图8a)、网格g12与网格g7之间的灰度变化(参考图8b)、网格g12与网格g13之间的灰度变化(参考图8c)以及网格g12与网格g17之间的灰度变化(参考图8d)。应理解,第一类型的点梯度算子的该示例仅仅是说明性的,第一类型的点梯度算子不限于此。例如,在一些示例性实施方式中,第一类型的点梯度算子还可以分别用于表示网格g12与网格g2之间的灰度变化、网格g12与网格g10之间的灰度变化、网格g12与网格g22之间的灰度变化以及网格g12与网格g14之间的灰度变化。
[0144]
在图8e至图8h的示例中,第二类型的点梯度算子b8至b11分别用于表示网格g12与网格g0之间的灰度变化(参考图8e)、网格g12与网格g4之间的灰度变化(参考图8f)、网格g12与网格g24之间的灰度变化(参考图8g)以及网格g12与网格g20之间的灰度变化(参考图8h)。应理解,第二类型的点梯度算子的该示例仅仅是说明性的,第二类型的点梯度算子不限于此。例如,在一些示例性实施方式中,第二类型的点梯度算子还可以分别用于表示网格g12与网格g6之间的灰度变化、网格g12与网格g8之间的灰度变化、网格g12与网格g16之间的灰度变化以及网格g12与网格g18之间的灰度变化。
[0145]
图9a至图9n是用于说明根据本技术的14个线梯度算子的示例的示意图。
[0146]
根据本技术的一些示例性实施方式,14个预定的线梯度算子包括:第一类型的线梯度算子,用于表示超网格中的处于一行上的m个网格与处于另一行上的m个网格之间的灰度变化;第二类型的线梯度算子,用于超网格中的处于一列上的m个网格与处于另一列上的m个网格之间的灰度变化;第三类型的线梯度算子,用于表示超网格中的处于一行上的m个网格与处于一列上的m个网格之间的灰度变化;以及第四类型的线梯度算子,用于表示超网格中处于对角线上的m个网格与处于超网格的另一对角线上的m个网格之间的灰度变化。
[0147]
根据本技术的一些示例性实施方式,第一类型的线梯度算子可分别用于表示超网格中的处于第一行上的m个网格与处于第二行上的m个网格之间的灰度变化;超网格中的处于第(m-1)/2行上的m个网格与处于第(m 1)/2行上的m个网格之间的灰度变化;超网格中的处于第(m 1)/2行上的m个网格与处于第(m 3)/2行上的m个网格之间的灰度变化;以及超网格中的处于第(m-1)行上的m个网格与处于第m行上的m个网格之间的灰度变化。例如,在图9a至图9d的示例中,4个第一类型的线梯度算子(b12至b15)分别用于表示处于第一行上的5个网格与处于第二行上的5个网格之间的灰度变化(参考图9a);处于第二行上的5个网格与处于第三行上的5个网格之间的灰度变化(参考图9b);处于第三行上的5个网格与处于第四行上的5个网格之间的灰度变化(参考图9c);处于第四行上的5个网格与处于第五行上的5个网格之间的灰度变化。应理解,第一类型的线梯度算子的该示例仅仅是说明性的,第一类型的线梯度算子不限于此。
[0148]
根据本技术的一些示例性实施方式,第二类型的线梯度算子可分别用于表示:超网格中的处于第一列上的m个网格与处于第二列上的m个网格之间的灰度变化;超网格中的处于第(m-1)/2列上的m个网格与处于第(m 1)/2列上的m个网格之间的灰度变化;超网格中的处于第(m 1)/2列上的m个网格与处于第(m 3)/2列上的m个网格之间的灰度变化;以及超网格中的处于第(m-1)列上的m个网格与处于第m列上的m个网格之间的灰度变化。例如,在图9e至图9h的示例中,4个第二类型的线梯度算子(b16至b19)可分别用于表示处于第一列上的5个网格与处于第二列上的5个网格之间的灰度变化(参考图9e)、处于第二列上的5个网格与处于第三列上的5个网格之间的灰度变化(参考图9f)、处于第三列上的5个网格与处于第四列上的5个网格之间的灰度变化(参考图9g)以及处于第四列上的5个网格与处于第五列上的5个网格之间的灰度变化(参考图9h)。应理解,第二类型的线梯度算子的该示例仅仅是说明性的,第二类型的线梯度算子不限于此。
[0149]
根据本技术的一些示例性实施方式,第三类型的线梯度算子可分别用于表示:超网格中的处于第一列上的m个网格与处于第一行上的m个网格之间的灰度变化(参考图9f);超网格中的处于第一行上的m个网格与处于第m列上的m个网格之间的灰度变化;超网格中的处于第m列上的m个网格与处于第m行上的m个网格之间的灰度变化;超网格中的处于第m行上的m个网格与处于第一列上的m个网格之间的灰度变化;以及超网格中的处于第(m 1)/2行上的m个网格与处于第(m 1)/2列上的m个网格之间的灰度变化。例如,在图9的示例中,5个第三类型的线梯度算子(b20至b24)可分别用于表示处于第一列上的5个网格与处于第一行上的5个网格之间的灰度变化(参考图9i)、处于第一行上的5个网格与处于第五列上的5个网格之间的灰度变化(参考图9j)、处于第五列上的5个网格与处于第五行上的5个网格之间的灰度变化(参考图9k)、处于第五行上的5个网格与处于第一列上的5个网格之间的灰度
变化(参考图9l)以及处于第三行上的5个网格与处于第三列上的5个网格之间的灰度变化(参考图9m)。应理解,第三类型的线梯度算子的该示例仅仅是说明性的,第三类型的线梯度算子不限于此。
[0150]
如上所述的,根据本技术的一些示例性实施方式,第四类型的线梯度算子可用于表示超网格中处于对角线上的m个网格与处于超网格的另一对角线上的m个网格之间的灰度变化。例如,在图9n的示例中,第四类型的线梯度算子(b25)可用于表示处于第一对角线上的网格g0、g6、g12、g18和g24与处于第二对角线上的网格g4、g8、g12、g16和g20之间的灰度变化(参考图9n)。应理解,第四类型的线梯度算子的该示例仅仅是说明性的,第四类型的线梯度算子不限于此。
[0151]
图10a至图10f是用于说明根据本技术的6个面梯度算子的示例的示意图。
[0152]
根据本技术的一些示例性实施方式,6个预定的面梯度算子可包括:第一类型的面梯度算子,用于表示超网格中的至少两行邻近网格与另一至少两行邻近网格之间的灰度变化;第二类型的面梯度算子,用于表示超网格中的至少两列邻近网格与另一至少两列邻近网格之间的灰度变化;第三类型的面梯度算子,用于表示超网格中的处于对角线和位于该对角线的一侧上的所有网格与处于该对角线和位于该对角线的另一侧上的所有网格之间的灰度变化;第四类型的面梯度算子,用于表示超网格中的位于边缘处的所有网格与位于中央位置处的q*q个网格之间的灰度变化,其中q为大于或等于3的奇数;以及第五类型的面梯度算子,用于表示超网格中的沿第一对角线方向相对于中心网格对称的两组k*k个网格与沿第二对角线方向相对于中心网格对称的两组k*k个网格之间的灰度变化,其中k为大于或等于2的整数。
[0153]
根据本技术的一些示例性实施方式,第一类型的面梯度算子可用于表示由超网格中的处于第一行上的m个网格和处于第二行上的m个网格组成的矩形区域与由处于第(m-1)行上的m个网格和处于第m行上的m个网格组成的矩形区域之间的灰度变化。例如,在图10a的示例中,第一类型的面梯度算子(b26)可用于表示处于第一行和第二行上的10个网格与处于第四行和第四列上的10个网格之间的灰度变化。应理解,第一类型的面梯度算子的该示例仅仅是说明性的,第一类型的面梯度算子不限于此。
[0154]
根据本技术的一些示例性实施方式,第二类型的面梯度算子可分别用于表示由超网格中的处于第一列上的m个网格和处于第二列上的m个网格组成的矩形区域与由处于第(m-1)列上的m个网格和处于第m列上的m个网格组成的矩形区域之间的灰度变化。例如,在图10b的示例中,第二类型的面梯度算子(b27)可用于表示处于第一列和第二列上的10个网格与处于第四列和第五列上的10个网格之间的灰度变化。应理解,第二类型的面梯度算子的该示例仅仅是说明性的,第二类型的面梯度算子不限于此。
[0155]
根据本技术的一些示例性实施方式,第三类型的面梯度算子可别用于表示:由超网格中的处于第一列、第一行和第一对角线上及之间的网格组成的三角形区域与由处于第一对角线、第m行和第m列上及之间的网格组成的三角形区域之间的灰度变化;以及由超网格中的处于第一行、第m列和第二对角线上及之间的网格组成的三角形区域与由处于第二对角线、第一列和第m行上及之间的网格组成的三角形区域之间的灰度变化。例如,在图10c和图10d的示例中,第三类型的面梯度算子(b28和b29)可分别用于表示网格g0至g8、g10至g12、g15、g16和g20与网格g4、g8、g9、g12至g14和g16至g24之间的灰度变化(参考图10c);以
及网格g0至g4、g6至g9、g12至g14、g18、g19和g24与网格g0、g5、g6、g10至g12、g15至g18和g20至g24之间的灰度变化(参考图10d)。应理解,第三类型的面梯度算子的该示例仅仅是说明性的,第三类型的面梯度算子不限于此。
[0156]
根据本技术的一些示例性实施方式,第四类型的面梯度算子可用于表示:由超网格中的处于第一行、第一列、第m行和第m列上的所有网格与处于中央位置的q*q个网格之间的灰度变化,其中q为大于或等于3的奇数。例如,在图10e的示例中,第四类型的面梯度算子(b30)可用于表示网格g0至g4、g5、g9、g10、g14、g15、g19和g20至g24与网格g6至g8、g11至g13和g16至g18之间的灰度变化。应理解,第四类型的面梯度算子的该示例仅仅是说明性的,第四类型的面梯度算子不限于此。
[0157]
根据本技术的一些示例性实施方式,第五类型的面梯度算子可用于表示:由超网格中的处于第一行第一列上的网格、处于第一行第二列上的网格、处于第二行第一列上的网格、处于第二行第二列上的网格、处于第(m-1)行第(m-1)列上的网格、处于第(m-1)行第m列上的网格、处于第m行第(m-1)列上的网格和处于第m行第m列上的网格组成的区域与处于第(m-1)行第一列上的网格、处于第(m-1)行第二列上的网格、处于第m行第一列上的网格、处于第m行第二列上的网格、处于第一行第(m-1)列上的网格、处于第一行第m列上的网格、处于第二行第(m-1)列上的网格和处于第二行第m列上的网格组成的区域之间的灰度变化。例如,在图10f的示例中,第五类型的面梯度算子(b31)可用于表示网格g0、g1、g5、g6、g18、g19、g23和g24与网格g3、g4、g8、g9、g15、g16、g20和g21之间的灰度变化。应理解,第五类型的面梯度算子的该示例仅仅是说明性的,第五类型的面梯度算子不限于此。
[0158]
图11a至图11d是用于说明根据本技术的随机梯度算子的示例的示意图。
[0159]
随机梯度算子可以是基于上述超晶格(视差网格)的任何梯度算子,其可以用于表示任何两个网格或任何多个网格之间的灰度变化。例如,在图11a至图11d的示例中,4个随机梯度算子(b0至b3)可以分别用于表示:网格g5、g6、g11和g16与网格g13、g14和g17之间的灰度变化(参考图11a);网格g11、g12和g18与网格g20至g22之间的灰度变化(参考图11b);网格g12、g16、g18和g20与网格g3、g6至g8之间的灰度变化(参考图11c);网格g6、g12、g13、g16和g21与网格g4、g9、g14、g19、g23和g24之间的灰度变化(参考图11d)。应理解,随机梯度算子的该示例仅仅是说明性的,其不限于此。
[0160]
根据本公开的实施方式,本公开还提供了一种电子设备、可读存储介质和一种计算机程序产品。
[0161]
该电子设备包括处理器和存储器,存储器与处理器连接并且存储有指令,该指令在被执行时致使处理器执行以上描述的方法。
[0162]
以上描述的方法可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0163]
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来
编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0164]
在本公开的上下文中,计算机可读介质可以是有形的介质,其可以包含或存储以供执行上述方法的程序或指令。计算机可读介质可以是计算机可读信号介质或计算机可读储存介质。计算机可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。计算机可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备或上述内容的任何合适组合。
[0165]
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献