掌桥专利:专业的专利平台
掌桥专利
首页

用于ORB加速的数据处理装置和方法、芯片和电子设备

文献发布时间:2023-06-19 16:08:01



技术领域

本公开涉及芯片技术领域,尤其涉及用于ORB加速的数据处理装置和方法、芯片和电子设备。

背景技术

Oriented FAST and rotated BRIEF(ORB)是一种广泛应用的特征提取和描述方案,被广泛用于同步定位与建图(Simultaneous Localization and Mapping,SLAM)等任务中,并能够极大地提升SLAM等任务的精度。相关技术中常常会采用硬件加速器来实现ORB的快速运算,但是这些硬件加速器仍然存在一些问题需要解决。

发明内容

第一方面,本公开实施例提供一种用于ORB加速的数据处理装置,用于生成目标图像中的特征点的描述子,所述用于ORB加速的数据处理装置包括:

目标图像块生成模块,用于从存储器中读取图像块,从读取的图像块中确定用于计算描述子的目标图像块;其中,所述存储器包括多个存储块,每个存储块包括多个存储地址,同一存储块的每个存储地址用于存储目标图像中同一行的多个列,且各个存储块的同一存储地址用于存储目标图像同一行中不同的列;

描述子生成模块,用于生成所述目标图像块中的特征点的描述子。

本公开实施例的存储器中同一存储块的每个存储地址用于存储目标图像中同一行的多个列,且各个存储块的同一存储地址用于存储目标图像同一行中不同的列,由于各个存储块中的同一地址中存储的数据可以在一个周期内扫描得到,使得一个周期能够扫描出同一行的多个列,连续扫描多个周期即可得到用于生成描述子的一个目标图像块,且每次扫描只需要调整地址偏移量即可,提高了数据读取效率。此外,上述存储方式只需要采用一个存储器即可实现目标图像块的读取,减少了用于ORB加速的数据处理装置的成本和体积。

第二方面,本公开实施例提供一种用于ORB加速的数据处理装置,用于生成目标图像中的特征点的描述子,所述用于ORB加速的数据处理装置包括:

角度计算模块,用于计算所述特征点的旋转角度;

描述子生成模块,用于基于所述旋转角度生成所述特征点的描述子;

其中,所述旋转角度基于所述特征点所在的目标图像块的质心计算得到,所述质心包括所述目标图像块在所述目标图像的行方向上的第一图像矩以及所述目标图像块在所述目标图像的列方向上的第二图像矩;所述角度计算模块包括:

第一计算单元,用于获取所述第一图像矩和所述第二图像矩的平方和;

浮点转换单元,用于将所述第一图像矩、所述第二图像矩和所述平方和转换为浮点数;

第二计算单元,用于计算转换后的平方和的算术平方根的倒数;

第三计算单元,用于基于转换后的所述第一图像矩、转换后的所述第二图像矩以及所述算术平方根的倒数计算旋转角度;

定点转换单元,用于将所述旋转角度转换为定点数后输出至所述描述子生成模块。

两个图像矩由于为像素加和因此必定为整数,而最后浮点转定点阶段输出定点数位宽也为固定值,因此本模块中的浮点单元并不完整,因此节省了面积和延迟。第二计算单元计算转换后的平方和的算术平方根的倒数的过程可以在硬件上通过移位等操作实现,因此在核心计算中使用浮点数的特殊性质,外层使用定点进行转换的方式可以同时提高计算精度和计算速度,并降低硬件面积。

第三方面,本公开实施例提供一种芯片,所述芯片包括本公开任一实施例所述的用于ORB加速的数据处理装置。

第四方面,本公开实施例提供一种电子设备,所述电子设备包括本公开任一实施例所述的芯片。

第五方面,本公开实施例提供一种用于ORB加速的数据处理方法,用于生成目标图像中的特征点的描述子,所述方法包括:

从存储器中读取图像块,从读取的图像块中确定用于计算描述子的目标图像块;其中,所述存储器包括多个存储块,每个存储块包括多个存储地址,同一存储块的每个存储地址用于存储目标图像中同一行的多个列,且各个存储块的同一存储地址用于存储目标图像同一行中不同的列;

生成所述目标图像块中的特征点的描述子。

第六方面,本公开实施例提供一种用于ORB加速的数据处理方法,用于生成目标图像中的特征点的描述子,所述方法包括:

获取目标图像块的第一图像矩和第二图像矩的平方和;所述第一图像矩为所述目标图像块在所述目标图像的行方向上的图像矩,所述第二图像矩为所述目标图像块在所述目标图像的列方向上的图像矩;

将所述第一图像矩、所述第二图像矩和所述平方和转换为浮点数;

计算转换后的平方和的算术平方根的倒数;

基于转换后的所述第一图像矩、转换后的所述第二图像矩以及所述算术平方根的倒数计算旋转角度;

将所述旋转角度转换为定点数;

基于转换后的所述旋转角度生成所述特征点的描述子。

第七方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开任一实施例所述的方法。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。

图1A是相关技术中的ORB算法的处理流程图。

图1B是确定特征点的具体过程的示意图。

图2是本公开实施例的用于ORB加速的数据处理装置的示意图。

图3是三阶段NMS的示意图。

图4是确定特征点的过程中目标图像在存储器中的存储方式的示意图。

图5是目标图像块的扫描过程的示意图。

图6和图7分别是用于ORB加速的数据处理装置中各模块的流水线的示意图。

图8是目标图像块生成模块的结构示意图。

图9是计算模块的结构示意图。

图10是计算模块中的比较单元的结构示意图。

图11是窗口过滤阶段的流程图。

图12是窗口过滤模块的结构示意图。

图13是网格过滤模块的结构示意图。

图14是包括两个处理内核的用于ORB加速的数据处理装置的示意图。

图15是本公开另一实施例的用于ORB加速的数据处理装置的示意图。

图16是本公开再一实施例的用于ORB加速的数据处理装置的示意图。

图17是生成描述子的过程中目标图像在存储器中的存储方式的示意图。

图18和图19分别是角度计算模块的结构示意图。

图20是包括多个PE的用于ORB加速的数据处理装置的示意图。

图21是本公开第四实施例的用于ORB加速的数据处理装置的示意图。

图22是本公开实施例的用于ORB加速的数据处理方法的示意图。

图23是本公开另一实施例的用于ORB加速的数据处理方法的示意图。

图24是本公开再一实施例的用于ORB加速的数据处理方法的示意图。

图25是本公开第四实施例的用于ORB加速的数据处理方法的示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合。

应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

为了使本技术领域的人员更好的理解本公开实施例中的技术方案,并使本公开实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本公开实施例中的技术方案作进一步详细的说明。

ORB是一种广泛应用的特征提取和描述方案,ORB的运算分为特征点提取,非极大值抑制(Non-Maximum Suppression,NMS)和描述子(descriptor)生成三部分。特征点提取部分可以采用FAST(Features from Accelerated Segment Test)算法,用于初筛特征点,NMS用于从初筛的特征点中过滤掉一部分较差的特征点,描述子生成部分用于对指定特征点生成描述该特征点的描述信息(即描述子)。下面参照图1A对ORB算法的处理流程进行说明。

FAST算法的核心思想在于,如果某个像素点周围连续N个点与该像素点的像素值差异大于一个阈值,则该像素点被视为特征点。其中,N为正整数,其取值可以是9、11或12等值,对应的FAST算法分别称为FAST-9算法、FAST-11算法和FAST12算法。下面以FAST-9算法为例进行说明。

对于一张给定的目标图像,FAST算法首先会以指定像素点(也称为候选特征点)为中心,确定出一块目标图像块(例如,以所述候选特征点为中心的一块7x7的图像区域),在此称之为Patch。可以从目标图像块中,将所述候选特征点周围圆周上的若干个点提取出来,得到一个像素序列。如图1B所示,所述像素序列包括所述候选特征点周围圆周上的16个点,图中的数值表示像素序列中各个点的序号。在该例子中,可以将像素序列记为I[1:16]。假设候选特征点的像素值为p,阈值为t,则FAST算法可包括以下步骤:

