抽稀图像的生成方法及装置与流程

文档序号:11584410阅读:525来源:国知局
抽稀图像的生成方法及装置与流程

本发明涉及空间数据处理领域,特别是涉及一种抽稀图像的生成方法及装置。



背景技术:

在地理信息系统(geographicinformationsystem或geo-informationsystem,简称为gis)中,点群是一种常用形式,但有时候数量过大的点群不仅不利于计算与渲染,反而可能影响对分布特征的识别。因此在有些情况下,需要对图像中的点群进行抽稀处理。

现有技术提供了一些抽稀的方法,往往操作较为复杂。

针对如何简化抽稀方法的问题,目前业界没有理想的解决方式。



技术实现要素:

本发明目的在于提供一种抽稀图像的生成方法及装置,旨在解决现有技术中抽稀方法过于复杂的问题。

本发明提供了一种抽稀图像的生成方法,该方法包括:

确定原始图像的抽稀范围,其中,所述抽稀范围中包括多个原始点;

读取点群数据,所述抽稀范围内的所述原始点构成点群,所述点群数据包括所述原始点的位置信息;

确定所述保留点的数量,所述保留点为对所述原始图像抽稀时取出的所述原始点;

按所述位置信息将所述点群切分成多个子点群,并根据所述子点群在点群的占比以及所述保留点的数量,从所述子点群中取出保留点;

根据所述保留点生成抽稀图像。

本发明还提供了一种抽稀图像的生成装置,该装置包括:

第一确定模块,用于确定原始图像的抽稀范围,其中,所述抽稀范围中包括多个原始点;

读取模块,用于读取点群数据,所述抽稀范围内的所述原始点构成点群,所述点群数据包括所述原始点的位置信息;

第二确定模块,用于确定所述保留点的数量,所述保留点为对所述原始图像抽稀时取出的所述原始点;

切分模块,用于按所述位置信息将所述点群切分成多个子点群,并根据所述子点群在点群的占比以及所述保留点的数量,从所述子点群中取出保留点;

生成模块,用于根据所述保留点生成抽稀图像。

本发明将原始图像中的点集切分为多个子点群,并通过分别在各子点群中取点实现对原始图像的抽稀,该方法操作简单,且抽稀图像与原始图像分布特征相似,达到了较好的抽稀效果。

附图说明

图1是本发明实施例提供的抽稀图像的生成方法的流程图;

图2是本发明实施例提供的点群的切分方法的流程图;

图3是本发明实施例提供的切分原始点集和确定抽稀配额的方法的流程图;

图4是本发明实施例提供的四叉树的示意图;

图5是本发明实施例提供的保留点的提取方法;

图6是本发明优选实施例提供的抽稀图像的生成方法的流程图;

图7是本发明优选实施例提供的切分四叉树节点的流程图;

图8是本发明优选实施例提供的插入子节点的流程图;

图9是本发明优选实施例提供的计算抽稀配额的流程图;

图10a是原始图像的示意图;

图10b是抽稀图像的示意图;

图11是本发明实施例提供的抽稀图像的生成装置的结构框图。

具体实施方式

为了使本发明要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例提供了一种抽稀图像的生成方法,图1是本发明实施例提供的抽稀图像的生成方法的流程图,如图1所示,该方法具体包括步骤s110至步骤s150。

步骤s110,确定原始图像的抽稀范围,其中,抽稀范围中包括多个原始点。

本实施例中的原始图像是二维图像,为了便于后续的处理,可以将该原始图像放在二维的坐标系中。在确定抽稀范围前,可以先对待抽稀的原始点进行统计,确定其分布的范围,抽稀范围可适当大于其真实分布范围,并用矩形表示,例如抽稀范围为横坐标0到100,纵坐标20到50所构成的矩形范围。

步骤s120,读取点群数据,抽稀范围内的原始点构成点群,点群数据包括原始点的位置信息。

坐标是位置信息的一种体现方式,本实施例中,点群数据可以包括各原始点的坐标。

