具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。如图1所示,图1是本说明书实施例提供的一种等高线生成的流程示意图,该流程具体包括如下步骤:
S101,获取多个像素点的数据,其中,像素点的数据包括像素点的位置和真实高度。
在实际应用中,一个像素点对应于一个实际的地理位置。因此,像素点的位置可以对应于实际的经度值和纬度值,或者,也可以是用于包括像素点在图像中的横坐标和纵坐标。在本说明书实施例中,一个像素点包括了该像素点所对应的地理位置的真实海拔高度。
容易理解,在这种表征方式下,像素点之间的高度值可以是变化很快。如果不同的高度对应于不同的灰度颜色(灰度越高代表海拔越高),则此时使用原始的真实高度所得到的二维高度图形将会模糊不清,如图2所示,图2为本说明书实施例所提供的采用真实高度所绘制的高度示意图。
S103,对像素点的真实高度进行离散映射,确定像素点的映射高度值。
由于表征地形的各像素点真实高度变化过快,因此,在本说明书实施例中采用对于高度值进行离散映射的方式进行变换。
离散映射(discrete mapping)的方式可以包括帐篷映射、正弦映射以及逻辑映射等等方式,用于将一个集合中的有限个元素映射到另一个有限集合中,具体而言,在不改变真实高度的相对大小的条件下,对真实高度进行相应的缩小,从而提高计算效率。
例如,一种离散映射的方式为排序映射,有4个海拔高度值,-10m、20m、100m、8880m,在进行了离散映射后,可能得到的数据为1、2、3、4。在这种方式下,各像素点的映射高度值即为1、2、3以及4。
在这种方式下,还可以将排序映射之后的映射高度值进行进一步的划分。例如,针对十万个像素点,假设排序结束后存在一万个序号值(其中可能存在序号相同的情形)。则此时,可以进一步地进行再次映射,将排序在0至1000的映射高度值确定为1,排序在1001至2000的映射高度值确定为2,……排序在9001至10000的映射高度值确定为10。
又例如,在一种实施方式中,可以对各像素点的真实高度进行归一化处理,从而得到一个像素点的真实高度的归一化值。一个像素点的真实高度的归一化值的计算方式为H(归一化值)=[H(真实高度)-H(最小值)]/[H(最大值)-H(最小值)]。
假设在各像素点的原始高度中,真实高度的最小值为0,真实高度的最大值为1000m,则一个真实高度为400m的归一化值即为0.4。即该像素点的映射高度值为0.4。
进一步地,在实际应用中,由于图像中的像素点非常多,在进行了归一化之后,各像素点之间的映射高度值的差异将非常小。续前例而言,真实高度为396m的像素点的映射高度值即为0.396,这与0.4几乎没有什么差别。而在实际显示中,可能并不需要这么高的精度。
基于此,还可以对于真实高度的归一化值进行进一步的区间映射。具体而言,可以将归一化区间[0,1]进行等距离划分,得到若干等距离的数值区间,然后针对任一归一化值首先确定其所属的数值区间,并且以该数值区间的下限作为该像素点的映射高度值。
例如,针对任一像素点,将取值落入[0,0.1)的归一化值映射为0,将取值落入[0.1,0.2)的归一化值映射为0.1,...,将取值落入[0.9,1]的归一化值映射为0.9,等等,并且将映射后的区间下限值确定为像素点的映射高度值。例如,对于归一化值0.396而言,在该实施方式下,其属于数值区间[0.3,0.4),因此,其对应的映射高度值为0.3。
具体的区间划分方式可以根据等高线的精度要求自行设定。通常而言,等高线精度要求越高,可划分的数值区间越密集(即区间长度越短)。通过该方式,一方面即可以降低像素点之间的映射高度值的差异,提高计算效率;另一方面还可以根据实际精度的需要对等高线的变化进行设置。
此外需要说明的是,在本说明书实施例中,等高线/像素点的映射高度值与真实高度值正相关。
S105,根据像素点的位置和映射高度值,生成包含多个区域的可视化图片,其中,每个区域中像素点的映射高度值相同。
如图3所示,图3为本说明书实施例所提供的基于映射高度值的可视化图片的示意图。在该示意图中,基于不同的映射高度值,给定了不同的灰度颜色显示。灰度值越大(越黑)的表征映射高度值越大。
显然,可以认为,一个区域内的高度值是大致相同的,符合等高线的精度需要。而不同的区域则高度不同,因此,各区域的分界线即为等高线。
S107,针对所述可视化图片,检测可视化图片中所包含的各区域的边缘轮廓,确定各区域所对应的等高线。
如图3中所示,已经可以在该示意图中观测到各区域之间的界限。因此,可以从该示意图中检测出区域的边缘轮廓。
具体而言,一种可实施方式即为可以通过事先训练好的边缘识别模型进行边缘轮廓的识别。例如,基于openCV的边缘检测与轮廓提取等等。
在本说明书实施例中,还可以采用另一种检测方式。具体而言,可以遍历所述可视化图片中的像素点,针对任一像素点,检测该像素点的映射高度值与相邻的像素点的映射高度值是否相同。若不同,则可以将该像素点和该相应的像素点均确定为边缘像素点。
通过连接映射高度值相同的边缘像素点,即可以连接得到对应的等高线。容易理解,连接得到的等高线也是多条。如图4所示,图4为本说明书实施例所提供的等高线的示意图。容易理解,距离过大的两个边缘像素点,即使它们的映射高度值相同,也不会被连接。
一条等高线圈定了一块区域,该区域所对应的等高线的高度值对应所述区域中像素点的映射高度值。由于映射高度值可以对应于真实高度值,因此,等高线所对应的真实高度值也可以对应得到。
前述的相邻像素点一般而言即指的是在可视化图片中的距离不超过预设距离的其它像素点。具体而言,像素点之间的距离可以通过像素点的坐标进行计算,例如,(1,99)和(1,100)之间的距离即为1。
由于像素点的坐标一般是连续变化的,因此,通过设置预设距离还可以改变边缘像素点的数量。例如,若设置预设距离为1,则只有上下左右的四个点有可能是边缘像素点,在这种实施方式下,连接得到的等高线的宽度即为一个像素的大小;若设置预设距离为1.5,则,边缘像素点还可以包括对角线的四个点,此时,连接得到的等高线的宽度即为一个像素的大小的2倍。通过该方式,可以灵活的控制绘制得到的等高线的宽度。
通过本说明书实施例中所提供的方案,先不生成地形模型,而是对像素点的真实高度进行离散映射,根据离散后的数据生成高度图像,在高度图的基础上用图像处理的方式分析出等高线轨迹,采用该方式得到的等高线位置稳定,宽度可控。
进一步地,在一种实施方式中,还可以根据等高线进行三维的模型生成。具体而言,使用平铺样条模型的方法,来生成等高线模型。模型(mesh)是一个计算机图形学概念,在计算机中渲染三维场景时,单个渲染实体的数据集合,包括位置、颜色等。
具体而言,即可以针对任一等高线,根据该等高线的映高度值确定出真实高度值,进而确定所述等高线所对应的填充模型,把填充模型(通常是长条柱子形状)沿着等高线进行等距离的平铺,每沿着等高线一个固定距离(这个距离通常就是模型长度),即在对应位置放置一个填充模型,最后所有模型拼接在一起,即可获得完全符合等高线的三维等高线模型。由于等高线的宽度在之前已经进行了设定,而平铺模型时又是完全沿等高线进行平铺的,因此,不会出现在常规问题中所出现的等高线宽度不可控,进而导致平坦区域出现色块的问题。同时,由于填充模型的颜色、质感也是可以根据需求进行设置的,因此对于绘制出来的等高线模型的美术效果,可以灵活定制。如图5所示,图5为本说明书实施例所提供的等高线模型的示意图。
在一种实施方式中,由于边缘像素点太多,这样在连接边缘像素点生成等高线时,将会带来较大的计算量。因此,还可以对于边缘像素点进行抽取,得到若干顶点。
具体而言,等高线是基于边缘像素点构成的,根据边缘像素点的坐标会按照不同的曲线进行分组。等高线在计算机内的表述方式最后是类似:“第1条等高线,1000个点,第1个点在(0,0)位置、第二个点在(0.1,0.1)位置、...第1000个点在(-0.1,-0.1),把这1000个点相连的结果即是第一条等高线;第2条等高线...”这样的形式。
因此,可以对应的进行等距离的抽取,例如,针对第1条等高线,最后得到:第1条等高线,10个点,第1个点在(0,0)位置、…第10个点在(-0.1,-0.1),把这10个点相连的结果即是第一条等高线。具体的连接方式可以根据检测到的多个顶点进行曲线拟合,如图6所示,图6为本说明书实施例所提供的基于顶点进行曲线拟合生成等高线的示意图。在该示意图中,顶点坐标中的前两个数值为横坐标和纵坐标,第三个数值为映射高度值,同一等高线中的各顶点具有相同的映射高度值。在该示意图中,完整的等高线未示出。在这种实施方式下,通过等距离抽取并拟合等高线可以降低连接像素点时的计算量,提高效率。
对应的,本说明书实施例还提供一种等高线生成装置,如图7所示,图7是本说明书实施例提供的一种等高线生成装置的结构示意图,包括:
获取模块701,获取多个像素点的数据,其中,像素点的数据包括像素点的位置和真实高度;
确定模块703,对像素点的真实高度进行离散映射,确定像素点的映射高度值;
生成模块705,根据像素点的位置和映射高度值,生成包含多个区域的可视化图片,其中,每个区域中像素点的映射高度值相同;
检测模块707,针对所述可视化图片,检测可视化图片中所包含的各区域的边缘轮廓,确定各区域所对应的等高线,其中,所述区域所对应的等高线的高度值对应所述区域中像素点的映射高度值。
进一步地,所述确定模块703,对像素点的真实高度进行归一化,得到真实高度的归一化值;对所述归一化值进行离散映射,确定像素点的映射高度值。
进一步地,所述确定模块703,对所述归一化值进行等区间的离散映射,确定所述归一化值所属的数值区间;将所述归一化值所属的数值区间的区间下限值确定为所述像素点的映射高度值。
进一步地,所述检测模块707,针对该区域中的任一像素点,确定该像素点的相邻像素点的映射高度值;若存在任一相邻像素点的映射高度值与该像素点的映射高度值不相同,将该像素点确认为边缘像素点;连接检测到的映射高度值相同的边缘像素点,将生成的连接曲线作为所述区域所对应的等高线。
进一步地,所述装置还包括模型填充模块709,针对任一等高线,根据该等高线的高度值,确定所述等高线所对应的填充模型;采用所述填充模型沿所述等高线进行平铺,拼接生成可视化的等高线模型。
进一步地,所述检测模块707,针对任一检测得到的边缘像素点进行等距离抽取,得到多个近似顶点;对抽取得到的近似顶点进行曲线拟合,生成对应于的近似等高线,其中,所述近似等高线的高度值与边缘像素点的高度值相同。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图1所示的等高线生成方法。
图8示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作***和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图1所示的等高线生成方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的***、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。