(1)计算出图像序列中各个像素点与候选特征点的像素值之间的差值d[i],其中,d[i]=p-I[i],0≤i≤15;

(2)对d进行分类。如果d[i]>t,则记M2[i]=1;d[i]<-t,则记M1[i]=1。这样可以将候选特征点对应的圆周上的像素点分类为3类:像素值明显大于候选特征点的像素值(满足d[i]>t)的像素点、像素值明显小于候选特征点的像素值(满足d[i]<-t)的像素点、与候选特征点的像素值无明显差异(既不满足d[i]>t,又不满足d[i]<-t)的像素点。

(3)使用8个像素点进行快速筛选(Quick Judge)。快速筛选使用下面的公式进行:

其中,“or”表示逻辑运算“或”,“and”表示逻辑运算“与”。

(4)如果一个候选特征点对应的像素序列满足上述两个条件Mask1F和Mask2F中的其中一个,即,Mask1F和Mask2F中的一者为1,则进行进一步筛选(Detail Judge),若均不满足则该候选特征点不视为特征点。进一步筛选为遍历圆周上的连续9个点,检查是否有连续9个点满足条件Mask1F或者条件Mask2F,若有则该候选特征点视为特征点,否则该候选特征点不视为特征点。

上述步骤将FAST算法分为两个阶段,这种分步筛选的特性使得FAST在速度上相比其他特征点算法有着显著的优势。进一步地,为了确保不同尺度的特征点均被提取到,可以在多层金字塔上进行特征点提取。

在某个点被视为特征点后,还可以计算该特征点的特征响应,因为当特征点过多时,需要对特征点进行筛选,挑选出较优的特征点。特征响应的计算有很多种方法,下面以OpenCV中计算特征响应的方法为例进行说明。首先,可以计算两个中间量A0和B0:

A0=max(AMp,AMn);

其中,

B0=min(BMp,BMn)

其中,

然后,可以根据A0和B0计算特征响应Score:

Score=-min(B0,-max(A0,t))-1。

在计算出特征响应后,需要进行局部非极大值抑制。这一步骤可以采用滑动窗口实现,以滑动窗口的大小是3x3为例,可以对特征点周围3x3的图像区域进行比较,如果3x3区域中特征响应最大的像素点与特征点不同,则将此特征点的特征响应置0。这样做可以删减一些局部较差的特征点。

生成描述子的过程可以基于rBRIEF(Rotated Binary Robust IndependentElementary Features)算法实现。为了保证图像旋转后特征点的描述子不变,需要对生成描述子的描述子对按照质心的方向进行旋转。一个特征点的描述子包含识别该特征点所需的关键信息。一个256bit的描述子可以包含256个描述子对,记为P[i,1:4],其中,1≤i≤256。令I[j,k]=Img[x+j,y+k],质心的计算如下:

其中,(x,y)为用于计算描述子的一个目标图像块的中心像素点的像素坐标,Img表示像素值,j和k为变量,假设所述目标图像块的大小为32×32,d为所述目标图像块中的一个圆,d=[15,15,15,15,14,14,14,13,13,12,11,10,9,8,6,3]。m

在得到m

然后,可以基于所述旋转量对描述子对进行偏移,偏移后的描述子对记为:

使用旋转后的描述子对进行计算,即可保证描述子的尺度不变性。

对于某个坐标为(x,y)的特征点,假设其第i个点对为:

那么该特征点的描述子可以描述为下面的公式:

对于描述子而言,不同层中提取的特征点都需要在最高分辨率层中进行计算。

为了提高ORB算法的处理效率,相关技术中一般采用加速器来进行ORB的快速运算,相关技术中的ORB加速器一般包括特征提取模块和描述子生成模块,所述特征提取模块用于从图像中提取特征,所述描述子生成模块用于为特征提取模块提取的特征点生成描述子。但是相关技术中的加速器仍然存在一些问题需要解决。

(1)NMS的计算。相关技术仅中,ORB加速器的特征提取模块实现了最简单的3x3的窗口型非极大值抑制,但是窗口过小使得生成的特征点数量过多,抑制效果不明显。并且,适用于SLAM任务的特征点需要尽可能的分散在图像上,集中在局部区域的特征点将严重影响SLAM系统的准确度,因此,采用3x3的窗口得到的特征点不适合SLAM跟踪。

(2)相关技术中,ORB加速器的特征提取模块在提取特征响应时的效率较低,导致特征点提取效率较低。

(3)相关技术中,ORB加速器的描述子生成模块未能解决不同特征点的描述子计算的数据冲突问题,描述子计算效率较低。

(4)为了保证图像旋转后特征点的描述子不变,在生成特征描述子之前,描述子生成模块需要对特征点的角度进行计算。在这一步骤中,传统方案为使用cordic算法进行拟合,受限于cordic算法自身的影响,生成的角度有收敛域和精度的限制。

基于此,本公开提供一种用于ORB加速的数据处理装置、芯片和电子设备,以解决以上至少一个技术问题。

如图2所示,是本公开一实施例中的用于ORB加速的数据处理装置,所述用于ORB加速的数据处理装置包括:

窗口过滤模块201,用于对目标图像在滑动窗口内的各个候选特征点的特征响应进行非极大值抑制处理,得到特征响应大于零的多个第一特征点;所述目标图像被划分为多个网格;

网格过滤模块202,用于对所述多个网格中每个网格内的第一特征点的特征响应进行非极大值抑制处理,得到特征响应大于零的多个第二特征点;

图像过滤模块203,用于对多个相邻的网格中的第二特征点进行过滤,得到特征响应大于零的多个第三特征点。

通过窗口过滤模块201进行的特征点过滤操作可以称为窗口过滤或者窗口抑制。在上述窗口过滤模块201中,可以采用一个滑动窗口按照预设滑动步长在目标图像上滑动,所述滑动窗口的尺寸可以是3x3、5x5等尺寸。滑动窗口每滑动一次,滑动窗口可以覆盖目标图像上的一组特征点,可以对滑动窗口在每个滑动位置处所覆盖的一组特征点均进行非极大值抑制处理。具体来说,可以判断当前覆盖范围内处于滑动窗口中心的中心特征点的特征响应是否满足窗口过滤条件,如果满足,则保留中心特征点的特征响应,否则将中心特征点的特征响应置零。所述窗口过滤条件为:所述滑动窗口当前覆盖范围内除中心特征点以外的其他特征点的特征响应均小于所述中心特征点的特征响应。

图3示出了窗口过滤的一个实施例,其中,每个矩形方格表示目标图像上的一个特征点,方格内的数字表示对应特征点的特征响应,灰色虚线框表示滑动窗口。为了简洁,图中仅示出了滑动窗口滑动到目标图像上的两个位置(分别记为P1和P2)时的覆盖范围,过滤前目标图像中各个特征点的特征响应如阵列a所示。可以看出,当滑动窗口处于位置P1时,中心特征点为目标图像中第1行第1列的特征点,该特征点的特征响应不满足上述窗口过滤条件,因此,目标图像中第1行第1列的特征点的特征响应置为0。同理,当滑动窗口处于位置P2时,中心特征点为目标图像中第5行第2列的特征点,该特征点的特征响应大于滑动窗口当前覆盖范围内的其他特征点的特征响应,因此,保留目标图像中第2行第2列的特征点的特征响应。通过这种方式,可以对目标图像中各个特征点的特征响应进行过滤,过滤后目标图像中各个特征点的特征响应如阵列b所示。

通过窗口抑制后保留的特征响应大于0的各个特征点可以称为第一特征点。经过窗口抑制操作后,保留的特征点的数量仍然过多,因此,可以通过网格过滤模块202进行进一步的过滤,网格过滤模块202进行的特征点过滤操作可以称为网格过滤或者网格抑制。

