发明内容
本申请所提供的一种基于拓扑地图的主干道识别方法、识别装置及存储装置,能够通过关节点较为准确和快速地从拓扑地图中识别出主干道且识别出的每个主干道具有唯一的序号。
为解决上述技术问题,本申请采用的一个技术方案是:提供一种基于拓扑地图的主干道识别方法,包括:从所述拓扑地图中获得关节点集合;判断所述关节点集合中是否存在关节点;若存在,则从所述关节点集合中获得所有节点度为二的所述关节点形成的至少一个所述主干道,且每个所述主干道具有唯一的序号。
其中,所述从所述关节点集合中获得所有节点度为二的所述关节点形成的至少一个所述主干道,包括:将所述关节点集合中的一个关节点作为当前关节点;判断所述当前关节点是否未被分析且其节点度为二;若是,则对所述当前关节点和与所述当前关节点相连的其他关节点进行分析,以获得包含所述当前关节点的所述主干道;判断是否遍历完所述关节点集合;若是,则将所有所述主干道输出,否则将所述关节点集合中的下一个关节点作为所述当前关节点,并返回至判断所述当前关节点是否未被分析且其节点度为二的步骤。
其中,所述对所述当前关节点和与所述当前关节点相连的其他关节点进行分析,以获得包含所述当前关节点的所述主干道,包括:提供初始化的队列集合以及初始化的主干道节点集合;将所述当前关节点加入至所述队列集合中;移除所述队列集合中位于队首的首节点,并在所述主干道节点集合中增加所述首节点;获得与所述首节点相连的相连节点集合,其中,所述相连节点集合包括关节点和非关节点;获得所述相连节点集合中未被分析且节点度为二的所有相连关节点,并将所有所述相连关节点依次加入至所述队列集合的队尾;判断所述队列集合是否为空;若是,则保存当前所述主干道节点集合,并进入判断是否遍历完所述关节点集合的步骤;否则,返回至移除所述队列集合中位于队首的首节点的步骤。
其中,所述获得所述相连节点集合中未被分析且节点度为二的所有相连关节点,并将所有所述相连关节点依次加入至所述队列集合的队尾,包括:将所述相连节点集合中的一个相连节点作为当前相连节点;判断所述当前相连节点是否为未被分析且节点度为二的关节点;若是,则将所述当前相连节点加入至所述队列集合的队尾;判断是否遍历完所述相连节点集合;若是,则进入判断所述队列集合是否为空的步骤;否则,将所述相连节点集合中的下一个相连节点作为所述当前相连节点,并返回至判断所述当前相连节点是否为未被分析且节点度为二的关节点的步骤。
其中,所述将所述关节点集合中的一个关节点作为当前关节点之前,还包括:提供初始化的遍历节点集合;所述判断所述队列集合是否为空之前,还包括:将所述相连节点集合中的所有相连节点和所述当前关节点加入至所述初始化的遍历节点集合中;所述判断所述当前关节点/相连关节点是否未被分析包括:判断所述当前关节点/相连关节点是否位于所述遍历节点集合中。
其中,所述将所述关节点集合中的一个关节点作为当前关节点之前,包括:初始化主干道序号;所述获得包含所述当前关节点的所述主干道之后,还包括:对所述主干道序号进行迭代处理。
其中,所述判断是否遍历所述关节点集合之前,还包括:判断所述当前关节点是否未被分析且其关节度超过二;若是,则记录所述当前关节点;所述判断是否遍历完所述相连节点集合之前还包括:判断所述相连节点是否为未被分析且其关节度超过二的关节点;若是,则记录所述相连节点。
其中,还包括:利用记录的所述当前关节点、所述相连节点和所述主干道获得每个所述主干道对应的出入口节点。
为解决上述技术问题,本申请采用的另一个技术方案是:提供一种基于拓扑地图的主干道识别装置,包括:相互耦接的存储器和处理器;其中,所述存储器内存储有程序指令,所述处理器用于执行所述程序指令以实现上述任一实施例中的主干道识别方法。
为解决上述技术问题,本申请采用的另一个技术方案是:提供一种存储装置,存储有能够被处理器运行的程序指令,所述程序指令用于实现上述任一实施例中的主干道识别方法。
本申请的有益效果是:一方面,本申请中所获得的主干道是由拓扑地图中节点度为二的关节点形成的。关节点的定义为在拓扑地图中删除该节点会使拓扑地图的子图数量增加一的节点,而由此关节点获得主干道的定义明确,即拓扑地图中主干道是其两边节点互相连通的唯一通道,断开主干道的任意一点都会使拓扑地图子图个数加一;另一方面,本申请中获取的并不是所有主干道节点的集合,本申请中可以获得每条独立的主干道且每条独立的主干道具有唯一的序号,为后续的使用提供便利;再一方面,本申请中根据拓扑地图识别出的主干道可解释性强,识别出不满足条件的主干道可以追溯到具体原因,而基于深度学习进行普通地图中道路识别的方式可解释性差,无法回溯具体原因。又一方面,本申请所提供的基于拓扑地图的主干道识别方法在实际应用过程中可以根据拓扑地图的变化进行动态识别,若对拓扑地图节点连边关系进行调整,识别出的主干道也会相应调整,具有较强灵活性。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
请参阅图1,图1为本申请基于拓扑地图的主干道识别方法一实施方式的流程示意图,该识别方法包括:
S101:从拓扑地图中获得关节点集合。
具体地,在本实施例中,上述步骤S101之前还包括:接收输入的拓扑地图,以及输入的节点集合V、节点的相连节点集合V_E;其中,拓扑地图是一种保持点与线相对位置关系正确而不一定保持图形状与面积、距离、方向正确的抽象地图。节点集合V中的元素称之为节点,节点又可称为点、定点或结点,常用一个方形或圆形或菱形等符号表示,且为了方便区分,这些符号的旁边或内部可以写上表意名称,例如,编号。节点的相连节点是指与该节点通过边直接相连的节点。例如,如图2中所示,图2为拓扑地图一实施方式的结构示意图。以图2中节点4为例,节点4的相连节点集合包括节点2、节点3和节点5。
一般而言,拓扑地图中的节点可以分为关节点和非关节点;关节点的定义为在拓扑地图中删除该节点后会使子图数量加一的节点,非关节点的定义为在拓扑地图中删除该节点后拓扑地图中的子图数量不变的节点。上述步骤S101的实现过程可以为利用现有技术中关节点识别算法从拓扑地图中获得所有关节点集合。例如,图2中的关节点合集包括节点4、节点5、节点6、节点7、节点8、节点13、节点14、节点15、节点16、节点17;图2中剩余节点属于非关节点合集。
S102:判断关节点集合中是否存在关节点。
具体地,上述步骤S102的实现过程可以为判断关节点集合中关节点的个数是否超过0。
S103:若存在,则从关节点集合中获得所有节点度为二的关节点形成的至少一个主干道,且每个主干道具有唯一的序号。
具体步骤S103的实现过程在后续详细阐述。而与上述步骤S103同时进行的还有:若不存在,则判定当前拓扑地图中没有主干道,可以结束识别过程。
一方面,本申请中所获得的主干道是由拓扑地图中节点度为二的关节点形成的。关节点的定义为在拓扑地图中删除该节点会使拓扑地图的子图数量增加一的节点,而由此关节点获得主干道的定义明确,即拓扑地图中主干道是其两边节点互相连通的唯一通道,断开主干道的任意一点都会使拓扑地图子图个数加一;另一方面,本申请中获取的并不是所有主干道节点的集合,本申请中可以获得每条独立的主干道且每条独立的主干道具有唯一的序号,为后续的使用提供便利;再一方面,本申请中根据拓扑地图识别出的主干道可解释性强,识别出不满足条件的主干道可以追溯到具体原因,而基于深度学习进行普通地图中道路识别的方式可解释性差,无法回溯具体原因。又一方面,本申请所提供的基于拓扑地图的主干道识别方法在实际应用过程中可以根据拓扑地图的变化进行动态识别,若对拓扑地图节点连边关系进行调整,识别出的主干道也会相应调整,具有较强灵活性。
在一个实施方式中,请参阅图3,图3为图1中步骤S103对应的一实施方式的流程示意图,上述步骤S103具体包括:
S201:将关节点集合中的一个关节点作为当前关节点。
具体地,在本实施例中,可以从关节点集合中任选一个关节点作为当前关节点开始分析,也可以从关节点集合中选择节点编号最大或最小的关节点作为当前关节点开始分析,本申请对此不作限定。
此外,在上述步骤S201之前还可以包括:提供初始化的遍历节点集合Visited,初始化的遍历节点集合Visited为空,该方式可以便于后续对已经分析过的关节点或非关节点进行跳过处理,提高***的处理速度。
S202:判断当前关节点是否未被分析且其节点度为二。
具体地,上述判断当前关节点是否未被分析的过程可以为:判断当前关节点是否位于遍历节点集合Visited中,若当前关节点位于遍历节点集合中,则表明当前关节点已经被分析过。当然,在其他实施例中,也可不引入遍历节点集合Visited,例如,可以对分析过的关节点作标记,上述判断当前关节点是否被分析的过程可以为判断当前关节点是否被设置标记。
此外,节点度的定义为与节点相连的所有边的关联次数之和;例如,如图2中所示,关节点4的节点度为三,关节点5的节点度为二。上述节点度为二的条件设计可以使得识别出的主干道具有路径唯一性,即不存在其他路径(不经过主干道的路径)可以通往主干道两边的节点。
S203:若是,则对当前关节点和与当前关节点相连的其他关节点进行分析,以获得包含当前关节点的主干道。
具体上述步骤S203的实现过程在后续详细说明,与上述步骤S203同时进行的步骤还有,若否(即当前关节点已经被分析和/或其节点度不为二),则直接进入步骤S204。
S204:判断是否遍历完关节点集合。
S205:若是,则将所有主干道输出。
S206:否则,将关节点集合中的下一个关节点作为当前关节点,并返回至判断当前关节点是否未被分析且其节点度为二的步骤。
进一步,请参阅图4,图4为图3中步骤S203对应的一实施方式的流程示意图,上述步骤S203的实现过程可以包括:
S301:提供初始化的队列集合以及初始化的主干道节点集合。
具体地,在本实施例中,上述步骤S301的具体实现过程可以为:创建主干道节点集合V_M_count,当前创建的主干道节点集合V_M_count为空;初始化队列集合queue,初始化的队列集合queue为空。
S302:将当前关节点加入至队列集合中。
S303:移除队列集合中位于队首的首节点,并在主干道节点集合中增加首节点。
具体地,移除队列集合中位于队首的首节点后,该队列集合中则不包括移除的首节点,移除后的队列集合的首节点变更为其他节点。
S304:获得与首节点相连的相连节点集合,其中,相连节点集合包括关节点和非关节点。
具体地,可以通过查找步骤S101中提及的相连节点集合V_E以获得与该首节点对应的相连节点集合。
S305:获得相连节点集合中未被分析且节点度为二的所有相连关节点,并将所有相连关节点依次加入至队列集合的队尾。
具体地,请参阅图5,图5为图4中步骤S305对应的一实施方式的流程示意图。上述步骤S305具体包括:
S401:将相连节点集合中的一个相连节点作为当前相连节点。
S402:判断当前相连节点是否为未被分析且节点度为二的关节点。
具体地,上述判断当前相连节点是否未被分析的过程可以为:判断当前相连节点是否位于遍历节点集合Visited中,若当前相连节点位于遍历节点集合中,则表明当前相连节点已经被分析过。当然,在其他实施例中,也可不引入遍历节点集合Visited,例如,可以对分析过的相连节点作标记,上述判断当前相连节点是否被分析的过程可以为判断当前相连节点是否被设置标记。
S403:若是,则将当前相连节点加入至队列集合的队尾。
与上述步骤S403同时进行的还包括,若否,则直接进入步骤S404。
S404:判断是否遍历完相连节点集合。
S405:若是,则进入步骤S306。
S406:否则,将相连节点集合中的下一个相连节点作为当前相连节点,并返回至判断当前相连节点是否为未被分析且节点度为二的关节点的步骤。
S306:判断队列集合是否为空。
具体地,在进行上述步骤S306之前还包括:将相连节点集合中的所有相连节点和当前关节点加入至初始化的遍历节点集合中。当然,在其他实施例中,将当前关节点加入至初始化的遍历节点集合中的步骤也可位于上述步骤S303中移除队列集合中位于队首的首节点之后。
S307:若是,则保存当前主干道节点集合,并进入步骤S204。
S308:否则,返回至移除队列集合中位于队首的首节点的步骤。
下面以一个具体的应用场景对上述步骤S203的实现过程作详细说明。以图2中拓扑结构为例,假设当前未被分析且节点度为二的关节点为节点5,初始队列集合queue为空,主干道节点集合V_M_count为空。
A、将节点5加入至队列集合queue中,此时队列集合queue包括{节点5}。
B、将队列集合queue中的首节点,也就是节点5移除,在主干道节点集合V_M_count中增加该首节点,此时队列集合queue为空,主干道节点集合V_M_count包括{节点5}。
C、获得此时首节点,也就是节点5的相连节点集合{节点4,节点6}。
D、步骤C中相连节点集合中未被分析且节点度为二的相连关节点为节点6,将该节点6加入至队列集合queue的队尾,此时队列集合queue包括{节点6}。
E、由于队列集合queue不为空,则将当前队列集合queue中的首节点,也就是节点6移除,在主干道节点集合V_M_count中增加该首节点,此时队列集合queue为空,主干道节点集合V_M_count包括{节点5,节点6}。
F、获得此时首节点,也就是节点6的相连节点集合{节点5,节点7}。
G、步骤F中相连节点集合中未被分析且节点度为二的相连关节点为节点7,将该节点7加入至队列集合queue的队尾,此时队列集合queue包括{节点7}。
H、由于队列集合queue不为空,则将当前队列集合queue中的首节点,也就是节点7移除,在主干道节点集合V_M_count中增加该首节点,此时队列集合queue为空,主干道节点集合V_M_count包括{节点5,节点6、节点7}。
I、获得此时首节点,也就是节点7的相连节点集合{节点6,节点8}。
J、步骤I中相连节点集合中没有未被分析且节点度为二的相连关节点,则此时队列集合queue中无新增节点,此时队列集合queue为空。
K、由于队列集合queue为空,则可以输出当前主干道节点集合V_M_count为{节点5,节点6、节点7}。
从上述过程可以看出所输出的当前主干道节点集合中各个节点之间的次序可以依序排列,为后续的使用提供方便。与上述过程类似的,图2中另一个主干道节点集合{节点14、节点15、节点16}也可以获得。
为了更好地区分每个主干道的序号,上述实施例中步骤S201将关节点集合中的一个关节点作为当前关节点之前,还包括:初始化主干道序号,例如,初始化的主干道序号可以从0、1等开始。上述步骤S203中获得包含当前关节点的主干道之后,还包括:对主干道序号进行迭代处理,例如,可以对主干道序号增加一个预设值,该预设值可以为1、2等。
在一个应用场景中,假设初始化的主干道序号为1,预设值为1,则图2中拓扑地图通过上述识别方法后输出的主干道包括:主干道1:节点5-节点6-节点7;主干道2:节点14-节点15-节点16。
此外,为了获得各个主干道两端的出入口节点,在上述步骤S204判断是否遍历关节点集合之前还可以包括:判断当前关节点是否未被分析且其关节度超过二;若是,则记录当前关节点,例如,图2中节点4、节点8、节点13和节点17可以被记录下来。
上述获得拓扑地图的所有主干道之后还可以包括:利用记录的当前关节点、相连节点和主干道获得每个主干道对应的出入口节点。具体过程可以为,通过主干道中各个关节点和记录下来的关节点之间的相连关系可以确定出各个主干道对应的出入口节点。以图2中由节点5、节点6、节点7形成的主干道为例,经过分析发现节点4为节点5的相连节点,节点8为节点7的相连节点,则节点4和节点8为该主干道的出入口节点。
请参阅图6,图6为本申请基于拓扑地图的主干道识别设备一实施方式的结构示意图,该识别设备包括:获取模块10、判断模块12和执行模块14。其中,获取模块10用于从拓扑地图中获得关节点集合;判断模块12用于判断关节点集合中是否存在关节点;执行模块14用于在判断模块12判断为存在时,从关节点集合中获得所有节点度为二的关节点形成的至少一个主干道,且每个主干道具有唯一的序号。具体获取模块10、判断模块12和执行模块14的工作过程可参见上述识别方法实施例,在此不再赘述。
请参阅图7,图7为本申请基于拓扑地图的主干道识别装置一实施方式的结构示意图,该识别装置包括:相互耦接的存储器20和处理器22;其中,存储器20内存储有程序指令,处理器22用于执行程序指令以实现上述任一实施例中所述的主干道识别方法。
请参阅图8,图8为本申请存储装置一实施方式的结构示意图,该存储装置30存储有能够被处理器运行的程序指令300,该程序指令300用于实现上述任一实施例中所述的主干道识别方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法和装置,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本申请的专利保护范围内。