步骤s130,确定保留点的数量,保留点为对原始图像抽稀时取出的原始点。

保留点的数量可以通过两种方式确定:既可以直接确定保留点的数量,也可以通过抽稀比例来间接确定保留点的数量。保留点的数量根据实际需求进行确定。

步骤s140,按位置信息将点群切分成多个子点群,并根据子点群在点群的占比以及保留点的数量,从子点群中取出保留点。

点群即点的群组,根据预设的规则可以将原始点分到不同的点群,以实现对原始点的分类,抽稀范围内所有的原始点构成了点群,可以直观地将抽稀范围划分为多个区域,划分后抽稀范围中各个区域内的原始点分别构成子点群。

图2是对步骤s104的详细描述,具体的,图2是本发明实施例提供的点群的切分方法的流程图,如图2所示,该方法包括步骤s202至步骤s206。

步骤s202,建立原始点集,原始点集为原始点的集合。

原始点集是原始点的集合,点集是点群的一种具体实现方式,点集可以从数据的角度对原始点的分类,即根据位置信息对原始点进行分类。后续步骤将详细说明通过位置信息对原始信息进行分类的过程。

步骤s204,根据原始点的位置信息,将原始点集切分为多个子点集,并确定各子点集的抽稀配额。

本实施例可以根据坐标信息对原始点集进行切分,并确定各子点集的抽稀配额。图3是对步骤s204的详细描述,具体的,图3是本发明实施例提供的切分原始点集和确定抽稀配额的方法的流程图,如图3所示,该方法包括:

步骤s302,创建四叉树,在四叉树的根节点中存入原始点集。

四叉树包括1个根节点和4个子节点,每个子节点又可以继续衍生出4个子节点。

图4是本发明实施例提供的四叉树的示意图,如图4所示,根节点root包括4个子节点node:左上子节点(lefttop,简称为lt)、右上子节点(righttop,简称为rt)、右下子节点(rightbottom,简称为rb)和左下子节点(leftbottom,简称为lb)。每个node又可以继续切分出lt、rt、lb和rb。

在本发明实施例创建的四叉树中,每个节点包含的信息包括空间范围、存储的点集、配额和四个子节点。将原始点集存入四叉树的过程中,仅提取各原始点的位置信息,而不考虑其他的属性。

例如,抽稀范围为横坐标0至200,纵坐标20至50,包括16个原始点,坐标如下:d1=(1,1),d2=(2,2),d3=(60,25),d4=(70,30),d5=(71,40),d6=(72,45),d7=(73,50),d8=(74,60),d9=(5,35),d10=(8,37),d11=(10,39),d12=(13,41),d13=(15,43),d14=(17,45),d15=(19,47),d16=(21,49)。根节点中的信息包括空间范围:(0-200,20-50);点集包括(d1,d2,d3,……,d16);配额为8,即按50%抽稀,取出8个保留点;4个子节点lt、rt、lb和rb。

步骤s304,生成根节点的四个子节点。

根节点root的空间范围:(0-200,20-50),生成的4个子节点的空间范围分别是lt(0-50,35-50),rt(50-100,35-50),lb(0-50,0-35),rb(50-100,0-35)。

步骤s306,将原始点集中的原始点按位置信息插入四个子节点之一。

将各原始点的坐标信息与4个子节点的空间范围进行比对,从而将各原始点插入到了各子节点中。

具体的,lt包括8个原始点,分别是d9=(5,35),d10=(8,37),d11=(10,39),d12=(13,41),d13=(15,43),d14=(17,45),d15=(19,47),d16=(21,49)。

rt包括4个点,分别是d5=(71,40),d6=(72,45),d7=(73,50),d8=(74,60)。

rb包括2个点,分别是d3=(60,25),d4=(70,30)。

lb包括2个点,分别是d1=(1,1),d2=(2,2)。

由于root的配额是8,总节点数为16,即抽稀率为50%,因此每个子节点的抽稀配额为原始点数的50%,即lt抽稀配额为4,rt抽稀配额为2,rb抽稀配额为1,lb抽稀配额为1。