可以预先将目标图像划分为多个网格(cell),一个网格可以包括目标图像中的一块m行n列的图像区域,网格的尺寸大于滑动窗口的尺寸。在一些实施例中,假设目标图像的尺寸为640x400,可以将一块32x20的图像区域划分为一个网格,共划分出20x20个网格。为了便于描述,下面的实施例均以目标图像的尺寸为640x400,且网格的尺寸为32x20为例进行说明,然而本领域技术人员可以理解,目标图像的尺寸以及划分网格的方式不限于以上实施例所述的情况。

仍然参考图3,为了便于区分,以不同的颜色表示不同的网格。图中共划分出4个网格,每个网格的尺寸为4x4,分别为图中的黑色区域、深灰色区域、浅灰色区域和白色区域。在进行网格过滤时,可以对同一网格内各个特征点的特征响应进行非极大值抑制,仅保留该网格内的最大特征响应,并将除最大特征响应以外的其他特征响应置零。例如,在阵列b的黑色区域所示的网格中,共包括“7”和“9”两个特征响应,因此,可以将特征响应“7”置零,并保留特征响应“9”。同理可以得到其他三个网格内的网格过滤结果,整张目标图像的网格过滤结果如图3中的阵列c所示,经网格过滤后保留的特征响应大于零的各个特征点可以称为第二特征点。

经网格过滤后的特征点数量仍然较多,因此,可以通过图像过滤模块203进一步进行特征点过滤,图像过滤模块203执行的过滤操作可以称为图像级过滤。图像级过滤可以以多个相邻的网格为单位进行,例如,对于某一个网格(称为网格GA),可以获取该网格周围临近的8个网格(称为网格GB)。对于网格GA中的任意一个特征点rA,如果任意一个网格GB中存在满足以下条件的特征点rB,则将特征点rA的特征响应置零:rB的特征响应大于rA的特征响应,且rB与rA之间的距离小于预设距离。仍参考图3,假设目标图像中深灰色网格中的特征点(即特征响应为“9”的特征点)与白色网格中的特征点(即特征响应为“15”的特征点)之间的距离小于所述预设距离,则可以将特征响应“9”置零,图像级过滤结果如图3中的阵列d所示。

本实施例中的数据处理装置用于对相关技术中的ORB加速器的特征提取模块进行改进,本公开实施例通过采用上述三阶段过滤方式(窗口过滤、网格过滤和图像级过滤),能够获得以下技术效果:

首先,如上所述,相关技术中仅进行3x3的局部NMS不足以筛选掉密集特征点,从而不适合SLAM跟踪,本公开实施例在窗口抑制的基础上增加了网格过滤和图像级过滤操作,能够过滤掉更多的特征点,使得特征点分散在图像上,得到的特征点适合用于SLAM跟踪。

其次,相关技术中的一种NMS方案为,首先通过排序找出目前特征点中响应最大的点,选中该特征点,随后在其周围创建Mask,Mask覆盖到的点被筛选掉。反复上述过程,随后得到筛选后的特征点。该方案的问题在于该方案属于纯串行方案,同时Mask的创建需要进行大量距离运算。对于一些特征点密集的图片会造成突发性的大延迟,SLAM系统中突发性的大延迟是需要避免的。同时上述纯串行过程不利于硬件实现。

而本公开采用的上述三阶段过滤方式的过滤尺度逐渐增加,通过滑动窗口能够首先过滤掉大部分不满足要求的特征点,由于滑动窗口的尺度较小,每次进行窗口过滤时进行排序和比较的次数较少;经窗口过滤后,筛选掉了一部分不满足条件的特征点,从而使得在进行尺度更大的网格过滤时,进行排序和比较的次数大大减少;同理,由于网格过滤操作进一步减少了特征点数量,在进行图像级过滤时,进行排序和比较的次数也大大减少。因此,通过上述逐级削减特征点数量的方式,能够在减少特征点数量的情况下,有效减少过滤过程中排序和比较的次数,提高了过滤过程的效率,并且有利于硬件实现。

此外,窗口过滤和网格过滤的时间消耗均与目标图像的像素数量相关,是一个固定值,由于网格大小固定,因此图像级过滤的时间消耗存在一个最大值,并且,受限于网格数量,这个最大值仍然保持在一个较低水平。因此,上述三阶段过滤方式的处理时间的稳定性,延迟较低,适用于实时性要求较高的应用场景。

在一些实施例中,所述用于ORB加速的数据处理装置还包括计算模块,用于计算所述目标图像中各个目标图像块中的特征点的特征响应,并将所述目标图像块中的特征点的特征响应输出至所述窗口过滤模块。所述目标图像块为计算特征响应的一个最小图像单元,如前面的实施例所述,可以将一块7x7的图像区域作为一个目标图像块,该目标图像块可称为Patch。

在一些实施例中,所述目标图像可以包括多个图像块;所述用于ORB加速的数据处理装置还包括:目标图像块生成模块,用于从存储器中获取所述目标图像中的图像块,基于所述图像块生成用于计算所述特征响应的目标图像块。生成的目标图像块可以送入计算模块用于计算特征响应。其中,一个图像块(Block)的尺寸可以大于或等于所述一个图像块的尺寸,例如,在目标图像块的尺寸为7x7的情况下,图像块的尺寸可以是8x8,这样,每次读取一个图像块,可以从中获取多个目标图像块,实现了数据复用。

在一些实施例中,所述用于ORB加速的数据处理装置还可以包括地址生成模块,用于生成各个图像块在存储器中的存储地址。所述地址生成模块可以基于数据块的存储地址从存储器中扫描出图像块,并将扫描出的图像块输出至目标图像块生成模块。

为了保证目标图像的高效读取,可以对目标图像的存储方式进行改进。在一些实施例中,用于存储所述目标图像的存储器可以包括多个存储块,每个存储块包括多个存储地址;同一图像块中不同的行分别存储在不同存储块的同一存储地址下,且至少两个图像块中对应的行存储在相同的存储块中。

下面仍以目标图像的大小为640x400,一个图像块的大小为8x8,一个目标图像块的大小为7x7为例进行说明,限于篇幅,图中仅示出了目标图像的前16行以及每一行的前24列。参见图4,存储器包括8个存储块,记为Block1,Block2,……,Block8。每个存储块包括多个存储地址,记为Addr0,Addr1,……Addr82,……。一个存储地址的宽度为64bit,共计可存储8个像素点。以目标图像中前8行为例,前8行的1-8列为一个图像块(称为图像块1),前8行的9-16列为另一个图像块(称为图像块2),前8行的17-24列为另一个图像块(称为图像块3),以此类推。可以看出,在图像块1中,每一行均存储在不同的存储块中,例如,第1行存储在Block1中,第2行存储在Block2中。并且,图像块1中的每一行均存储在同一存储地址Addr0中。此外,图像块2中的1-8行以及图像块3中的1-8行也对应存储在Block1-Block8中,也就是说,各图像块中的第1行均存储在Block1中,各图像块中的第2行均存储在Block2中,以此类推。不同图像块的区别在于,各图像块存储在不同的存储地址下,例如,图像块1存储在存储地址Addr0中,图像块2存储在存储地址Addr1中。

在一些实施例中,所述地址生成模块可以获取所述图像块在对应存储块中的存储地址与所述对应存储块的初始存储地址之间的地址偏移量;基于所述初始存储地址和所述地址偏移量确定目标地址;从所述目标地址中扫描所述图像块,并将扫描出的图像块输出至所述目标图像块生成模块。所述初始存储地址既可以是目标图像中第1个图像块的存储地址,即图4中的存储地址Addr0,也可以是存储器的起始存储地址,例如,0。上述存储模式使得单纯地进行地址的累加便可实现行扫描,而调整地址偏移量便可以调整行扫描的起始位置,例如当Block1和Block2从80开始累加,而Block2到Block8从0开始累加,此时便可以实现第3行到第10行的行扫描,提高了图像块的读取效率。

