发明内容
本公开的目的是提供一种图像特征的提取方法、装置、存储介质和电子设备,用以解决现有技术中存在的图像特征提取的精度低、速度慢的问题。
为了实现上述目的,根据本公开实施例的第一方面,提供一种图像特征的提取方法,应用于中央处理器CPU,所述方法包括:
按照预设的高斯金字塔对待处理图像进行采样,以获取第一数量个目标图像;
调用OpenMP的应用程序接口生成第二数量个处理线程,以使第二数量个所述处理线程依次提取第一数量个所述目标图像中每个所述目标图像的FAST特征点;
将第一数量个所述目标图像和每个所述目标图像的所述FAST特征点,发送至图形处理器GPU,以使所述GPU获取每个所述目标图像的所述FAST特征点的BRIEF描述子,并将所述BRIEF描述子发送至所述CPU;
将所述GPU发送的所述BRIEF描述子作为所述待处理图像的特征。
可选地,所述调用OpenMP的应用程序接口生成第二数量个处理线程,以使第二数量个所述处理线程依次提取第一数量个所述目标图像中每个所述目标图像的FAST特征点,包括:
根据所述CPU包括的内核的第三数量,调用OpenMP的应用程序接口生成第二数量个所述处理线程;
为每个所述目标图像分配一个所述处理线程,若所述第一数量小于或等于所述第二数量,一个所述处理线程对应一个所述目标图像,若所述第一数量大于所述第二数量,一个所述处理线程对应一个或多个所述目标图像;
控制第二数量个所述处理线程并行执行FAST算法,以提取每个所述处理线程对应的目标图像的所述FAST特征点。
可选地,所述FAST算法用于判断每个所述处理线程对应的目标图像中,按照预设规则选取的多个目标像素点中的每个所述目标像素点是否为所述FAST特征点,所述预设规则为在每个所述处理线程对应的目标图像中,按照预设间隔选取目标像素点。
可选地,所述控制第二数量个所述处理线程并行执行FAST算法,以提取每个所述处理线程对应的目标图像的所述FAST特征点,包括:
根据第三数量个所述内核中每个所述内核当前的频率,确定每个所述内核的CPU亲和性;
根据每个所述内核的CPU亲和性和预设的CPU绑定类型,将第二数量个所述处理线程绑定至第三数量个所述内核上,以使每个所述处理线程利用绑定的所述内核的资源执行所述FAST算法。
可选地,所述CPU为ARM处理器,所述控制第二数量个所述处理线程并行执行FAST算法,以提取每个所述处理线程对应的目标图像的所述FAST特征点,包括:
每个所述处理线程通过NEON指令控制所述CPU的寄存器,以使每个所述处理线程执行所述FAST算法时,能够同时判断每个所述处理线程对应的目标图像中,多个所述目标像素点是否为所述FAST特征点。
可选地,所述将第一数量个所述目标图像和每个所述目标图像的所述FAST特征点,发送至图形处理器GPU,包括:
分别对第一数量个所述目标图像中的每个所述目标图像进行高斯滤波,以对每个所述目标图像进行平滑处理;
根据每个所述目标图像与每个所述目标图像的所述FAST特征点的对应关系,将经过平滑处理每个所述目标图像和每个所述目标图像的所述FAST特征点,同时发送至所述GPU。
根据本公开实施例的第二方面,提供一种图像特征的提取方法,应用于GPU,所述方法包括:
接收CPU发送的第一数量个目标图像,和每个所述目标图像的FAST特征点,所述目标图像为所述CPU按照预设的高斯金字塔对待处理图像进行采样,得到的图像,每个所述目标图像的所述FAST特征点为所述CPU调用OpenMP的应用程序接口生成第二数量个处理线程,第二数量个所述处理线程依次提取的每个所述目标图像的FAST特征点;
获取每个所述目标图像的所述FAST特征点的BRIEF描述子;
将所述BRIEF描述子作为所述待处理图像的特征发送至所述CPU。
可选地,所述获取每个所述目标图像的所述FAST特征点的BRIEF描述子,包括:
确定第一数量个所述目标图像中包括的所述FAST特征点的第四数量;
通过OpenCL建立第四数量个工作组,每个所述工作组包括第五数量个工作项,所述第五数量为根据所述BRIEF描述子的位数确定的数量;
为第四数量个所述FAST特征点中的每个所述FAST特征点分配一个所述工作组;
控制第一工作组中的每个所述工作项,计算第一FAST特征点的所述BRIEF描述子的每一位,所述第一工作组为第四数量个所述工作组中的任一个工作组,所述第一FAST特征点为与所述第一工作组对应的FAST特征点;
其中,所述第一工作组中的第五数量个所述工作项共享一个局部内存,所述局部内存中存储有第一图像,所述第一图像为所述第一FAST特征点所属的所述目标图像中,以所述第一FAST特征点为中心的预设大小的图像。
根据本公开实施例的第三方面,提供一种图像特征的提取装置,应用于CPU,所述装置包括:
采样模块,用于按照预设的高斯金字塔对待处理图像进行采样,以获取第一数量个目标图像;
生成模块,用于调用OpenMP的应用程序接口生成第二数量个处理线程,以使第二数量个所述处理线程依次提取第一数量个所述目标图像中每个所述目标图像的FAST特征点;
发送模块,用于将第一数量个所述目标图像和每个所述目标图像的所述FAST特征点,发送至GPU,以使所述GPU获取每个所述目标图像的所述FAST特征点的BRIEF描述子,并将所述BRIEF描述子发送至所述CPU;
确定模块,用于将所述GPU发送的所述BRIEF描述子作为所述待处理图像的特征。
根据本公开实施例的第四方面,提供一种图像特征的提取装置,应用于GPU,所述装置包括:
接收模块,用于接收CPU发送的第一数量个目标图像,和每个所述目标图像的FAST特征点,所述目标图像为所述CPU按照预设的高斯金字塔对待处理图像进行采样,得到的图像,每个所述目标图像的所述FAST特征点为所述CPU调用OpenMP的应用程序接口生成第二数量个处理线程,第二数量个所述处理线程依次提取的每个所述目标图像的FAST特征点;
获取模块,用于获取每个所述目标图像的所述FAST特征点的BRIEF描述子;
发送模块,用于将所述BRIEF描述子作为所述待处理图像的特征发送至所述CPU。
根据本公开实施例的第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开实施例的第一方面所述方法的步骤。
根据本公开实施例的第六方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开实施例的第二方面所述方法的步骤。
根据本公开实施例的第七方面,提供一种电子设备,包括:
存储器,其上存储有计算机程序;
CPU,用于执行所述存储器中的所述计算机程序,以实现本公开实施例的第一方面所述方法的步骤;
GPU,用于根据所述CPU的控制指令执行所述存储器中的所述计算机程序,以实现本公开实施例的第二方面所述方法的步骤。
通过上述技术方案,本公开中CPU首先按照预设的高斯金字塔对待处理图像进行采样,得到第一数量个目标图像,之后调用OpenMP的应用程序接口生成第二数量个处理线程,用于依次提取每个目标图像的FAST特征点,再将目标图像和每个目标图像对应的FAST特征点发送至GPU,以使GPU得到每个目标图像对应的FAST特征点对应的BRIEF描述子,并将BRIEF描述子发送至CPU,之后CPU将BRIEF描述子作为待处理图像的特征。能够在避免图像细节损失的前提下,提高图像特征提取的速度和精度。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在介绍本公开提供的图像特征的提取方法、装置、存储介质和电子设备之前,首先对本公开各个实施例所涉及应用场景进行介绍。该应用场景可以为在终端上对待处理图像进行图像特征的提取,图像特征例如可以是ORB特征。终端上设置有CPU(英文:CentralProcessing Unit,中文:中央处理器)和GPU(英文:Graphics Processing Unit,中文:图形处理器),GPU能够根据CPU发送的控制指令执行预设的计算机程序。其中,终端例如可以是智能手机、平板电脑、智能电视、智能手表、PDA(英文:Personal Digital Assistant,中文:个人数字助理)、便携计算机,也可以是台式计算机等固定终端。
图1是根据一示例性实施例示出的一种图像特征的提取方法的流程图,如图1所示,该方法应用于CPU,包括以下步骤:
步骤101,按照预设的高斯金字塔对待处理图像进行采样,以获取第一数量个目标图像。
举例来说,为了使提取的图像特征具有尺度不变形,可以先构建一个高斯金字塔,之后用高斯金字塔对待处理图像进行采样,以得到待处理图像对应的第一数量个目标图像。第一数量个目标图像中每个目标图像中的图像内容均为待处理图像中的内容的一部分,可以理解为不同分辨率的待处理图像,或者是不同尺寸的待处理图像。例如,选择8层高斯金字塔对待处理图像进行逐层降采样,得到8个尺寸不同的图像。
步骤102,调用OpenMP的应用程序接口生成第二数量个处理线程,以使第二数量个处理线程依次提取第一数量个目标图像中每个目标图像的FAST(英文:Features fromAccelerated Segment Test)特征点。
示例的,之后依次对第一数量个目标图像中的每个目标图像进行FAST特征点的提取(每个目标图像对应多个FAST特征点)。可以通过OpenMP(英文:Open Multi-Processing)的框架,来使CPU并行处理多个目标图像,从而提高图像特征提取的速度。例如,可以根据CPU的计算资源(例如:内核数量或者运算器的大小)来确定CPU能够同时并行处理的线程的最大数量,即第二数量。之后通过调用OpenMP的应用程序接口(英文:ApplicationProgramming Interface,缩写:API),例如以#pragma omp指令的形式,在CPU上生成第二数量个处理线程,第二数量个处理线程用于分别提取第一数量个目标图像中每个目标图像的FAST特征点,使得CPU能够同时提取第二数量个目标图像中多个目标图像的FAST特征点。需要说明的是,若第二数量与第一数量相等,那么一个处理线程分配一个目标图像,CPU同时处理第一数量(即第二数量)个目标图像。若第二数量小于第一数量,那么可以在第二数量个处理线程中的每个处理线程上分配一个或多个目标图像,CPU先通过第二数量个处理线程同时处理第二数量个目标图像,处理完之后,再依次处理第二数量个处理线程上剩余的目标图像。例如,某一处理线程上分配了两个目标图像,那么CPU通过该处理线程先提取第一个目标图像的FAST特征点,之后再提取第二个目标图像的FAST特征点。
步骤103,将第一数量个目标图像和每个目标图像的FAST特征点,发送至GPU,以使GPU获取每个目标图像的FAST特征点的BRIEF(英文:Binary Robust IndependentElementary Features)描述子,并将BRIEF描述子发送至CPU。
步骤104,将GPU发送的BRIEF描述子作为待处理图像的特征。
进一步的,在计算每个FAST特征点的BRIEF描述子时,需要在以该FAST特征点为圆心,以预设长度为半径的圆上,选取多个(例如:256个)方向上的点对(两个点),进行比较,以获取多位(例如256位)的BRIEF描述子,描述子即Feature Descriptors,能够描述该FAST特征点的性质。而每个目标图像又包括了多个FAST特征点,因此计算BRIEF描述子需要大量的算术运算单元。然而,CPU上的算数运算单元虽然计算能力强,但是数量有限,因此,可以将第一数量个目标图像和每个目标图像的FAST特征点发送至GPU。GPU中包含了大量的算术运算单元,并且GPU的执行逻辑为并行执行,因此可以利用GPU并行计算每个目标图像的FAST特征点对应的BRIEF描述子,从而进一步提高图像特征提取的速度。最后GPU将得到每个目标图像的FAST特征点的BRIEF描述子再发送给CPU,CPU将GPU发送的BRIEF描述子作为待处理图像的特征,例如可以是待处理图像的ORB特征。
由于本实施例中,第一数量个目标图像包括了待处理图像中包含的全部图像信息(即图像细节),因此不会损失待处理图像中包含的图像细节,能够提高图像特征提取的精度。进一步的,本实施例通过OpenMP的框架来实现并行提取多个目标图像中每个目标图像的FAST特征点,并且,利用了GPU算术运算单元数量多,和并行执行的执行逻辑来计算每个目标图像的FAST特征点对应的BRIEF描述子,因此能够提高图像特征提取的速度。
综上所述,本公开中CPU首先按照预设的高斯金字塔对待处理图像进行采样,得到第一数量个目标图像,之后调用OpenMP的应用程序接口生成第二数量个处理线程,用于依次提取每个目标图像的FAST特征点,再将目标图像和每个目标图像对应的FAST特征点发送至GPU,以使GPU得到每个目标图像对应的FAST特征点对应的BRIEF描述子,并将BRIEF描述子发送至CPU,之后CPU将BRIEF描述子作为待处理图像的特征。能够在避免图像细节损失的前提下,提高图像特征提取的速度和精度。
图2a是根据一示例性实施例示出的另一种图像特征的提取方法的流程图,如图2a所示,步骤102的实现方式可以包括以下步骤:
步骤1021,根据CPU包括的内核的第三数量,调用OpenMP的应用程序接口生成第二数量个处理线程。
步骤1022,为每个目标图像分配一个处理线程,若第一数量小于或等于第二数量,一个处理线程对应一个目标图像,若第一数量大于第二数量,一个处理线程对应一个或多个目标图像。
步骤1023,控制第二数量个处理线程并行执行FAST算法,以提取每个处理线程对应的目标图像的FAST特征点。
举例来说,CPU可以包括多个内核,因此可以根据内核的第三数量,来确定CPU能够同时并行处理的线程的最大数量(即第二数量),并且每个内核的计算能力不同可以同时处理的线程的数量也不同,因此,第二数量和第三数量的关系可以相等也可以不相等。之后,为每个目标图像分配一个处理线程。如果第一数量小于或等于第二数量,那么可以分配一个处理线程单独处理一个目标图像,如果第一数量大于第二数量,那么一个处理线程可以对应一个或多个目标图像。例如,高斯金字塔生成了8个目标图像,CPU生成了4个处理线程,那么可以给每个处理线程上分配两个目标图像,那么CPU可以通过4个处理线程同时执行FAST算法,以同时计算4个目标图像的FAST特征点,每个处理线程处理完当前的目标图像后,再处理该处理线程上的剩余的目标图像,相比于一次只提取一个目标图像的FAST特征点,提取速度提高了4倍。
具体的,FAST算法可以用于判断每个处理线程对应的目标图像中,按照预设规则选取的多个目标像素点中的每个目标像素点是否为FAST特征点,预设规则为在每个处理线程对应的目标图像中,按照预设间隔选取目标像素点。
其中,预设的间隔可以是一个像素点,那么可以在目标图像中每一行、每一列以一个像素点为间隔筛选出多个目标像素点,可以理解为在目标图像行的方向上每隔一个像素点抽取一个目标像素点,在列的方向上每隔一个像素点抽取一个目标像素点。针对每个目标像素点按照预设的半径窗口进行计算,来确定该目标像素点是否为FAST特征点,而目标图像中的其他像素点可以不做处理,这样能够进一步减少计算量,提高图像特征提取的速度。具体的,以某一目标图像为7*7的大小(即包括49个像素点)来举例,在该目标图像中的每一行、每一列按照一个像素点为间隔,选取目标像素点,那么可以选出16个目标像素点,可以减少三分之二的计算量,如图2b所示,图中黑色像素点即表示目标像素点,白色像素点表示不做处理):
进一步的,步骤1023可以通过以下步骤来实现:
步骤a)根据第三数量个内核中每个内核当前的频率,确定每个内核的CPU亲和性。
步骤b)根据每个内核的CPU亲和性和预设的CPU绑定类型,将第二数量个处理线程绑定至第三数量个内核上,以使每个处理线程利用绑定的内核的资源执行FAST算法。
举例来说,为了保证能够充分利用CPU的每个内核,避免各个线程之间频繁的调度(即迁移)。因此,可以在控制第二数量个处理线程并行执行FAST算法时,根据每个内核的CPU亲和性,将每个处理线程与某一内核绑定,使该处理线程一直在绑定的内核上运行,使用绑定的内核的资源来实现FAST算法,从而第二数量个处理线程不会在多个内核上频繁迁移,整个CPU的资源得到充分利用,能够进一步提高图像特征提取的速度。
例如,可以先确定第三数量个内核中每个内核当前的频率(例如:通过GetCPUMaxFreq函数来获取),再根据每个内核的属性(例如:大核或者小核),来确定每个内核的CPU亲和性。之后根据每个内核的CPU亲和性,和预设的CPU绑定类型,将第二数量个处理线程绑定至第三数量个内核上,例如可以通过调用CPU_SET函数和SetThreadAffinity函数,将处理线程与对应的内核绑定。其中,CPU绑定类型可以包括:只使用大核、只使用小核、使用所有核,并优先使用大核、使用所有核,并优先使用小核等类型。根据不同的CPU绑定类型,一个内核上可以绑定一个或多个处理线程,也可以不绑定任何处理线程。
具体的,在每个处理线程执行FAST算法的具体过程中,若CPU为ARM(英文:Advanced RISC Machines)处理器,对CPU的寄存器还可以通过NEON指令来实现:
每个处理线程通过NEON指令控制CPU的寄存器,以使每个处理线程执行FAST算法时,能够同时判断每个处理线程对应的目标图像中,多个目标像素点是否为FAST特征点。
示例的,ARM处理器能够通过NEON指令实现数据并行处理,指令可以按照指令级SIMD(英文:Single Instruction,Multiple Data,中文:单指令、多数据)的方式同时对多个数据进行操作,操作的数据个数由向量寄存器的长度和数据类型共同决定。那么每个处理线程执行FAST算法时,可以通过NEON指令控制ARM的寄存器,同时判断每个处理线程对应的目标图像中,多个目标像素点是否为FAST特征点。例如,NEON SIMD寄存器的长度为128位,在FAST算法中处理的是32位浮点数,那么可以同时处理4个数据,即可以每个处理线程可以同时判断对应的目标图像中,4个目标像素点是否为FAST特征点,从而将图像特征提取的速度提高四倍。
图3是根据一示例性实施例示出的另一种图像特征的提取方法的流程图,如图3所示,步骤103包括以下步骤:
步骤1031,分别对第一数量个目标图像中的每个目标图像进行高斯滤波,以对每个目标图像进行平滑处理。
步骤1032,根据每个目标图像与每个目标图像的FAST特征点的对应关系,将经过平滑处理每个目标图像和每个目标图像的FAST特征点,同时发送至GPU。
在具体的实现场景中,在将目标图像和每个目标图像的FAST特征点发送至GPU之前,还需要分别对每个目标图像进行高斯滤波,以对每个目标图像进行平滑处理。
进一步的,现有技术中,通常是依次执行1)CPU将任一个目标图像和该目标图像的FAST特征点发送至GPU。2)由GPU运行Kernel(中文:内核)计算该目标图像的FAST特征点的BRIEF描述子。3)再由GPU将BRIEF描述子发送至CPU。需要重复执行步骤1)至步骤3),以将第一数量个目标图像中的每个目标图像都处理一次,即需要重复执行第一数量次,影响了图像特征提取的速度。因此可以先建立每个目标图像与每个目标图像的FAST特征点的对应关系,例如可以是一个表格,该表格中记录一个目标图像包括哪些FAST特征点,也可以为FAST特征点增加一个标志位,用于指示该FAST特征点属于哪个目标图像。之后,按照每个目标图像与每个目标图像的FAST特征点的对应关系,一次性将将经过平滑处理每个目标图像和每个目标图像的FAST特征点,同时发送至GPU。
综上所述,本公开中CPU首先按照预设的高斯金字塔对待处理图像进行采样,得到第一数量个目标图像,之后调用OpenMP的应用程序接口生成第二数量个处理线程,用于依次提取每个目标图像的FAST特征点,再将目标图像和每个目标图像对应的FAST特征点发送至GPU,以使GPU得到每个目标图像对应的FAST特征点对应的BRIEF描述子,并将BRIEF描述子发送至CPU,之后CPU将BRIEF描述子作为待处理图像的特征。能够在避免图像细节损失的前提下,提高图像特征提取的速度和精度。
图4是根据一示例性实施例示出的一种图像特征的提取方法的流程图,如图4所示,该方法应用于GPU,包括:
步骤201,接收CPU发送的第一数量个目标图像,和每个目标图像的FAST特征点,目标图像为CPU按照预设的高斯金字塔对待处理图像进行采样,得到的图像,每个目标图像的FAST特征点为CPU调用OpenMP的应用程序接口生成第二数量个处理线程,第二数量个处理线程依次提取的每个目标图像的FAST特征点。
步骤202,获取每个目标图像的FAST特征点的BRIEF描述子。
步骤203,将BRIEF描述子作为待处理图像的特征发送至CPU。
举例来说,由GPU来执行对每个目标图像的FAST特征点的BRIEF描述子的计算,首先接收CPU按照图1至图3中示出的任一种图像特征的提取方法中步骤103发送的第一数量个目标图像,和每个目标图像的FAST特征点。GPU中包含了大量的算术运算单元,并且GPU的执行逻辑为并行执行,因此可以利用GPU的Kernel并行计算每个目标图像的FAST特征点对应的BRIEF描述子。之后,再将每个目标图像的FAST特征点的BRIEF描述子发送至CPU。
图5是根据一示例性实施例示出的另一种图像特征的提取方法的流程图,如图5所示,步骤202可以通过以下步骤来实现:
步骤2021,确定第一数量个目标图像中包括的FAST特征点的第四数量。
步骤2022,通过OpenCL建立第四数量个工作组,每个工作组包括第五数量个工作项,第五数量为根据BRIEF描述子的位数确定的数量。
示例的,根据第一数量个目标图像包括的FAST特征点的第四数量,通过OpenCL(英文:Open Computing Language,中文:开放运算语言)在GPU上建立第四数量个工作组,其中,每个工作组中包含有第五数量个工作项,第五数量为根据BRIEF描述子的位数确定的数量,即第五数量可以是BRIEF描述子的位数对应的字节数。例如:有8个目标图像,每个目标图像中包括多个FAST特征点,8个目标图像中一共确定了1000个FAST特征点。那么可以通过OpenCL建立1000个工作组。若BRIEF描述子的位数为256bit,即32个字节,那么每个工作组可以包括32(即第五数量)个工作项,即global_work_size设置为32000,local_work_size设置为32。
步骤2023,为第四数量个FAST特征点中的每个FAST特征点分配一个工作组。
步骤2024,控制第一工作组中的每个工作项,计算第一FAST特征点的BRIEF描述子的每一位,第一工作组为第四数量个工作组中的任一个工作组,第一FAST特征点为与第一工作组对应的FAST特征点。
其中,第一工作组中的第五数量个工作项共享一个局部内存,局部内存中存储有第一图像,第一图像为第一FAST特征点所属的目标图像中,以第一FAST特征点为中心的预设大小的图像。
具体的,为每个FAST特征点分配一个工作组,即将每个工作组与一个FAST特征点绑定,该工作组用于计算该FAST特征点的BRIEF描述子。在计算某一FAST特征点的BRIEF描述子时,是在以该FAST特征点为圆心,预设大小(例如可以是预设的半径)的局部图像上,选取多个(例如:256个)方向上的点对(两个点),进行比较,以获取多位(例如256位)的BRIEF描述子,在计算每一个点对时,都需要读取以该局部图像,如果计算256个点对,就需要读取256次,大大降低了计算效率。
由于同一个工作组内的多个工作项能够共享局部内存,那么可以将同一个工作组内的多个工作项共享的局部内存中,存储与该工作组绑定的FAST特征点对应的局部图像,该局部图像为该FAST特征点所述的目标图像中,以该FAST特征点为中心的预设大小的图像。那么该工作组在计算该FAST特征点多个方向上的点对时,只需读取一次,有效提高了计算的效率。
以第四数量个工作组中的任一个工作组:第一工作组为例,第一工作组上分配的是第一FAST特征点。那么控制第一工作组中的每个工作项,计算第一FAST特征点的BRIEF描述子的每一位,其中,第一工作组中的第五数量个工作项共享一个局部内存,局部内存中存储有第一图像,第一图像为第一FAST特征点所属的目标图像中,以第一FAST特征点为中心的预设大小的图像。
综上所述,本公开中CPU首先按照预设的高斯金字塔对待处理图像进行采样,得到第一数量个目标图像,之后调用OpenMP的应用程序接口生成第二数量个处理线程,用于依次提取每个目标图像的FAST特征点,再将目标图像和每个目标图像对应的FAST特征点发送至GPU,以使GPU得到每个目标图像对应的FAST特征点对应的BRIEF描述子,并将BRIEF描述子发送至CPU,之后CPU将BRIEF描述子作为待处理图像的特征。能够在避免图像细节损失的前提下,提高图像特征提取的速度和精度。
图6是根据一示例性实施例示出的一种图像特征的提取装置的框图,如图6所示,该装置300应用于CPU,包括:
采样模块301,用于按照预设的高斯金字塔对待处理图像进行采样,以获取第一数量个目标图像。
生成模块302,用于调用OpenMP的应用程序接口生成第二数量个处理线程,以使第二数量个处理线程依次提取第一数量个目标图像中每个目标图像的FAST特征点。
发送模块303,用于将第一数量个目标图像和每个目标图像的FAST特征点,发送至GPU,以使GPU获取每个目标图像的FAST特征点的BRIEF描述子,并将BRIEF描述子发送至CPU。
确定模块304,用于将GPU发送的BRIEF描述子作为待处理图像的特征。
图7是根据一示例性实施例示出的另一种图像特征的提取装置的框图,如图7所示,生成模块302包括:
调用子模块3021,用于根据CPU包括的内核的第三数量,调用OpenMP的应用程序接口生成第二数量个处理线程。
分配子模块3022,用于为每个目标图像分配一个处理线程,若第一数量小于或等于第二数量,一个处理线程对应一个目标图像,若第一数量大于第二数量,一个处理线程对应一个或多个目标图像。
执行子模块3023,用于控制第二数量个处理线程并行执行FAST算法,以提取每个处理线程对应的目标图像的FAST特征点。
其中,FAST算法用于判断每个处理线程对应的目标图像中,按照预设规则选取的多个目标像素点中的每个目标像素点是否为FAST特征点,预设规则为在每个处理线程对应的目标图像中,按照预设间隔选取目标像素点。
可选地,执行子模块3023用于执行以下步骤:
A)根据第三数量个内核中每个内核当前的频率,确定每个内核的CPU亲和性。
B)根据每个内核的CPU亲和性和预设的CPU绑定类型,将第二数量个处理线程绑定至第三数量个内核上,以使每个处理线程利用绑定的内核的资源执行FAST算法。
另一种方式中,若CPU为ARM处理器,执行子模块3023用于执行以下步骤:
C)每个处理线程通过NEON指令控制CPU的寄存器,以使每个处理线程执行FAST算法时,能够同时判断每个处理线程对应的目标图像中,多个目标像素点是否为FAST特征点。
图8是根据一示例性实施例示出的另一种图像特征的提取装置的框图,如图8所示,发送模块303包括:
滤波子模块3031,用于分别对第一数量个目标图像中的每个目标图像进行高斯滤波,以对每个目标图像进行平滑处理。
发送子模块3032,用于根据每个目标图像与每个目标图像的FAST特征点的对应关系,将经过平滑处理每个目标图像和每个目标图像的FAST特征点,同时发送至GPU。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
综上所述,本公开中CPU首先按照预设的高斯金字塔对待处理图像进行采样,得到第一数量个目标图像,之后调用OpenMP的应用程序接口生成第二数量个处理线程,用于依次提取每个目标图像的FAST特征点,再将目标图像和每个目标图像对应的FAST特征点发送至GPU,以使GPU得到每个目标图像对应的FAST特征点对应的BRIEF描述子,并将BRIEF描述子发送至CPU,之后CPU将BRIEF描述子作为待处理图像的特征。能够在避免图像细节损失的前提下,提高图像特征提取的速度和精度。
图9是根据一示例性实施例示出的一种图像特征的提取装置的框图,如图9所示该装置400应用于GPU,包括:
接收模块401,用于接收CPU发送的第一数量个目标图像,和每个目标图像的FAST特征点,目标图像为CPU按照预设的高斯金字塔对待处理图像进行采样,得到的图像,每个目标图像的FAST特征点为CPU调用OpenMP的应用程序接口生成第二数量个处理线程,第二数量个处理线程依次提取的每个目标图像的FAST特征点。
获取模块402,用于获取每个目标图像的FAST特征点的BRIEF描述子。
发送模块403,用于将BRIEF描述子作为待处理图像的特征发送至CPU。
图10是根据一示例性实施例示出的另一种图像特征的提取装置的框图,如图10所示,获取模块402包括:
确定子模块4021,用于确定第一数量个目标图像中包括的FAST特征点的第四数量。
建立子模块4022,用于通过OpenCL建立第四数量个工作组,每个工作组包括第五数量个工作项,第五数量为根据BRIEF描述子的位数确定的数量。
分配子模块4023,用于为第四数量个FAST特征点中的每个FAST特征点分配一个工作组。
计算子模块4024,用于控制第一工作组中的每个工作项,计算第一FAST特征点的BRIEF描述子的每一位,第一工作组为第四数量个工作组中的任一个工作组,第一FAST特征点为与第一工作组对应的FAST特征点。
其中,第一工作组中的第五数量个工作项共享一个局部内存,局部内存中存储有第一图像,第一图像为第一FAST特征点所属的目标图像中,以第一FAST特征点为中心的预设大小的图像。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
综上所述,本公开中CPU首先按照预设的高斯金字塔对待处理图像进行采样,得到第一数量个目标图像,之后调用OpenMP的应用程序接口生成第二数量个处理线程,用于依次提取每个目标图像的FAST特征点,再将目标图像和每个目标图像对应的FAST特征点发送至GPU,以使GPU得到每个目标图像对应的FAST特征点对应的BRIEF描述子,并将BRIEF描述子发送至CPU,之后CPU将BRIEF描述子作为待处理图像的特征。能够在避免图像细节损失的前提下,提高图像特征提取的速度和精度。
图11是根据一示例性实施例示出的一种电子设备500的框图。如图11所示,该电子设备500可以包括:CPU 501,存储器502,GPU 506。该电子设备500还可以包括多媒体组件503,输入/输出(I/O)接口504,通信组件505中的一者或多者。
其中,CPU 501中的用于控制该电子设备500的整体操作,以完成上述的图1至图3中示出的任一种图像特征的提取方法中的全部或部分步骤,GPU 506用于根据CPU 501发送的控制指令,执行图4或图5中示出的图像特征的提取方法中的全部或部分步骤。存储器502用于存储各种类型的数据以支持在该电子设备500的操作,这些数据例如可以包括用于在该电子设备500上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器502可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random AccessMemory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable ProgrammableRead-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable ProgrammableRead-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件503可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器502或通过通信组件505发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口504为CPU501和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件505用于该电子设备500与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件505可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,电子设备500可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的图1至图5中示出的任一种图像特征的提取方法中的步骤。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被CPU执行时实现上述的图1至图3中示出的任一种图像特征的提取方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器502,上述程序指令可由电子设备500的CPU501执行以完成上述的图1至图3中示出的任一种图像特征的提取方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被GPU执行时实现上述的图3或图4示出的图像特征的提取方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器502,上述程序指令可由电子设备500的GPU 506执行以完成上述的图3或图4示出的图像特征的提取方法。
在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由所述可编程的装置执行时用于执行上述图1至图5中示出的任一种图像特征的提取方法的代码部分。
综上所述,本公开中CPU首先按照预设的高斯金字塔对待处理图像进行采样,得到第一数量个目标图像,之后调用OpenMP的应用程序接口生成第二数量个处理线程,用于依次提取每个目标图像的FAST特征点,再将目标图像和每个目标图像对应的FAST特征点发送至GPU,以使GPU得到每个目标图像对应的FAST特征点对应的BRIEF描述子,并将BRIEF描述子发送至CPU,之后CPU将BRIEF描述子作为待处理图像的特征。能够在避免图像细节损失的前提下,提高图像特征提取的速度和精度。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,本领域技术人员在考虑说明书及实践本公开后,容易想到本公开的其它实施方案,均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。同时本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。本公开并不局限于上面已经描述出的精确结构,本公开的范围仅由所附的权利要求来限制。