步骤s308,在每个子节点中建立子点集,子点集为子节点内原始点的集合。

例如本实施例中lt的子点集为(d9,d10,d11,d12,d13,d14,d15,d16)

rt的子点集为(d5,d6,d7,d8),rb的子点集为(d3,d4),lb的子点集为(d1,d2)。

步骤s206,根据抽稀配额,从各子点集中取出保留点。

如何取出保留点可以根据抽稀配额来确定,根据根节点的抽稀配额确定各子点集的抽稀额度,从而实现均衡地抽稀。为了保证不遗漏任一个子节点,本实施例中通过栈对各子节点进行保存。图5是对步骤s206的详细描述,具体的,图5是本发明实施例提供的保留点的提取方法,如图5所示,该方法包括:

步骤s502,将多个子点集依次存入栈中。

栈的特点是后进先出,本实施例涉及对子点集的多次切分,通过栈可以保证逻辑清晰的处理每一个子点集,下面结合实例进行说明。

本步骤中原始点集切分成4个子点集(100,200,300,400),按从前向后的顺序依次存入栈中。

步骤s504,从栈中取出一个子点集。

根据栈的后进先出的特点,此时被取出的子点集为400。

步骤s506,判断子点集中,抽稀配额与预设阈值的关系并执行对应操作:

当抽稀配额大于预设阈值时,根据位置信息将子点集切分为多个子点集,确定各子点集的抽稀配额,并将个子点集存入栈中。

当抽稀配额等于预设阈值时,从子点集中取出保留点存入链表,并舍去子点集。

当抽稀配额小于预设阈值时,直接舍去子点集。

预设阈值用于控制抽稀的均匀度,阈值越小,则抽稀越均匀,例如本实施例将预设阈值设为1。在本步骤中,如果子点集400的抽稀配额大于1,则对400进行继续切分:分为410、420、430和440四个子点集,切分后将其依次存入栈中,此时栈中的子点集为(100,200,300,410,420,430,440)。

在切分子点集400时,使400对应的四叉树节点生成4个子节点,将子点集400中的原始点取出,根据位置信息将各原始点插入到子节点中,这一过程就是对当前节点的所有子节点依次调用插入点操作。

由于直接通过子节点抽稀配额所占比例和当前节点抽稀配额相乘得到的结果是小数,本方法对这种情况直接取整(即舍去小数部分)。因此子节点的抽稀配额之和此时不等于父节点的抽稀配额,为了补偿这个差值(介于0-4之间),统计子节点抽稀配额之和与父节点抽稀配额的差值,将差值依次补偿到子节点抽稀配额中。例如:父节点的抽稀配额为10,子节点抽稀配额分别为2.1、2.2、2.8和2.9,舍去小数部分以后子节点抽稀配额为2、2、2和2,子节点抽稀配额之和为8,与父节点抽稀配额差值为2,则对上述小数部分较大的两个子节点的抽稀配额加1,即子节点抽稀配额分别为2、2、3和3。

步骤s508,再次从栈中取出一个子点集,再次判断抽稀配额与预设阈值的关系并执行对应操作,直至栈中的子点集全部被取出。

此时取出的子点集为440,如果子点集440的抽稀配额恰好为1,说明那么从440子点集中取出1个点作为保留点,这个点可以从子点集440从随机抽取,也可以抽取离该子点集的空间范围几何中心最近的点,例如该子点集的空间范围是(10-20,50-80),那么就抽取距离(15,65)最近的原始点。取出的保留点可以存储在一个储存单元,例如全局链表中。在取出保留点后,将子点集440舍去。

此时栈中的子点集为(100,200,300,410,420,430)。

再从栈中取出一个子点集430,如果子点集430的抽稀配额小于1,说明无需从该子点集取出保留点,因此可以直接舍去子点集430。

此时栈中的子点集为(100,200,300,410,420)。继续取出一个子点集,重复上述的判断和操作,直到将栈中所有的子点集全部处理完。