如图5所示,地址生成模块直接作用于存储器,用于进行逐行扫描,因为在存储器中将图像分为8个Block,可以同时进行8行的行扫描,而一个目标图像块的大小为7x7,因此一次行扫描可以计算两行的特征响应。如图5中的(5-a)所示,第一次扫描后得到的用于计算特征响应的像素点为(5-a)中黑框内边缘的一圈像素点,以及灰框内边缘的一圈像素点,从而得到同一列的两个特征响应。第二次扫描时,黑框和灰框均向右移动一个像素位置,基于移动后的黑框和移动后的灰框内边缘的一圈像素点可以得到另一列的两个特征响应。因此,第一个8x8的图像块仅能够支撑两个时钟周期,但当第2个8x8的图像块被取出后,此时便可以支撑8个时钟周期,在此行的后续阶段,均为每8个周期读取一个8x8的图像块。应当说明的是,目标图像中的各个8x8的图像块可以是重叠的,例如,一个8x8的图像块包括目标图像中第1-8行中的第1-8列(即前述图像块1),另一个8x8的图像块包括目标图像中第2-9行中的第1-8列(称为图像块4)。同理,前述图像块2整体下移一个像素位置,可以得到图像块5;前述图像块3整体下移一个像素位置,可以得到图像块6。从图像块4、图像块5和图像块6中获取目标图像块的方式与从图像块1、图像块2和图像块3中获取目标图像块的方式类似,分别如图5中的(5-d)、(5-e)和(5-f)所示,此处不再赘述。

在所述图像块扫描完成的情况下,地址生成模块还可以对所述地址偏移量进行调整,并基于所述初始存储地址和调整后的地址偏移量确定目标地址。如图5中的(5-b)所示,在每行扫描完后,对两个图像块的地址偏移量(如虚线箭头所示)进行修改,即可实现整张目标图像的目标图像块生成。地址偏移量的调整方式具体可见图5表格中的数值,例如,在扫描目标图像前8行中的第9-16列时,将地址偏移量调整为1;在扫描目标图像前8行中的第17-24列时,将地址偏移量调整为2。对于行扫描过程中的地址生成。如图5中的(5-c)所示,按照这样的方式逐行读取,实现了目标图像中各个8x8的图像块的顺序发送,并可以在后续的目标图像块生成过程中,保证每个时钟周期均可以生成用于获取两个特征响应的目标图像块,从而保证流水线的畅通。

当然,以上实施例中的存储方式仅为一种可选的实现方式,本公开的目标图像的存储方式不限于此。例如,存储器中可以包括16个存储块,其中一组(共8个)存储块用于存储目标图像中的第1-200行,另一组(也为8个)存储块用于存储目标图像中的第201-400行,每组存储块的存储方式与前述实施例中的存储方式类似,此处不再赘述。又例如,每个存储块中存储的列数可以大于一个图像块的列数,在图像块的列数为8的情况下,一个存储块中可以存储9列、10列或者更多列数据。再例如,一个存储块中可以存储图像块中的多行数据。相应地,数据扫描方式可以基于数据存储方式进行调整,此处不再一一展开说明。

本公开实施例对特征响应的计算过程进行了全流水的设计,在生成特征响应的过程中进行NMS。如图6所示,在开始处理之后,计算模块可以扫描整张目标图像,每次扫描目标图像中的若干行,并计算这若干行的特征响应,计算出的特征响应可以立即送入窗口过滤模块进行处理,随后进行网格过滤。假设滑动窗口的大小为3x3,网格大小为32x20,则可以按照两行的方式扫描计算特征响应,特征响应生成后立即送入窗口过滤模块,随后对窗口过滤结果进行网格过滤,由于特征响应按行生成,因此在前20行的网格过滤均完成后,便可以进行第一行的图像级过滤。随后每生成一行网格级别的过滤结果,便可以即时进行图像级过滤。在上述过程中,网格过滤结果被设计为即时输出,NMS的一部分被融合进特征响应计算的流水线进行处理,不会带来严重的串行延迟。因此,本方案在减少特征点数量的同时,保证了处理时间的稳定性,并减少了串行延迟。

在上面的流水线中,由于流水线各阶段的执行时间具有稳定性,因此,在用于ORB加速的数据处理装置被使能后,仅需延迟若干周期后激活对应的模块,即可启动整个流水线。

在一些实施例中,所述用于ORB加速的数据处理装置还包括控制单元,用于向所述地址生成模块、所述目标图像块生成模块、所述窗口过滤模块和所述网格过滤模块发送使能信号,用于触发所述目标图像块生成模块、所述窗口过滤模块和所述网格过滤模块执行相应的操作。

其中,所述目标图像块生成模块接收到使能信号的时间基于所述地址生成模块接收到使能信号的时间以及所述目标图像块生成模块获取一个图像块的时长确定;所述窗口过滤模块接收到使能信号的时间基于所述目标图像块生成模块接收到使能信号的时间、所述目标图像块生成模块生成目标图像块的时长以及所述计算模块计算所述目标图像块中的特征点的特征响应的时长确定;所述网格过滤模块接收到使能信号的时间基于所述窗口过滤模块接收到使能信号的时间以及所述窗口过滤模块获取所述多个第一特征点的时长确定。

如图7所示,地址生成模块可以响应于接收到使能信号,确定当前待读取的图像块在存储器中的存储地址,并从所述存储地址中读取一个图像块输出到目标图像块生成模块。目标图像块生成模块延迟4周期后接收到所述使能信号,并响应于所述使能信号生成目标图像块,每个周期可以生成两个目标图像块。生成的目标图像块可以发送给计算模块计算特征响应,每个周期可以生成2行特征响应。窗口过滤模块延迟19周期后接收到所述使能信号,并响应于所述使能信号进行窗口过滤,每次得到2行经窗口过滤后的特征响应。网格过滤模块延迟28周期后接收到所述使能信号,并响应于所述使能信号进行网格过滤,每次得到2行经网格过滤后的特征响应。

各模块接收到的使能信号可以由控制单元在延迟不同的周期之后发送,也可以由控制单元在同一时刻发送,并通过延迟单元延迟不同的周期,对此本公开不做限制。通过上述实施例,能够自动实现各个模块的流水化处理。下面对各模块的具体结构进行说明。

在一些实施例中,所述目标图像块生成模块包括:第一选择单元,至少两个存储单元,对齐单元以及扫描单元;所述第一选择单元用于从所述至少两个存储单元中选择一个存储单元,相邻两次选择用于选中不同的存储单元;所述至少两个存储单元中的每个存储单元均用于在被所述第一选择单元选中的情况下,对从所述存储器中获取的图像块进行缓存;所述对齐单元用于对缓存的图像块进行对齐,得到对齐图像块,所述对齐图像块中各像素点之间的相对位置与所述各个像素点在对应目标图像块中的相对位置相匹配;扫描单元,用于从所述对齐单元中逐行扫描出所述目标图像块。

本公开实施例采用至少两个存储单元构成乒乓缓存(Ping-Pong Buffer),下面以存储单元数量等于2的情况为例,并参照图8,对生成目标图像块的具体方式进行说明。在每接收到一个图像块后,会将其即时写入Ping-Pong Buffer中。每个存储单元中可以包括多个缓存块,用于对从存储器中各个存储块获取的数据进行缓存。缓存块的数量可以大于或等于存储块的数量。在接收到图像块1之后,可以将图像块1存储到其中一个存储单元(称为Buffer1)中,并在接下来的2个周期,基于Buffer1中缓存的图像块生成目标图像块;在接收到图像块2之后,可以将图像块2存储到另一个存储单元(称为Buffer2)中,并在接下来的8个周期,基于Buffer1和Buffer2中缓存的图像块生成目标图像块;在接收到图像块3之后,可以将图像块3存储到Buffer1,并在接下来的8个周期,基于Buffer2和Buffer1中缓存的图像块生成目标图像块;以此类推。

可通过第一选择单元(记为Ping-Pong Write Switch)来确定用于缓存各个图像块的存储单元,第一选择单元可以交替地选择各个存储单元,仍以存储单元数量等于2为例,第一选择单元可以按照Buffer1,Buffer2,Buffer1,Buffer2……的顺序,交替地选择两个存储单元。被选择的存储单元可以用来存储图像块。

