具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,是本发明一种二进制特征的检索方法在一实施例中的流程示意图,包括如下步骤:
S11、获取待查询二进制特征,计算所述待查询特征的跳变次数;其中,所述跳变次数为所述二进制特征中连续的比特值变化次数;
二进制数据是指用0和1两个数码来表示的数;二进制特征的跳变次数,即二进制特征中连续的比特值变化次数,如二进制特征1011,该特征的第一位和第二位之间发生了1->0的跳变,第二位和第三位之间发生了0->1的跳变,第三位和第四位都是1没有发生跳变,第四位和第一位都是1也没有发生跳变,因此该特征的跳变次数T为2。
S12、根据所述待查询二进制特征的跳变次数及预设的二进制特征集中各个二进制特征的跳变次数,获得比较集合;
二进制特征集是指搜索库中已存储的所有二进制特征的集合;两个二进制特征的对应比特取值不同的比特数称为这两个特征的海明距离;比如,二进制特征10101和二进制特征00110从第一位开始依次有第一位、第四、第五位不同,则海明距离为3;因此,海明距离可表征两个特征的相似性,海明距离越小,两个特征的相似度也就越大;对比海明距离与本实施例中的二进制特征的跳变次数,可知,若两个特征的海明距离越小,两者的跳变次数也更加接近。因此采用跳变次数进行检索查询,能获得精确的查询结果;
本步骤根据待查询二进制特征的跳变次数,以及二进制特征集中各个二进制特征的跳变次数,可从预设的二进制特征集合中筛选出跳变次数与待查询二进制特征的跳变次数较为接近的部分二进制特征,得到比较集合。
S13、将所述待查询二进制特征与所述比较集合中的二进制特征进行穷举比较,获得检索结果。
在本步骤,可将待查询二进制特征,与获得的比较集合中的各个二进制特征进行穷举比较,由于比较集合中得到了与待查询二进制特征跳变次数较为接近的特征,穷举比较的数量较少,能更加快速地获得检索结果。
在一较佳实施例中,为了更快地获得比较集合,还可包括如下步骤:
获取所述二进制特征集中二进制特征的维度值;
在预设的索引树中,对所述二进制特征集中每个二进制特征,查找跳变次数与维度区间相匹配的路径,将所述二进制特征存储在所述相匹配的路径的叶子节点中,其中,所述索引树包括多条根据所述维度值创建的不同维度区间的路径;
具体的,所述二进制特征的维度,即二进制特征的比特位数,如二进制特征1011,其维度为4;
本实施例该二进制特征集的索引为树形结构,其节点层次和节点个数可根据需求而预设;比如一棵树,共P层,第一层为根节点,其他各层为子节点,一棵树的终端节点为没有子节点的节点,即为叶子节点;
本实施例中的索引树中,节点层次及各层节点个数不限,节点存储维度区间,叶子节点则存储二进制特征,对二进制特征集中的每个二进制特征,在所述索引树中查找跳变次数与所述维度区间相匹配的路径,再将所述二进制特征存储在所述路径中的叶子节点中,可完成整棵索引树的构建过程;其中,每个叶子节点存储的多个二进制特征即为一个比较集合。
本实施例的索引树的结构,可划分三层,第一层为根节点,第二层是按照二进制特征整体跳变次数的一种划分,可将二进制特征集的最大维度区间[0,D]拆分成多个小的维度区间,记录在第二层节点中;具体的拆分规则,可等分拆分,也可以不等分拆分;
若索引树预设分成三层,即是将二进制特征集中的各个二进制特征根据跳变次数分成多份,第二层节点按照二进制特征整体跳变次数进行划分,第三层叶子节点存储跳变次数符合划分后的维度区间的二进制特征,每一份集合中的二进制特征跳变次数比较接近,相似度较高,当输入待查询二进制特征时,可根据待查询二进制特征的跳变次数快速地找到与其相似度较高的检索结果。
对应地,所述根据所述待查询二进制特征的跳变次数及所述二进制特征集中各个二进制特征的跳变次数,获得比较集合的步骤包括:
在所述索引树中查找所述待查询二进制特征的跳变次数与所述维度区间相匹配的路径;
读取所述相匹配的路径的叶子节点中存储二进制特征,得到所述比较集合;
与所述索引树相对应,在索引树的每一层节点中,根据待查询二进制特征的跳变次数,与索引树各节点存储的维度区间进行匹配,得到相匹配的路径;对该路径中的叶子节点,由于叶子节点也存储了符合该路径的二进制特征,即可得到所述的比较集合,因此再将待查询特征与所述路径中叶子节点存储的二进制特征进行穷举比较,能够快速地获得检索结果。
为了进一步提高检索速度和检索精度,具体的,还可包括步骤:
根据所述二进制特征集中二进制特征的维度值,得到二进制特征集的最大维度区间;
在所述索引树第二层中各个预设节点存储所述最大维度区间拆分后的各个维度区间,从第三层起,将所述二进制特征集中的最大维度值按预设抽取规则逐层进行缩小,其中,同一个父节点的各个子节点存储的维度区间,是将维度区间[0,K]拆分后得到的子区间,K为M和N中的较小值,M为最大维度值缩小后的值,N为所述子节点的父节点存储的维度区间的右侧端点值;
所述查找跳变次数与所述维度区间相匹配的路径,将所述二进制特征存储在所述路径中的叶子节点中的步骤包括:
将所述二进制特征按所述预设抽取规则逐层进行缩小,在所述索引树中查找跳变次数与所述维度区间相匹配的路径,将所述二进制特征存储在所述相匹配路径的叶子节点中。
本步骤中,读取二进制特征集中二进制特征的维度值D,构成该二进制特征集的最大维度区间[0,D];根据上述维度和跳变次数的含义,可知二进制特征集中,每个二进制特征的跳变次数T都小于或等于D。
本实施例中的索引树中,第二层的节点个数不限,第二层是按照二进制特征整体跳变次数的一种划分,可将二进制特征集的最大维度区间为[0,D]拆分成多个小的维度区间,记录在第二层节点中;具体的拆分规则,可等分拆分,也可以不等分拆分;
比如第二层共有L1个节点,若按等分划分,则可将最大维度区间[0,D]拆分成L1个维度区间,该层第一个节点记录的维度区间是[0,D/L1),第二个节点记录的是[D/L1,2*D/L1),以此类推;根据各个节点记录的维度区间,则将二进制特征集中各个二进制特征按照其跳变次数,分成了L1份;
第三层节点是第二层节点的子节点,因为从根节点到第二层中的L1个节点,这里具有L1条路径,已将二进制特征集中的各个二进制特征分成了L1份,因此索引树中从第三层起建立的节点,思路是将第二层中每一类二进制特征逐层缩小位数,以降低后续的检索时间。
具体的,可抽取每个二进制特征的一部分,统计抽取后该部分二进制特征的跳变次数,而抽取的过程可按需设置,比如可抽取二进制特征的前半部分或后半部分,或者也可将二进制特征三等分,抽取前面的三分之二,抽取过程可包括多种抽取方式。
根据上述抽取方法可知,在本层中,进一步缩小了二进制特征的维度和跳变次数,对于索引树而言,则进一步缩小了各个节点存储的维度区间;
比如在第三层中,由于对每个二进制特征进行抽取,则抽取后最大的维度M,M必然小于D;对于第二层中的L11节点,该节点记录的维度区间是[0,N),也即是分属于该节点的二进制特征最大的跳变次数为N;
那么以L11节点为父节点下的各个子节点存储的维度区间,是将维度区间[0,K]拆分后得到的子区间,K是M与N中的较小值。
如图2所示,是本实施例索引树的结构示意图;本实施例的二进制特征集的最大维度为120,第二层包含4个节点,L11节点记录的维度区间为[0,30),L12节点记录的维度区间为[30,60),L13节点记录的维度区间为[60,90),L14节点记录的维度区间为[90,120];
在第三层中,抽取二进制特征的前面三分之一,即二进制特征集中各个二进制特征的维度都减少了三分之二,减少后最大维度值M为120/3=40;L11记录的维度区间是[0,30),对于L11的各个子节点,由于分属L11的二进制特征最大的跳变次数为30,因此,当前二进制特征抽取后的最大维度值M(40)与L11节点记录的维度区间的右侧端点值(30),两者的较小值为30,将维度区间[0,30)拆分成多个子区间,比如拆分成[0,10)、[10,20)、[20,30],存储在L11的各个子节点;具体的,拆分的个数按需设置,拆分时可等分拆分,也可不等分拆分。
再比如,对于L14节点,该节点的维度区间是[90,120],也即是该节点记录的是整体跳变次数在[90,120]的二进制特征;本实施例在第三层中,各个二进制特征的维度都变成了原来的三分之一,减少后最大维度值M为40,也即是跳变次数的范围只能为0到40,因此取当前二进制特征抽取后的最大维度值M(40)与L14节点记录的维度区间的右侧端点值(120),两者的较小值为30,将维度区间[0,40]拆分成多个子区间,比如拆分成[0,15)、[15,30)、[30,40]存储在L14的各个子节点中。
通过上述分析可知道,第三层节点记录的维度区间,是在其父节点(第二层节点)的基础上,根据抽取后二进制特征的维度再次进行的拆分;而将维度区间[0,K]拆分成多个子区间存储在各个节点中,其中,K为M和N中的较小值,M为当前层数最大维度值缩小后的值,N为所述节点的父节点记录的维度区间的右侧端点值;
同理,在第四层中,在第三层对二进制特征抽取了一次的基础上再次执行抽取操作,进一步缩小了二进制特征的维度和跳变次数。
最后,将所述二进制特征按所述预设抽取规则逐层进行缩小,一层层构建索引树的节点,根据预设的索引树层次,叶子节点存储二进制特征,存储的过程,对应上述的抽取规则,将二进制特征集中各个二进制特征逐层缩小,在所述索引树中查找跳变次数与所述维度区间相匹配的路径,将所述二进制特征存储在所述路径中的叶子节点中,完成整棵索引树的构建过程。
具体的,在所述索引树中查找所述二进制特征的跳变次数与所述维度区间相匹配的路径时,可将所述二进制特征按所述预设抽取规则逐层进行缩小,在所述索引树中查找所述二进制特征的跳变次数与所述维度区间相匹配的路径;在检索时一层层缩小二进制特征,可有效地减少检索时间。
在一较佳实施例中,所述将所述二进制特征按所述预设抽取规则逐层进行缩小,在所述索引树中查找跳变次数与所述维度区间相匹配的路径,将所述二进制特征存储在所述相匹配的路径的叶子节点中的步骤包括:
根据所述二进制特征的跳变次数,在所述索引树中查找第二层节点,获得二进制特征的跳变次数与维度区间相匹配的节点;
读取所述相匹配的节点的子节点,进入下一层;
将所述二进制特征按所述预设抽取规则逐层进行缩小,获得缩小后的二进制特征的跳变次数与维度区间相匹配的节点;
当所述相匹配的节点为叶子节点时,将所述二进制特征存储在所述叶子节点中。
在本实施例中,首先根据二进制特征集中各个二进制特征的跳变次数,获得跳变次数在索引树第二层中记录的维度区间相匹配的节点;读取该节点的子节点,从第三层节点开始,将所述二进制特征按所述预设抽取规则逐层进行缩小,根据缩小后的二进制特征的跳变次数,获得在索引树中维度区间与缩小后的二进制特征的跳变次数相匹配的节点;再次读取其子节点,即再下一层,将该二进制特征按所述预设抽取规则逐层再次进行缩小,查找与其跳变次数相匹配的节点;直到读取到叶子节点时,将二进制特征存储在该叶子节点中;对二进制特征集中每个二进制特征都进行上述的路径查找工作,更加快速地完成整棵索引树的构建过程。
在一较佳实施例中,所述将所述二进制特征按所述预设抽取规则逐层进行缩小,在所述索引树中查找所述二进制特征的跳变次数与所述维度区间相匹配的路径的步骤包括:
从所述索引树的第二层节点开始查找,获得待查询二进制特征的跳变次数在索引树第二层中记录的维度区间相匹配的节点;
读取所述相匹配的节点的子节点,进入下一层;
将所述待查询二进制特征按所述预设抽取规则逐层进行缩小,根据缩小后的待查询二进制特征的跳变次数,获得在索引树中维度区间与缩小后的待查询二进制特征的跳变次数相匹配的节点;
当所述相匹配的节点为叶子节点时,读取所述叶子节点中存储的二进制特征,得到所述比较集合。
在本实施例中,首先根据待查询二进制特征的跳变次数,获得跳变次数在索引树第二层中记录的维度区间相匹配的节点;读取该节点的子节点,从第三层节点开始,将所述待查询二进制特征按所述预设抽取规则逐层进行缩小,根据缩小后的待查询二进制特征的跳变次数,获得在索引树中维度区间与缩小后的待查询二进制特征的跳变次数相匹配的节点;再次读取其子节点,即再下一层,将该二进制特征按所述预设抽取规则逐层再次进行缩小,查找与其跳变次数相匹配的节点;直到读取到叶子节点时,完成相匹配路径的查找过程;通过将待查询二进制特征层层缩小的过程,可快速地提高检索时间。
在一较佳实施例中,在读取所述相匹配的路径的叶子节点中存储的二进制特征时,还包括步骤:读取所述相匹配的路径的叶子节点的相邻叶子节点,将所述相邻叶子节点存储的二进制特征添加到所述比较集合中;
在本实施例中,当待查询特征在索引树中查找到相匹配路径,获得叶子节点时,还可同时查找该叶子节点的相邻节点,由于相邻节点与叶子节点中存储的二进制特征可能相似度较高,这样扩大了待查询特征在二进制特征集中的检索范围,使得检索结果更为精确,防止漏检。
在一较佳实施例中,将待查询特征与所述路径中叶子节点存储的二进制特征进行穷举比较,获得检索结果的步骤为:
计算所述待查询特征与所述比较集合中每个二进制特征的海明距离,输出所述海明距离等于预设阈值的二进制特征作为所述检索结果;
本实施例针对二进制特征的特点,以海明距离作为判断两个二进制特征相似度的标准;具体的,可根据检索需求得到预设阈值,将待查询特征与所述叶子节点存储的每个二进制特征进行比较,获得两者的海明距离,当海明距离等于预设阈值,表示该叶子节点中记录的二进制特征与待查询二进制特征相似度较高,输出该二进制特征作为检索结果。
如图3所示,是本发明二进制特征的检索系统的结构示意图,包括:
计算模块31,用于获取待查询二进制特征,计算所述待查询特征的跳变次数;其中,所述跳变次数为所述二进制特征中连续的比特值变化次数;
二进制数据是指用0和1两个数码来表示的数;二进制特征的跳变次数,即二进制特征中连续的比特值变化次数,如二进制特征1011,该特征的第一位和第二位之间发生了1->0的跳变,第二位和第三位之间发生了0->1的跳变,第三位和第四位都是1没有发生跳变,第四位和第一位都是1也没有发生跳变,因此该特征的跳变次数T为2。
第一获取模块32,用于根据所述待查询二进制特征的跳变次数及预设的二进制特征集中各个二进制特征的跳变次数,获得比较集合;
二进制特征集是指搜索库中已存储的所有二进制特征的集合;两个二进制特征的对应比特取值不同的比特数称为这两个特征的海明距离;比如,二进制特征10101和二进制特征00110从第一位开始依次有第一位、第四、第五位不同,则海明距离为3;因此,海明距离可表征两个特征的相似性,海明距离越小,两个特征的相似度也就越大;对比海明距离与本实施例中的二进制特征的跳变次数,可知,若两个特征的海明距离越小,两者的跳变次数也更加接近。因此采用跳变次数进行检索查询,能获得精确的查询结果;
本模块获取待查询二进制特征,对待查询二进制特征同样计算跳变次数,根据二进制特征集中各个二进制特征的跳变次数,可从集合中筛选出跳变次数与待查询二进制特征的跳变次数较为接近的部分二进制特征,得到比较集合。
比较模块33,用于将所述待查询二进制特征与所述比较集合中的二进制特征进行穷举比较,获得检索结果;
在本模块,可将待查询二进制特征,与获得的比较集合中的各个二进制特征进行穷举比较,由于比较集合中得到了与待查询二进制特征跳变次数较为接近的特征,减少了穷举比较的数量,能更加快速地获得检索结果。
在一较佳实施例中,为了更快地获得比较集合,还可包括:
第二获取模块,用于获取所述二进制特征集中二进制特征的维度值;
第一查找模块,用于在预设的索引树中,对所述二进制特征集中每个二进制特征,查找跳变次数与维度区间相匹配的路径,将所述二进制特征存储在所述相匹配的路径的叶子节点中,其中,所述索引树包括多条根据所述维度值创建的不同维度区间的路径。
具体的,所述二进制特征的维度,即二进制特征的比特位数,如二进制特征1011,其维度为4;
本实施例该二进制特征集的索引为树形结构,其节点层次和节点个数可根据需求而预设;比如一棵树,共P层,第一层为根节点,其他各层为子节点,一棵树的终端节点为没有子节点的节点,即为叶子节点;
本实施例中的索引树中,节点层次及各层节点个数不限,节点存储维度区间,叶子节点则存储二进制特征,对二进制特征集中的每个二进制特征,在所述索引树中查找跳变次数与所述维度区间相匹配的路径,再将所述二进制特征存储在所述路径中的叶子节点中,可完成整棵索引树的构建过程;其中,每个叶子节点实际上即为一种比较集合。
本实施例的索引树的结构,可划分三层,第一层为根节点,第二层是按照二进制特征整体跳变次数的一种划分,可将二进制特征集的最大维度区间[0,D]拆分成多个小的维度区间,记录在第二层节点中;具体的拆分规则,可等分拆分,也可以不等分拆分;
若索引树预设分成三层,即是将二进制特征集中的各个二进制特征根据跳变次数分成多份,第二层节点按照二进制特征整体跳变次数进行划分,第三层叶子节点存储跳变次数符合划分后的维度区间的二进制特征,每一份集合中的二进制特征跳变次数比较接近,相似度较高,当输入待查询二进制特征时,可根据待查询二进制特征的跳变次数快速地找到与其相似度较高的检索结果。
对应地,所述第一获取模块32还包括:
第三查找模块,用于在所述索引树中查找所述待查询二进制特征的跳变次数与所述维度区间相匹配的路径;
第二读取模块,用于读取所述相匹配的路径的叶子节点中存储的二进制特征,得到所述比较集合。
与所述索引树相对应,在索引树的每一层节点中,根据待查询二进制特征的跳变次数,与索引树各节点存储的维度区间进行匹配,得到相匹配的路径;对该路径中的叶子节点,由于叶子节点也存储了符合该路径的二进制特征,因此再将待查询特征与所述路径中叶子节点存储的二进制特征进行穷举比较,能够快速地获得检索结果。
为了进一步提高检索速度和检索精度,具体的,还可包括:
第三获取模块,用于根据所述二进制特征集中二进制特征的维度值,获取二进制特征集的最大维度区间;
第一缩小模块,用于在所述索引树第二层中各个预设节点存储所述最大维度区间拆分后的各个维度区间,从第三层起,将所述二进制特征集的最大维度值按预设抽取规则逐层进行缩小,其中,同一个父节点的各个子节点存储的维度区间,是将维度区间[0,K]拆分后得到的子区间,K为M和N中的较小值,M为最大维度值缩小后的值,N为所述子节点的父节点存储的维度区间的右侧端点值;
所述第一查找模块还用于:将所述二进制特征按所述预设抽取规则逐层进行缩小,在所述索引树中查找跳变次数与所述维度区间相匹配的路径,将所述二进制特征存储在所述相匹配的路径的叶子节点中。
在本实施例中,读取二进制特征集中二进制特征的维度值D,构成该二进制特征集的最大维度区间[0,D];根据上述维度和跳变次数的含义,可知二进制特征集中,每个二进制特征的跳变次数T都小于或等于D。
本实施例中的索引树中,第二层的节点个数不限,第二层是按照二进制特征整体跳变次数的一种划分,可将二进制特征集的最大维度区间为[0,D]拆分成多个小的维度区间,记录在第二层节点中;具体的拆分规则,可等分拆分,也可以不等分拆分;
比如第二层共有L1个节点,若按等分划分,则可将最大维度区间为[0,D]拆分成L1个维度区间,该层第一个节点记录的维度区间是[0,D/L1),第二个节点记录的是[D/L1,2*D/L1),以此类推;根据各个节点记录的维度区间,则将二进制特征集中各个二进制特征按照其跳变次数,分成了L1份;
第三层节点是第二层节点的子节点,因为从根节点到第二层中的L1个节点,这里具有L1条路径,已将二进制特征集中的各个二进制特征分成了L1份,因此索引树中从第三层起建立的节点,思路是将第二层中每一类二进制特征逐层缩小位数,以降低后续的检索时间。
具体的,可抽取每个二进制特征的一部分,统计抽取后该部分二进制特征的跳变次数,而抽取的过程可按需设置,比如可抽取二进制特征的前半部分或后半部分,或者也可将二进制特征三等分,抽取前面的三分之二,抽取过程可包括多种抽取方式。
根据上述抽取方法可知,在本层中,进一步缩小了二进制特征的维度和跳变次数,对于索引树而言,则进一步缩小了各个节点存储的维度区间;
比如在第三层中,由于对每个二进制特征进行抽取,则抽取后最大的维度M,M必然小于D;对于第二层中的L11节点,该节点记录的维度区间是[0,N),也即是分属于该节点的二进制特征最大的跳变次数为N;
那么以L11节点为父节点下的各个子节点存储的维度区间,是将维度区间[0,K]拆分后得到的子区间,K是M与N中的较小值。
同理,在第四层中,在第三层对二进制特征抽取了一次的基础上再次执行抽取操作,进一步缩小了二进制特征的维度和跳变次数。
最后,将所述二进制特征按所述预设抽取规则逐层进行缩小,一层层构建索引树的节点,根据预设的索引树层次,叶子节点存储二进制特征,存储的过程,对应上述的抽取规则,将二进制特征集中各个二进制特征逐层缩小,在所述索引树中查找跳变次数与所述维度区间相匹配的路径,将所述二进制特征存储在所述路径中的叶子节点中,完成整棵索引树的构建过程。
具体的,所述第三查找模块还用于:在所述索引树中查找所述二进制特征的跳变次数与所述维度区间相匹配的路径时,将所述二进制特征按所述预设抽取规则逐层进行缩小,在所述索引树中查找所述二进制特征的跳变次数与所述维度区间相匹配的路径;本实施例在检索时一层层缩小二进制特征,可有效地减少检索时间。
在一较佳实施例中,所述第一查找模块还可包括:
第二查找模块,用于根据所述二进制特征的跳变次数,在所述索引树中查找第二层节点,获得二进制特征的跳变次数与维度区间相匹配的节点;
第一读取模块,用于读取所述相匹配的节点的子节点,进入下一层;
第二缩小模块,用于将所述二进制特征按所述预设抽取规则逐层进行缩小,获得缩小后的二进制特征的跳变次数与维度区间相匹配的节点;
第一存储模块,用于当所述相匹配的节点为叶子节点时,将所述二进制特征存储在所述叶子节点中。
在本实施例中,首先根据二进制特征集中各个二进制特征的跳变次数,获得跳变次数在索引树第二层中记录的维度区间相匹配的节点;读取该节点的子节点,从第三层节点开始,将所述二进制特征按所述预设抽取规则逐层进行缩小,根据缩小后的二进制特征的跳变次数,获得在索引树中维度区间与缩小后的二进制特征的跳变次数相匹配的节点;再次读取其子节点,即再下一层,将该二进制特征按所述预设抽取规则逐层再次进行缩小,查找与其跳变次数相匹配的节点;直到读取到叶子节点时,将二进制特征存储在该叶子节点中;对二进制特征集中每个二进制特征都进行上述的路径查找工作,更加快速地完成整棵索引树的构建过程。
在一较佳实施例中,所述第三查找模块还可包括:
第四查找模块,用于从所述索引树的第二层节点开始查找,获得待查询二进制特征的跳变次数在索引树第二层中记录的维度区间相匹配的节点;
第三读取模块,用于读取所述相匹配的节点的子节点,进入下一层;
第三缩小模块,用于将所述待查询二进制特征按所述预设抽取规则逐层进行缩小,根据缩小后的待查询二进制特征的跳变次数,获得在索引树中维度区间与缩小后的待查询二进制特征的跳变次数相匹配的节点;
第四读取模块,用于当所述相匹配的节点为叶子节点时,读取所述叶子节点中存储的二进制特征。
在本实施例中,首先根据待查询二进制特征的跳变次数,获得跳变次数在索引树第二层中记录的维度区间相匹配的节点;读取该节点的子节点,从第三层节点开始,将所述待查询二进制特征按所述预设抽取规则逐层进行缩小,根据缩小后的待查询二进制特征的跳变次数,获得在索引树中维度区间与缩小后的待查询二进制特征的跳变次数相匹配的节点;再次读取其子节点,即再下一层,将该二进制特征按所述预设抽取规则逐层再次进行缩小,查找与其跳变次数相匹配的节点;直到读取到叶子节点时,完成相匹配路径的查找过程;通过将待查询二进制特征层层缩小的过程,可快速地提高检索时间。
在一较佳实施例中,所述第二读取模块还用于在读取所述相匹配的路径的叶子节点中存储的二进制特征时,还读取所述相匹配的路径的叶子节点的相邻叶子节点,将所述相邻叶子节点存储的二进制特征添加到所述比较集合中。
在本实施例中,当待查询特征在索引树中查找到相匹配路径,获得叶子节点时,还可同时查找该叶子节点的相邻节点,由于相邻节点与叶子节点中存储的二进制特征相似度较高,这样扩大了待查询特征在二进制特征集中的检索范围,使得检索结果更为精确,防止漏检。
在一较佳实施例中,所述比较模块还用于:计算所述待查询特征与所述比较集合中每个二进制特征的海明距离,输出所述海明距离等于预设阈值的二进制特征作为所述检索结果;
本实施例针对二进制特征的特点,以海明距离作为判断两个二进制特征相似度的标准;具体的,可根据检索需求得到预设阈值,将待查询特征与所述叶子节点存储的每个二进制特征进行比较,获得两者的海明距离,当海明距离等于预设阈值,表示该叶子节点中记录的二进制特征与待查询二进制特征相似度较高,输出该二进制特征作为检索结果。
本发明二进制特征的检索方法及系统,针对二进制特征的特点,记录二进制特征中连续的比特值变化次数作为跳变次数,分别计算二进制特征集各个特征的跳变次数,当获取到待查询二进制特征时,根据两者的跳变次数,获得比较集合;由于比较集合中得到了与待查询二进制特征跳变次数较为接近的特征,减少了穷举比较的数量,能更加快速地获得检索结果。
本发明中的步骤虽然用标号进行了排列,但并不用于限定步骤的先后次序,除非明确说明了步骤的次序或者某步骤的执行需要其他步骤作为基础,否则步骤的相对次序是可以调整的。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
图4为能实现本发明实施例的一个计算机系统1000的模块图。该计算机系统1000只是一个适用于本发明的计算机环境的示例,不能认为是提出了对本发明的使用范围的任何限制。计算机系统1000也不能解释为需要依赖于或具有图示的示例性的计算机系统1000中的一个或多个部件的组合。
图4中示出的计算机系统1000是一个适合用于本发明的计算机系统的例子。具有不同子系统配置的其它架构也可以使用。例如有大众所熟知的台式机、笔记本等类似设备可以适用于本发明的一些实施例。但不限于以上所列举的设备。
如图4所示,计算机系统1000包括处理器1010、存储器1020和系统总线1022。包括存储器1020和处理器1010在内的各种系统组件连接到系统总线1022上。处理器1010是一个用来通过计算机系统中基本的算术和逻辑运算来执行计算机程序指令的硬件。存储器1020是一个用于临时或永久性存储计算程序或数据(例如,程序状态信息)的物理设备。系统总线1020可以为以下几种类型的总线结构中的任意一种,包括存储器总线或存储控制器、外设总线和局部总线。处理器1010和存储器1020可以通过系统总线1022进行数据通信。其中存储器1020包括只读存储器(ROM)或闪存(图中都未示出),以及随机存取存储器(RAM),RAM通常是指加载了操作系统和应用程序的主存储器。
计算机系统1000还包括显示接口1030(例如,图形处理单元)、显示设备1040(例如,液晶显示器)、音频接口1050(例如,声卡)以及音频设备1060(例如,扬声器)。显示设备1040和音频设备1060是用于体验多媒体内容的媒体设备。
计算机系统1000一般包括一个存储设备1070。存储设备1070可以从多种计算机可读介质中选择,计算机可读介质是指可以通过计算机系统1000访问的任何可利用的介质,包括移动的和固定的两种介质。例如,计算机可读介质包括但不限于,闪速存储器(微型SD卡),CD-ROM,数字通用光盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁存储设备,或者可用于存储所需信息并可由计算机系统1000访问的任何其它介质。
计算机系统1000还包括输入装置1080和输入接口1090(例如,IO控制器)。用户可以通过输入装置1080,如键盘、鼠标、显示装置1040上的触摸面板设备,输入指令和信息到计算机系统1000中。输入装置1080通常是通过输入接口1090连接到系统总线1022上的,但也可以通过其它接口或总线结构相连接,如通用串行总线(USB)。
计算机系统1000可在网络环境中与一个或者多个网络设备进行逻辑连接。网络设备可以是个人电脑、服务器、路由器、智能电话、平板电脑或者其它公共网络节点。计算机系统1000通过局域网(LAN)接口1100或者移动通信单元1110与网络设备相连接。局域网(LAN)是指在有限区域内,例如家庭、学校、计算机实验室、或者使用网络媒体的办公楼,互联组成的计算机网络。WiFi和双绞线布线以太网是最常用的构建局域网的两种技术。WiFi是一种能使计算机系统1000间交换数据或通过无线电波连接到无线网络的技术。移动通信单元1110能在一个广阔的地理区域内移动的同时通过无线电通信线路接听和拨打电话。除了通话以外,移动通信单元1110也支持在提供移动数据服务的2G,3G或4G蜂窝通信系统中进行互联网访问。
应当指出的是,其它包括比计算机系统1000更多或更少的子系统的计算机系统也能适用于本发明一种二进制特征的检索方法。
如上面详细描述的,适用于本发明的计算机系统1000能执行二进制特征的检索方法的指定操作。计算机系统1000通过处理器1010运行在计算机可读介质中的软件指令的形式来执行这些操作。这些软件指令可以从存储设备1070或者通过局域网接口1100从另一设备读入到存储器1020中。存储在存储器1020中的软件指令使得处理器1010执行上述的二进制特征的索引构建方法及二进制特征的检索方法。此外,通过硬件电路或者硬件电路结合软件指令也能同样实现本发明。因此,实现本发明并不限于任何特定硬件电路和软件的组合。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。