本实施例中,为了保证选取的数量的准确以及操作的方便,抽稀配额可以用整型数据存储。

步骤s150,根据保留点生成抽稀图像。

根据保留点生成的图像的抽稀图像中点的分布情况与原始情况非常相似。

本步骤中,可以首先从链表中提取所有保留点,然后根据从链表中提取的保留点调用这些保留点的其他属性和信息,生成抽稀图像。

本实施例将待选取的原始点的数量作为抽稀配额记录到四叉树节点中,并设置阈值,根据抽稀配额与阈值的相互关系选择对节点进行的操作,包括切分、入栈、选点、舍去等。与其他方法相比,本实施思路简单,操作容易,并能精确控制抽稀后保留的点的数量,抽稀效果好。

图6是本发明优选实施例提供的抽稀图像的生成方法的流程图,如图6所示,该方法包括步骤s601至步骤s612。

步骤s601,确定原始点群范围,用矩形表示。

步骤s602,确定抽稀程度,以抽稀比例或抽稀数量表示。

步骤s603,根据原始点群范围创建四叉树的根节点并存入原始点群。

步骤s604,计算根节点抽稀配额并创建用于存放待处理节点的栈。

步骤s605,切分四叉树节点。

步骤s606,创建该节点的四个子节点。

步骤s607,取出当前节点的点集插入子节点中。

步骤s608,计算抽稀配额。

步骤s609,根据抽稀配额与阈值的关系等条件对子节点进行入栈、选点和舍去等处理。

步骤s610,判断栈是否为空。如果是,执行步骤s611;如果否,执行步骤s612。

步骤s611,从栈中弹出一个节点,并执行步骤s605。

步骤s612,将结果存入文本,创建抽稀的点涂层用以展示。

通过本优选实施例,可以简便地生成抽稀图像。

图7是对步骤s605的详细描述,具体的,图7是本发明优选实施例提供的切分四叉树节点的流程图。如图7所示,该方法包括步骤s701至步骤s709。

步骤s701,执行stackquadtreenode.pop()弹出一个节点。

步骤s702,按四叉树规则实例化该节点的四个子节点。

步骤s703,取出该节点的点集插入其子节点中。

步骤s704,根据子节点包含的点的个数计算子节点抽稀配额。

步骤s705,判断子节点抽稀配额与阈值的关系。如果子节点抽稀配额大于阈值,则执行步骤s706;如果子节点抽稀配额等于阈值,则执行步骤s707;如果子节点抽稀配额小于阈值,则执行步骤s708。

步骤s706,切分该子节点并压入栈中。

步骤s707,从子节点中选点后舍去该子节点。

步骤s708,直接舍去该子节点。

步骤s709,判断栈stackquadtreenode中是否有待处理的节点。如果是,则执行步骤s701;如果否,则结束。

本优选实施例用一种较为便捷的方式实现了对四叉树节点的切分。

图8是对步骤s607的详细描述,具体的,图8是本发明优选实施例提供的插入子节点的流程图。如图8所示,该方法包括步骤s801至步骤s807。

步骤s801,获取一个简单点目标pointfpt。

步骤s802,调用目标节点的insert(pointfpt)方法。

步骤s803,判断当前节点的list<pointf>data是否为空。如果是,则执行步骤s804;如果否,则执行步骤s805。

步骤s804,实例化list<pointf>data。

步骤s805,判断pt是否在当前节点的范围rect内。如果是,则执行步骤s806;如果否,则执行步骤s807。

步骤s806,执行data.add(pt)。

步骤s807,判断待处理点集是否全部插入完成。如果是,则结束;如果否,则执行步骤s801。

本优选实施例用一种较为便捷的方式在四叉树节点中插入目标点集。

图9是对步骤s608的详细描述,具体的,图9是本发明优选实施例提供的计算抽稀配额的流程图。如图9所示,该方法包括步骤s901至步骤s909。