在上述存储过程中,在切换行时,会出现Block顺序与逻辑行顺序不匹配的问题。例如,对于前述的图像块4(目标图像中第2-9行中的第1-8列),该图像块的1-7行依次存储在Block2-Block8中,该图像块的第8行此处在Block1中,但扫描时是按照Block1到Block8的顺序依次扫描的,因此,扫描得到的图像块中各行的顺序依次是:第8行,第1行,第2行,……,第7行。此外,由于Ping-Pong Buffer自身的特性,会产生行错位的问题。例如,在接收到图像块2之后,Buffer1中缓存的是目标图像中在前的列,Buffer2中缓存的是目标图像中在后的列,因此需要先获取Buffer1中的数据,再获取Buffer2中的数据。而在接收到图像块3之后,Buffer2中缓存的是目标图像中在前的列,Buffer1中缓存的是目标图像中在后的列,因此需要先获取Buffer2中的数据,再获取Buffer1中的数据。

因此,可以通过设置对齐单元(记为Image Align Switch)来对存储单元中的数据进行对齐,在对齐之后,图像被整理成了行和列顺序都正确的状态。如图8所示,在对齐之前,Buffer1和Buffer2中存储的数据依次对应目标图像块中第7行,第8行,第1行,……,第6行,且Buffer2中存储的是在前的列,Buffer1中存储的是在后的列。通过对齐,得到的图像块中的行和列均与目标图像块中的行和列相对应。在上述实施例中,存储单元中的各个缓存块可以由触发器(FlipFlop,FF)构成,因此可以做到完全的随机读。在对齐之后,扫描单元(Patch Scan)可以顺序扫描出用于计算特征响应的目标图像块,此处生成的目标图像块为两行目标图像块,供后续模块同时计算两行特征响应。

在一些实施例中,所述目标图像块生成模块还包括计数器,用于对所述目标图像块生成模块从所述存储器获取图像块的次数进行计数;所述第一选择单元用于基于所述计数器的计数值与所述存储单元的数量,从所述至少两个存储单元中选择一个存储单元;所述对齐单元用于基于所述计数器的计数值、所述存储单元的数量与所述图像块的行数对各个存储单元中的数据进行对齐。

仍以图像块大小为8x8,存储单元数量等于2为例,第一选择单元可以获取计数器的计数值与2的取模结果。如果取模的结果为1,则选择Buffer1,如果取模的结果为0,则选择Buffer2。对齐单元也可以获取计数器的计数值与2的取模结果,如果取模的结果为1,则将Buffer1中的数据作为在前的列,将Buffer2中的数据作为在后的列;如果取模的结果为0,则将Buffer2中的数据作为在前的列,将Buffer1中的数据作为在后的列。此外,对齐单元还可以获取计数值与8的取模结果,并基于取模结果调整存储单元中各行的顺序。第一选择单元和对齐单元获取的取模结果可以直接由计数器输出,也可以是在获取计数器的计数值之后,在本单元中进行取模运算后得到。

在两行Patch被流水地生成后,需要对其进行特征响应的计算,特征响应的计算过程仍然为全流水设计。在一些实施例中,所述计算模块包括:提取单元,用于从所述目标图像块中提取像素序列,所述像素序列中包括所述目标图像块中的特征点周围的多个目标像素点;求差单元,用于分别获取所述像素序列中各个像素点的像素值与所述目标图像块中的特征点的像素值之间的差值;重组单元,用于获取多组差值,每组差值包括所述像素序列中的连续多个目标像素点中每个目标像素点对应的差值;多个比较单元,每个比较单元用于从一组差值中确定最大差值和最小差值,基于所述最大差值确定第一中间量,基于所述最小差值确定第二中间量;计算单元,用于根据各组差值对应的第一中间量和第二中间量计算所述目标图像块中的特征点的特征响应。

参见图9,假设像素序列为前述实施例中所述的I[1:16],则通过提取单元可以提取出这些像素点。求差单元可以计算出像素序列中各个像素点与中心像素点的像素值p之间的差值,分别记为p-1,p-2,……,p-16。为了便于描述,为上述各个差值分配序号,例如,p-1的序号为0,p-2的序号为1,以此类推。重组单元可以从求差单元输出的多个差值中,获取连续的N个差值。在FAST-9算法中,N的取值为9。因此,所述连续的N个差值可以包括序号为1到9的差值,序号为2到10的差值,序号为3到11的差值等等。然后,可以通过比较单元对一组连续的9个差值进行比较,得到第一中间量和第二中间量,即前述实施例中的A0和B0。图中的ap0,ap1,bp0和bp1均为缓存,分别用于对Amp、AMn、BMp、BMn进行缓存,参见前面的公式,Amp和AMn用于计算A0,BMp和BMn用于计算B0。为了提高处理效率,此处可以采用多个并行的比较单元,比较单元的数量可以等于差值的组数。然后,可以采用计算单元基于第一中间量和第二中间量计算出特征响应,计算方式如前述实施例中计算Score的公式所述。

进一步地,为了便于硬件实现,所述求差单元包括多个子单元,每个子单元用于获取所述像素序列中的一个像素点的像素值与所述目标图像块中的特征点的像素值之间的差值;其中,所述像素序列中在前的若干个像素点中每个像素点对应的差值均被所述多个子单元中的两个子单元获取。仍参见图9,像素序列中序号为0-9的像素点对应的差值均可以被求差单元中的两个子单元获取,每个子单元可以对一组差值进行排序,并基于排序结果确定这一组差值对应的第一中间量和第二中间量。

排序任务通常是一个串行度较高的任务,为了保证整体的流水性,可以采用图10所述的流水排序器,其思想与归并排序保持一致,同时不需要在过程中缓存所有数据。图10以图9中第一列的比较单元为例对排序的过程进行说明,根据前述实施例中AMp和AMn的计算公式,可以将d0,d1,……,d9送入图10中的数据输入端,并根据图10中的连接关系计算得到第一中间量和第二中间量。其中,x和y为d0,d1,……,d9中的两个数,A表示这两个数中的较大者,I表示这两个数中的较小者,H表示保持对应的数不变并输出,图中即为输出0。

在一些实施例中,所述计算模块还包括掩膜生成模块(Mask Generator),用于获取所述图像块中的各个目标像素点的掩膜,所述目标像素点为所述图像块中的候选像素点周围的像素点,一个目标像素点的掩膜用于表征所述目标像素点与所述候选像素点的像素值差异;第一筛选模块(Quick Judge),用于基于各个目标像素点的掩膜,确定所述候选特征点是否满足第一条件;所述第一条件为表征所述像素值差异大于预设差异的掩膜的数量大于第一数量;第二筛选模块(Detail Judge),用于在所述候选特征点满足第一条件的情况下,确定所述候选特征点是否满足第二条件,并在所述候选特征点满足第二条件的情况下,将所述候选特征点确定为特征点;所述第二条件为表征所述像素值差异大于预设差异的掩膜的数量大于第二数量;所述第二数量大于所述第一数量。

其中,所述掩膜即为前述公式中的Mask1F或Mask2F,第一筛选模块可以采用前述“快速筛选”的实施例中所述的方式进行筛选,如果一个目标图像块满足Mask1F和Mask2F中的任意一者,则将该目标图像块输出至第二筛选模块进行筛选。第二筛选模块可以采用前述“进一步筛选”的实施例中所述的方式进行筛选,此模块并行地遍历圆周上所有可能的连续9个点位,共计16种可能。掩膜生成模块、第一筛选模块和第二筛选模块的具体处理方式详见前述实施例,此处不再赘述。

在一些实施例中,所述计算模块还包括第二选择单元,用于在一个目标图像块中包括特征点的情况下,将所述目标图像块输出至所述提取单元;在一个目标图像块中不包括特征点的情况下,将全零的图像块输出至所述提取单元。所述第二选择单元即图9中的选择器,该选择器可以在特征点判定通过的情况下,选择目标图像块输出至提取单元;在特征点判定未通过的情况下,选择全零图像块输出至提取单元。所述特征点判定通过即为目标图像块中包括特征点。