步骤s901,分半将四个子节点的存储的个数记录到ltcourt、rtcourt、lbcourt和rbcourt四个变量中。

步骤s902,分半用父节点抽稀配额乘以个子节点抽稀配额所占比例(根据上述节点存储的点的个数所占比例可得)并取整得到各子节点抽稀配额。

步骤s903,得到各子节点真实抽稀配额与取整后的结果之差(即真实配额的小数部分)存储于float[]array中。

步骤s904,计算父节点抽稀配额与各子节点抽稀配额总数的差delta(介于0-4),创建一个执行delta磁循环。

步骤s905,判断是否已执行delta次。如果是,执行步骤s906;如果否,则执行步骤s907。

步骤s906,结束。

步骤s907,计算得到真实抽稀配额小数部分最大的子节点的索引index。

步骤s908,该子节点抽稀配额加1。

步骤s909,array[index]=-1,即下次去的是次大的记录。返回步骤s905。

通过上述各步骤,可以得到布局特征与原始图像相似的抽稀图像。图10a是原始图像的示意图,该图中有10000个点,图10b是抽稀图像的示意图,该图中有2000个点,通过图10a和图10b的对比可以看出,两幅图的布局特征非常相似。

本发明实施例还提供了一种抽稀图像的生成装置,用以执行上述抽稀图像的生成方法,图11是本发明实施例提供的抽稀图像的生成装置的结构框图,如图11所示,该装置包括第一确定模块1101、读取模块1102、第二确定模块1103、切分模块1104和生成模块1105。

第一确定模块1101用于确定原始图像的抽稀范围,其中,抽稀范围中包括多个原始点。

读取模块1102用于读取点群数据,抽稀范围内的原始点构成点群,点群数据包括原始点的位置信息。

第二确定模块1103用于确定保留点的数量,保留点为对原始图像抽稀时取出的原始点。

切分模块1104用于按位置信息将点群切分成多个子点群,并根据子点群在点群的占比以及保留点的数量,从子点群中取出保留点。

生成模块1105用于根据保留点生成抽稀图像。

优选的,切分模块1104包括建立单元、切分单元和获取单元。

建立单元用于建立原始点集,原始点集为原始点的集合。

切分单元用于根据原始点的位置信息,将原始点集切分为多个子点集,并确定各子点集的抽稀配额。

获取单元用于根据抽稀配额,从各子点集中取出保留点。

优选的,切分单元包括创建子单元、生成子单元、插入子单元和建立子单元。

创建子单元用于创建四叉树,在四叉树的根节点中存入原始点集。

生成子单元用于生成根节点的四个子节点。

插入子单元用于将原始点集中的原始点按位置信息插入四个子节点之一。

建立子单元用于在每个子节点中建立子点集,子点集为子节点内原始点的集合。

优选的,获取单元包括存储子单元、第一获取子单元、判断子单元和第二获取子单元。

存储子单元用于将多个子点集依次存入栈中;

第一获取子单元用于从栈中取出一个子点集;

判断子单元用于判断子点集中,抽稀配额与预设阈值的关系并执行对应操作:

当抽稀配额大于预设阈值时,根据位置信息将子点集切分为多个子点集,确定各子点集的抽稀配额,并将个子点集存入栈中,

当抽稀配额等于预设阈值时,从子点集中取出保留点存入链表,并舍去子点集,

当抽稀配额小于预设阈值时,直接舍去子点集。

第二获取子单元用于再次从栈中取出一个子点集,再次判断抽稀配额与预设阈值的关系并执行对应操作,直至栈中的子点集全部被取出。

优选的,生成模块1105包括提取单元和生成单元。

提取单元用于从链表中提取所有保留点。

生成单元用于根据从链表中提取的保留点生成抽稀图像。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述装置中单元的具体工作过程,可以参考前述装置实施例中的对应过程,在此不再赘述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同装置来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本发明所提供的实施例中,应该理解到,所揭露的装置和装置,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明实施例各个实施例装置的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例各实施例技术方案的精神和范围。

以上仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1