上述计算模块获取的特征点可以输出至窗口过滤模块进行过滤。在一些实施例中,所述窗口过滤模块可以包括:第一缓存单元,写单元,第二缓存单元,读单元,过滤单元;所述第一缓存单元用于对目标图像块中的各组特征点的特征响应进行缓存,所述目标图像块中的每组特征点包括所述目标图像块中的若干行特征点;所述写单元用于在获取到所述目标图像块中的第i+1组特征点的特征响应的情况下,从所述第一缓存单元中读取所述目标图像块中的第i组特征点的特征响应,并将所述第i组特征点的特征响应和所述第i+1组特征点的特征响应写入所述第二缓存单元;其中,i为正整数,所述写单元用于在获取到所述目标图像块中的第1组特征点的特征响应的情况下,获取一组全零的特征响应,并将所述全零的特征响应和所述第1组特征点的特征响应写入所述第二缓存单元;所述读单元用于从所述第二缓存单元中读取所述滑动窗口内的特征点的特征响应,并送入所述过滤单元;所述过滤单元用于输出所述滑动窗口内的第一特征点的特征响应。

参见图11和图12,在滑动窗口的大小为3x3的情况下,窗口过滤操作也可以称为3x3 NMS。3x3 NMS流水的难点在于其需要依赖尚未产生的数据,为此本公开设计了如下的双阶段的3x3 NMS。如图11所示,首先在缓存中预存0,由于滑动窗口的限制,第一行特征响应实质上是目标图像的第四行,同时由于存储器为8个Block的设计,因此可以一次性计算两行特征响应。对于到来的两行特征响应,将其与两行0拼成4行特征响应,送入第二缓存单元,由读单元从第二缓存单元中读出用于计算特征响应的3x3的图像块,即图中所述的NMSBlock。3x3的NMS需要计算目标行的上下两行数据,因此最后得到的数据为一行0和经3x3NMS的第四行特征响应,在第4行和第五行进行计算的同时,可将第四行特征响应写入缓存,在第6行和第7行数据到来时拼接输出,使用4-7行的数据输出第5行和第6行经3x3 NMS的特征响应,以此类推,最后一行的处理与第一行类似。

在一些实施例中,所述第一缓存单元包括多个第一缓存子单元,每个第一缓存子单元均用于缓存一组特征点的特征响应,所述多个第一缓存子单元中的至少一个第一目标缓存子单元在写入特征响应的过程中,所述多个缓存子单元中除所述第一目标缓存子单元以外的至少一个第二目标缓存子单元中已缓存的特征响应被所述写单元读出。

所述多个第一缓存子单元可以构成乒乓缓存。参见图12,以第一缓存子单元的数量等于2为例,所述多个第一缓存子单元可以包括缓存A(Buffer A)和缓存B(Buffer B)。当两行特征响应到来时,可以先将这两行特征响应存入Buffer A,然后从Buffer A中读取特征响应,并按照前述方式与另外两行特征响应拼接成四行特特征响应。与此同时,可以通过Buffer B缓存另外两行特征响应,并在下一次处理时将Buffer B中缓存的特征响应与另外两行特征响应拼接成四行特特征响应。这样,可以提高数据读写效率。通过选择器1可以选择性地将两行特征响应存入Buffer A或者Buffer B,通过选择器2可以选择性地将BufferA或者Buffer B中的数据读出,通过选择器3可以选择性地将两行特征响应或两行全零行读出。

在一些实施例中,所述第二缓存单元包括多个第二缓存子单元,每个第二缓存子单元用于对由所述第i组特征点的特征响应和所述第i+1组特征点的特征响应组成的特征响应阵列中的一列;所述读单元用于对所述多个第二缓存子单元中的特征响应进行轮询,每次轮询按照一种输出顺序输出所述多个第二缓存子单元中的部分第二缓存子单元中的特征响应,所述输出顺序与轮询次数相关。

仍参见图12,由于写单元获取的特征响应的行数为4,因此,可以设置4个第二缓存单元,即图中的寄存器Reg1、Reg2、Reg3和Reg4。写单元会将所述四行特征响应中的每列数据轮流写入Reg1、Reg2、Reg3和Reg4,随后按照一定规律读出。例如,当寄存器Reg3被写入时,寄存器Reg1和寄存器Reg2应当存储有Reg3前两列的数据,此时Reg1、Reg2、Reg3即可构成一个3x3的数据块,因此Reg1、Reg2、Reg3的数据被读出,分割成两个3x3的数据块进行3x3NMS的运算,完成后输出。对于4个寄存器,由于采用轮流写入的机制,因此读取时同样存在类似的轮询机制,具体的读取顺序为:Reg1,Reg2,Reg3;Reg2,Reg3,Reg4;Reg3,Reg4,Reg1;和Reg4,Reg1,Reg2。

经窗口过滤的特征响应可以送入网格过滤模块进行进一步过滤。在一些实施例中,所述网格过滤模块包括多个最大保持阵列,不同的最大保持阵列对应不同的列地址;所述多个最大保持阵列中的每个最大保持阵列用于:获取对应于本阵列的列地址的第一特征点的特征响应;在获取的特征响应的行数达到预设行数的情况下,将获取的各个第一特征点的特征响应中的最大特征响应输出至所述图像过滤模块。

参见图13,假设网格大小为32x20,则每个最大保持阵列(Max Hold Cell)可以用于对其中32列的特征响应进行比较,并输出其中最大的特征响应。例如,第一个最大保持阵列可以对第0到31列的特征响应进行比较,第二个最大保持阵列可以对第32到63列的特征响应进行比较,以此类推。对于按列进入的两行3x3 NMS结果,会根据列地址分配进入不同的最大保持阵列,每个最大保持阵列均保持各自的最大值,每32行输出一次结果并清零当前存储值。同时由于流水线各级运行时间固定,因此在流水线先前的各模块仅传递3x3 NMS结果。

在进行网格过滤之后,可以进行图像级过滤。图像级过滤为一个纯串行步骤,可以由状态机实现,但是由于各列的网格过滤结果在运行中不断生成,因此图像级过滤带来的延迟仅需要考虑最后一行,图像级过滤需要对每个网格的周围8个网格进行比较,这当中需要8个读周期,8个计算周期和9个写回周期,因此图像级过滤带来的总延迟为20x(8+8+9)=500个时钟周期,在1GHz下相当于0.5us。对于多金字塔的情况,由于较小的两层金字塔计算速度快于最高层,因此图像级过滤的延迟仅会出现在最高层中。对于特征响应生成整体的帧延迟,首先需要对整张目标图像的像素扫描一边,像素共计640x400=256000个,由于设计了两行并行扫描的处理核,因此目标图像扫描需要128000个周期进行,由于特征响应计算,3x3 NMS和网格级别的NMS是流水进行的,而流水线延迟为28个周期,再计算3x3 NMS中需要延迟一行,因此流水线延迟共计128668个周期,再计算上前文所述的图像级过滤的周期数,共计129168个周期,在1GHz下,理论延迟为0.13ms。相关技术中,ORB算法在2GHz下的帧延时一般为10ms左右,因此,本公开的方案能够有效降低帧延时。

在一些实施例中,所述用于ORB加速的数据处理装置包括多个处理内核,每个处理内核均包括所述窗口过滤模块和所述网格过滤模块;不同的处理内核用于对不同分辨率的目标图像进行过滤,不同分辨率的目标图像基于不同的压缩比例对同一张原始图像进行压缩得到;所述图像过滤模块还用于将各个目标图像中的第三特征点进行合并,得到所述原始图像的特征点。

通过处理同一张原始图像对应的不同分辨率的目标图像,能够确保原始图像中不同尺度的特征点均被提取到。可选地,所述原始图像可以是目标图像中的一者,例如,假设原始图像的尺寸为640x400,可以将所述640x400的原始图像确定为其中一张目标图像,按照4倍的压缩比例对原始图像进行压缩,得到320x200的第二张目标图像和160x100的第三张目标图像。或者,也可以仅将所述320x200的图像和160x100的图像确定为目标图像,而不将原始图像确定为目标图像。当然,以上各图像的分辨率和压缩比例均为示例性说明,本公开所采用的各图像的分辨率和压缩比例还可以是其他数值。

由于目标图像的数量为多张,且不同的目标图像分辨率不同,因此,每张目标图像所需的处理时长是不同的。为了提高处理效率,需要合理地将各目标图像分配给所述多个处理内核。在一些实施例中,每个处理内核被分配至少一张目标图像,被分配给同一处理内核的各目标图像在对应的处理内核中被串行处理;其中,各个处理内核处理分配到本处理内核的目标图像的总时长之差小于预设差值。通过这种方式,提高了NMS方案的并行性,并提高了资源利用率。

参见图14,以包括Core1和Core2这两个处理内核的情况为例,并假设包括分辨率为640x400的目标图像LvL0、分辨率为320x200的目标图像LvL1和分辨率为160x100的目标图像LvL2,其中,低分辨率图像可以通过图像金字塔(例如,高斯金字塔、拉普拉斯金字塔等)获取。由于两张低分辨率的目标图像的计算量比最高分辨率的目标图像小,因此可以设计两个并行计算通道,两条计算通道分别由Core1和Core2实现。在使用一个通道计算最高分辨率的目标图像的过程中,使用另一个通道顺序计算另外两张低分辨率的目标图像,再考虑金字塔构建所需的时间,两条计算通道所需的处理时间相近。这样,可以使空闲资源保持在一个较低的水平。

参见图15,本公开实施例还提供一种用于ORB加速的数据处理装置,用于确定目标图像中的特征点,所述目标图像包括多个图像块,同一图像块中不同的行分别存储在存储器中不同存储块的同一存储地址下,且至少两个图像块中对应的行存储在所述存储器的相同的存储块中;所述用于ORB加速的数据处理装置包括:

目标图像块生成模块1501,用于从各个存储块的目标存储地址中获取图像块,基于获取的图像块生成目标图像块;

计算模块1502,用于计算所述目标图像块中候选特征点的特征响应;

过滤模块1503,用于基于所述候选特征点的特征响应从所述候选特征点中确定目标特征点。

本实施例中的数据处理装置用于对相关技术中的ORB加速器的特征提取模块进行改进。上述过滤模块1503可以包括实施例一中的窗口过滤模块201、网格过滤模块202和图像过滤模块203,也可以仅包括窗口过滤模块201,或者采用其他的结构,本实施例中各模块的功能可参见前述实施例一,此处不再赘述。

在一些实施例中,所述地址生成模块可以获取所述图像块在对应存储块中的存储地址与所述对应存储块的初始存储地址之间的地址偏移量;基于所述初始存储地址和所述地址偏移量确定目标地址;从所述目标地址中扫描所述图像块,并将扫描出的图像块输出至所述目标图像块生成模块。所述初始存储地址既可以是目标图像中第1个图像块的存储地址,也可以是存储器的起始存储地址,例如,0。上述存储模式使得单纯地进行地址的累加便可实现行扫描,而调整地址偏移量便可以调整行扫描的起始位置,提高了图像块的读取效率。

参见图16,本公开实施例还提供一种用于ORB加速的数据处理装置,用于生成目标图像中的特征点的描述子,所述用于ORB加速的数据处理装置包括:

目标图像块生成模块1601,用于从存储器中读取图像块,从读取的图像块中确定用于计算描述子的目标图像块;其中,所述存储器包括多个存储块,每个存储块包括多个存储地址,同一存储块的每个存储地址用于存储目标图像中同一行的多个列,且各个存储块的同一地址用于存储目标图像同一行中不同的列;

描述子生成模块1602,用于生成所述目标图像块中的特征点的描述子。

本实施例中的数据处理装置用于对相关技术中的ORB加速器的描述子生成模块进行改进。本公开实施例的目标图像块中可以包括多个特征点,所述多个特征点可以采用实施例一或实施例二中的用于ORB加速的数据处理装置得到,例如,可以通过实施例一中的窗口过滤模块201对目标图像中的候选特征点进行窗口过滤,得到特征响应大于零的多个第一特征点,再通过网格过滤模块202对第一特征点进行网格过滤,得到特征响应大于零的多个第二特征点,然后通过图像过滤模块203对多个相邻的网格中的第二特征点进行过滤,得到特征响应大于零的多个第三特征点。所述多个第三特征点即为本实施例中需要生成描述子的特征点。从目标图像中确定需要生成描述子的多个特征点的具体方式可参见前述实施例,此处不再赘述。在另一些实施例中,也可以通过其他方式获取本实施例中需要生成描述子的特征点,或者将前述的多个第三特征点与通过其他方式获得的多个特征点共同作为本实施例中需要生成描述子的特征点。

下面对用于生成描述子的用于ORB加速的数据处理装置的实施例进行展开说明,为了简洁,以下着重介绍本实施例与前述实施例的不同之处。

下面仍以目标图像的大小为640x400为例进行说明,限于篇幅,图中仅示出了目标图像的前8行以及每一行的前72列。参见图17,存储块的数量为8,记为Block1,Block2,……,Block8,在图中分别表示为B1,B2,B3,……,B8。每个存储块包括多个存储地址,记为A0,A1,……A72,……。同一存储块的每个存储地址可用于存储目标图像中同一行的8列像素值,且各个存储块的同一存储地址用于存储目标图像同一行中不同的列,例如,Block1的地址A0中存储目标图像第1行的1-8列,Block2的地址A0中存储目标图像第1行的9-16列,Block3的地址A0中存储目标图像第1行的17-24列,以此类推。进一步地,同一存储块的至少两个不同的存储地址可以用于存储目标图像同一行中不同的列。例如,Block1的地址A0中存储目标图像第1行的1-8列,Block1的地址A1中存储目标图像第1行的65-72列。当然,上述例子仅为示例性说明,并非唯一可行的实现方式。例如,在实际应用中,存储块的数量、存储块中每个存储地址中存储的数据量等均可根据实际需要调整。

为了节约成本并减小体积,存储器往往只有一个,而增加存储器的代价过大,因此,如何高效率地利用图像存储成为了优化的关键。在本实施例中,与特征点检测过程不同,描述子生成没有使用按8x8数据块存储的方式对目标图像进行存储,而是按照如图17所示的存储方式。这样存储的好处是,可以一个周期内读取出同一行中连续64个数。对于描述子任务,由于存在旋转量,因此最大可能到达的距离为目标像素点周围的18个像素点,这样安排存储可以实现在18+18+1个周期中,读取出目标图像中用于计算描述子的整个数据块。

在一些实施例中,所述用于ORB加速的数据处理装置还包括地址生成模块,用于获取目标图像中待读取的列在对应存储块中的存储地址与所述对应存储块的初始存储地址之间的地址偏移量;基于所述初始存储地址和所述地址偏移量确定目标地址;从所述目标地址中扫描所述待读取的列。上述存储模式使得单纯地进行地址的累加便可实现数据扫描,而调整地址偏移量便可以调整扫描的起始位置,例如当Block1到Block8从0开始累加,此时便可以实现第1行的第1到64列的扫描,当Block1到Block8从11开始累加,此时便可以实现第2行的第1到64列的扫描,提高了图像块的读取效率。

接着前面的例子,Block1到Block8中同一存储地址的数据可以在一个周期内被读出,因此,一个周期可以读取目标图像中1行中的64个像素点,这些像素点即一个图像块。与第一实施例中的7x7的目标图像块不同,本实施例中的目标图像块的大小为37x37。在一些例子中,可以通过连续的37个周期读取出目标图像中37行中每一行的64个像素点,并从中截取出37x37的目标图像块。一个37x37的目标图像块即为用于计算描述子的最小图像单元。当然,上述例子仅为示例性说明,其中的具体数值可以根据实际需要进行调整。

在得到目标图像块之后,可以通过描述子生成模块1602生成所述目标图像块中的特征点的描述子。为了保证图像在旋转后特征点的描述子不变,需要对生成描述子的点对按照质心的方向进行旋转。因此,在一些实施例中,所述用于ORB加速的数据处理装置还包括:角度计算模块,用于计算所述目标图像块中特征点的旋转角度,并将所述旋转角度输出至所述描述子生成模块,以使所述描述子生成模块基于所述旋转角度生成所述特征点的描述子。

在一些实施例中,所述旋转角度基于所述目标图像块的质心计算得到,所述质心包括所述目标图像块在所述目标图像的行方向上的第一图像矩以及所述目标图像块在所述目标图像的列方向上的第二图像矩;所述角度计算模块包括:第一计算单元,用于获取所述第一图像矩和所述第二图像矩的平方和;浮点转换单元,用于将所述第一图像矩、所述第二图像矩和所述平方和转换为浮点数;第二计算单元,用于计算转换后的平方和的算术平方根的倒数;第三计算单元,用于基于转换后的所述第一图像矩、转换后的所述第二图像矩以及所述算术平方根的倒数计算旋转角度;定点转换单元,用于将所述旋转角度转换为定点数后输出至所述描述子生成模块。

计算旋转角度的具体方式可参见前述sinθ和cosθ的计算过程,其中,m

第一计算单元、第二计算单元、浮点转换单元和定点转换单元可以通过状态机复用。由于这里不需要处理通用浮点转换,其中m

在一些实施例中,所述角度计算模块还包括:第一提取单元,第五计算单元,计数器和第二提取单元;所述第一提取单元用于提取所述目标图像块生成模块生成的目标图像块,并将所述目标图像块中像素点的像素值输出至所述第五计算单元;所述第五计算单元用于基于所述第一提取单元输出的像素值计算所述质心;所述计数器用于对所述第一提取单元向所述第五计算单元输出像素值的次数进行计数;所述第二提取单元用于在所述计数器的计数值达到预设计数值的情况下,从所述第五计算单元中提取所述质心。

提取质心的过程可以参见前述m

在一些实施例中,所述描述子生成模块的数量大于1,所述目标图像块生成模块用于向处于空闲状态的描述子生成模块输出目标图像块,以使各个描述子生成模块并行地生成接收到的目标图像块中的特征点的描述子。

参见图20,每个PE即为一个描述子生成模块,PE可以包括存储单元(Patch Reg),用于存储目标图像块;调整单元(Pattern Convert),用于基于旋转角度调整描述子对;以及描述子生成单元,用于基于目标图像块和旋转角度生成描述子。生成的描述子可以通过接收模块进行接收,并送入存储单元。

根据公式,目标图像块的中心像素点的计算需要首先计算图像周围若干行的差以及和,由于上面存储的设计,各个PE可以被用来计算m

由于描述子的角度旋转模式(Pattern)近似随机分布,因此描述子的计算属于一个纯串行的操作,在一些实施例中,描述子共计256个bit,存在256个Pattern,因此一个PE在开始运行后即需要256个周期才能结束,而前面所述的目标图像块生成模块和角度计算模块共需60个周期来处理一个计算,因此设置个3个PE或4个PE,可以最大化效率,此处采用了3个PE的设计,因为3个PE已经能支持FAST的吞吐量。在实际应用中,单个PE的运行时长以及目标图像块生成模块和角度计算模块的处理总时长可能根据实际情况有所不同,因此,PE的数量可以根据单个PE的运行时长以及目标图像块生成模块和角度计算模块的处理总时长相应地进行调整。

参见图21,本公开实施例还提供一种用于ORB加速的数据处理装置,用于生成目标图像中的特征点的描述子,所述用于ORB加速的数据处理装置包括:

角度计算模块2101,用于计算所述特征点的旋转角度;

描述子生成模块2102,用于基于所述旋转角度生成所述特征点的描述子;

其中,所述旋转角度基于所述特征点所在的目标图像块的质心计算得到,所述质心包括所述目标图像块在所述目标图像的行方向上的第一图像矩以及所述目标图像块在所述目标图像的列方向上的第二图像矩;所述角度计算模块包括:

第一计算单元2101a,用于获取所述第一图像矩和所述第二图像矩的平方和;

浮点转换单元2101b,用于将所述第一图像矩、所述第二图像矩和所述平方和转换为浮点数;

第二计算单元2101c,用于计算转换后的平方和的算术平方根的倒数;

第三计算单元2101d,用于基于转换后的所述第一图像矩、转换后的所述第二图像矩以及所述算术平方根的倒数计算旋转角度;

定点转换单元2101e,用于将所述旋转角度转换为定点数后输出至所述描述子生成模块。

本实施例中的数据处理装置用于对相关技术中的ORB加速器的描述子生成模块进行改进。本公开实施例中各模块和单元的具体功能详见前述实施例,由于这里不需要处理通用浮点转换,其中m

在一些实施例中,本实施例中用于生成描述子的用于ORB加速的数据处理装置与前述实施例中用于确定特征点的用于ORB加速的数据处理装置均为芯片,两种用于ORB加速的数据处理装置既可以集成在同一芯片上,也可以集成在两块不同的芯片上。

在一些实施例中,本公开还提供一种芯片,所述芯片包括本公开任一实施例所述的用于ORB加速的数据处理装置。例如,所述芯片可以包括用于确定特征点的用于ORB加速的数据处理装置,或者包括用于生成描述子的用于ORB加速的数据处理装置,或者包括用于确定特征点的用于ORB加速的数据处理装置及用于生成描述子的用于ORB加速的数据处理装置。

在一些实施例中,本公开还提供一种电子设备,所述电子设备包括本公开任一实施例所述的芯片。

参见图22,本公开还提供一种用于ORB加速的数据处理方法,所述方法包括:

步骤2201:对目标图像在滑动窗口内的各个候选特征点的特征响应进行非极大值抑制处理,得到特征响应大于零的多个第一特征点;所述目标图像被划分为多个网格;

步骤2202:对所述多个网格中每个网格内的第一特征点的特征响应进行非极大值抑制处理,得到特征响应大于零的多个第二特征点;

步骤2203:对多个相邻的网格中的第二特征点进行过滤,得到特征响应大于零的多个第三特征点。

参见图23,本公开还提供一种用于ORB加速的数据处理方法,用于确定目标图像中的特征点,所述目标图像包括多个图像块,同一图像块中不同的行分别存储在存储器中不同存储块的同一存储地址下,且至少两个图像块中对应的行存储在所述存储器的相同的存储块中;所述方法包括:

步骤2301:从各个存储块的目标存储地址中获取图像块,基于获取的图像块生成目标图像块;

步骤2302:计算所述目标图像块中候选特征点的特征响应;

步骤2303:基于所述候选特征点的特征响应从所述候选特征点中确定目标特征点。

参见图24,本公开还提供一种用于ORB加速的数据处理方法,用于生成目标图像中的特征点的描述子,所述方法包括:

步骤2401:从存储器中读取图像块,从读取的图像块中确定用于计算描述子的目标图像块;其中,所述存储器包括多个存储块,每个存储块包括多个存储地址,同一存储块的每个存储地址用于存储目标图像中同一行的多个列,且各个存储块的同一存储地址用于存储目标图像同一行中不同的列;

步骤2401:生成所述目标图像块中的特征点的描述子。

参见图25,本公开还提供一种用于ORB加速的数据处理方法,用于生成目标图像中的特征点的描述子,所述方法包括:

步骤2501:获取目标图像块的第一图像矩和第二图像矩的平方和;所述第一图像矩为所述目标图像块在所述目标图像的行方向上的图像矩,所述第二图像矩为所述目标图像块在所述目标图像的列方向上的图像矩;

步骤2502:将所述第一图像矩、所述第二图像矩和所述平方和转换为浮点数;

步骤2503:计算转换后的平方和的算术平方根的倒数;

步骤2504:基于转换后的所述第一图像矩、转换后的所述第二图像矩以及所述算术平方根的倒数计算旋转角度;

步骤2505:将所述旋转角度转换为定点数;

步骤2506:基于转换后的所述旋转角度生成所述特征点的描述子。

上述方法可采用前述实施例中的数据处理装置实现,具体细节详见前述数据处理装置的实施例,此处不再赘述。

本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开任一实施例所述的方法。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。

技术分类

06120114715220