洪水淹没范围的确定方法及装置
技术领域
本发明涉及洪水淹没范围提取技术领域,特别涉及一种洪水淹没范围的确定方法及装置。
背景技术
在洪水淹没范围提取中,根据是否考虑连通性,可以分为有源淹没范围提取和无源淹没范围提取。无源淹没范围提取不考虑连通性,有源淹没范围提取考虑了连通性,连通性是指淹没点与洪水源头是否可以连通。
无源淹没范围提取方法只考虑降水作为洪水源,适用于整个区域内的降水均匀,且没有发生大范围的水体流动的地形地势,所以不考虑洪水随地形地势的变化而互相流动的因素,即不考虑连通性,在实际应用中,由于地形地势的复杂性和洪水淹没的不确定性,使得无源淹没范围提取方法难以满足实际应用需求。
有源淹没范围提取的情况比较复杂,要在高程因素的基础上,考虑淹没区域内部的连通性。在有源淹没范围提取时,一般基于种子蔓延算法,赋予待分析区域种子点一定的属性,然后在待分析区域内按照八邻域或者四邻域的方向进行扩散,找到周围满足条件的点的集合,这些点的集合所组成的连续平面,得到有源淹没范围。在通过种子蔓延算法进行连通性的判断时,必须遍历待分析区域中每个种子点的四邻域或八邻域网格,进行计算和连通性判断,而待分析区域中大部分种子点并不是实际淹没点,造成了大量的不必要的计算和连通性判断,由于种子蔓延算法是一种递归算法,需要通过递归条件不断调用函数,在堆栈和判断操作重复较多时,容易造成堆栈溢出,程序报错的现象,使得计算效率较低。
针对上述问题,目前尚未提出有效解决方案。
发明内容
本发明实施例提供一种洪水淹没范围的确定方法,用以提高洪水淹没范围提取的效率,该方法包括:
基于预设的洪水水位值,在待分析区域的地形网格内确定多个可能淹没的网格点;
根据多个可能淹没的网格点,基于种子蔓延算法,确定多个实际淹没网格点,其中,多个实际淹没网格点之间相互连接;
将多个实际淹没网格点连接而成的区域确定为洪水淹没范围。
本发明实施例提供一种洪水淹没范围的确定装置,用以提高洪水淹没范围提取的效率,该装置包括:
待淹没点确定模块,用于基于预设的洪水水位值,在待分析区域的地形网格内确定多个可能淹没的网格点;
实际淹没点确定模块,用于根据多个可能淹没的网格点,基于种子蔓延算法,确定多个实际淹没网格点,其中,多个实际淹没网格点之间相互连接;
洪水淹没范围确定模块,用于将多个实际淹没网格点连接而成的区域确定为洪水淹没范围。
本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述洪水淹没范围的确定方法。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有执行上述洪水淹没范围的确定方法的计算机程序。
本发明实施例通过:基于预设的洪水水位值,在待分析区域的地形网格内确定多个可能淹没的网格点;根据多个可能淹没的网格点,基于种子蔓延算法,确定多个实际淹没网格点;将多个实际淹没网格点连接而成的区域确定为洪水淹没范围。本发明在多个可能淹没的网格点的基础上基于种子蔓延算法确定洪水淹没范围,减少了不必要的计算和连通性判断,减轻了种子蔓延算法的递归深度和迭代次数,提高了计算效率,进而提高了洪水淹没范围的提取效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中洪水淹没范围的确定方法流程的示意图;
图2为本发明实施例中多个可能淹没的网格点的示意图;
图3为本发明实施例中基于种子点搜索实际淹没网格点的示意图;
图4为本发明实施例中多个实际淹没网格点的示意图;
图5为本发明实施例中洪水淹没范围的确定方法具体实施例示意图;
图6为本发明实施例中待分析区域的DEM数据图;
图7为本发明实施例中提取到的洪水淹没范围的示意图;
图8为本发明实施例中提取到的洪水淹没范围边界的示意图;
图9为本发明实施例中提取到的洪水淹没范围网格灰度的示意图;
图10为本发明实施例洪水淹没范围的确定装置结构的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在介绍本发明实施例之前,首先介绍发明人发现技术问题,提出洪水淹没范围的确定方法的思路。
在洪水淹没范围提取中,根据是否考虑连通性,可以分为有源淹没范围提取和无源淹没范围提取。无源淹没范围提取不考虑连通性,有源淹没范围提取考虑了连通性。连通性是指淹没点与洪水源头是否可以连通,不仅需要对种子点本身高程水位进行判断,还需要考虑种子点与相邻点之间高程水位的关系。
无源淹没范围提取时,利用洗澡盆方法建立无源淹没范围提取模型应用较为广泛,由满足公式(1)的DEM网格覆盖区域组成:即在给定水位的条件下,利用DEM栅格格网数据的特点,遍历完DEM数据的所有栅格单元,找出栅格内的高程低于给定水位值的所有地形格网,完成后,统计所得到的淹没格网集合即构成分析区域内无源淹没的淹没范围。
Flood Extent={grid:Zgrid<Zflood level,grid∈Q} (1)
式中,grid为DEM网格,Zgrid为DEM网格的高程值,Zflood level为给定的洪水水位值,Q为DEM网格集合。
无源淹没范围提取的实现较简单,即利用洗澡盆方法遍历所有栅格单元,找出低于给定水位的栅格即可。但是,无源淹没范围提取方法并没有充分考虑到洪水淹没网格的连通性,在实际应用中,由于地形地势的复杂性和洪水淹没的不确定性,使得无源淹没范围提取方法难以满足实际应用需求。
有源淹没范围提取时,在高程因素的基础上,还要考虑淹没区域内部的连通性。比如环形山围成的洼地,无源淹没时,环形山内外的洼地都可能将被洪水淹没,而有源淹没时,若洪水水位小于山顶高程,水就可以被阻隔在环形山外,即使环形山内的地势再低,也只能在环形山外形成淹没区域。有源淹没范围提取方法由满足公式(2)的DEM网格覆盖区域组成:
Flood Extent={grid:Zgrid<Zflood level∧grid connect with point,grid∈Q,point∈P,P∈Q} (2)
式中,grid为DEM网格,Zgrid为DEM网格的高程值,Zflood level为给定的洪水水位值,point为被洪水淹没的种子网格,Q为DEM网格集合,P为从DEM中已知的淹没种子网格集合。
种子蔓延算法是一种基于种子属性和区域空间特征的探测算法,其核心思想是赋予种子点一定的属性,然后在区域内按照八邻域或者四邻域的方向进行扩散到区域边界,找到周围满足条件的点的集合,这些点的集合所组成的连续平面,即为所求的有源淹没范围。在建立算法模型时,首先是需要建立初始种子选择条件,确定算法计算的起点,再由种子蔓延算法进行迭代判断,由于该算法是收敛的,所以需要建立算法的闭合条件,该条件一般为扩散探测的边界。
现有的基于种子蔓延算法的有源淹没范围提取方法包括:采用“跳步探测”的方式,通过增加种子点探测步距,建立基于DEM的有源淹没范围提取模型,其中,种子蔓延算法及空间叠加运算速度决定了整个模型的效率;预先划定大致的淹没范围,通过缩小研究区域来提高计算效率;基于堆栈节点遍历的算法进行有源淹没范围的提取,在一定程度上提高了淹没范围提取的计算效率,然而模型在处理较大数据量时稳定性不足;在建立模型时对种子蔓延算法做一定的改进,可以对小范围DEM数据实现快捷简单计算,但对较大范围的DEM数据,模型计算效率明显下降;通过利用DEM数据分块压缩追踪的方法,来弥补种子蔓延算法因为数据量太大容易堆栈溢出的缺点,并建立了洪水风险评估模型。
发明人经过大量的研究发现,现有的有源淹没范围提取方法在通过种子蔓延算法进行连通性的判断时,必须遍历待分析区域中每个种子点的四邻域或八邻域网格,进行计算和连通性判断,而待分析区域中大部分种子点并不是实际淹没点,造成了大量的不必要的计算和连通性判断,使得计算效率较低。发明人发现了以上技术问题,提出一种洪水淹没范围的确定方法,该方法主要包括:首先基于无源淹没范围提取方法,确定多个可能淹没的网格点,然后在多个可能淹没的网格点的基础上基于种子蔓延算确定洪水淹没范围,下面对本发明实施例提供的洪水淹没范围的确定方法进行详细介绍。
本发明实施例提供一种洪水淹没范围的确定方法,用以提高洪水淹没范围提取的效率,图1为本发明实施例中洪水淹没范围的确定方法流程的示意图,如图1所示,该方法包括:
步骤101:基于预设的洪水水位值,在待分析区域的地形网格内确定多个可能淹没的网格点;
步骤102:根据多个可能淹没的网格点,基于种子蔓延算法,确定多个实际淹没网格点,其中,多个实际淹没网格点之间相互连接;
步骤103:将多个实际淹没网格点连接而成的区域确定为洪水淹没范围。
如图1所示,本发明实施例通过:基于预设的洪水水位值,在待分析区域的地形网格内确定多个可能淹没的网格点;根据多个可能淹没的网格点,基于种子蔓延算法,确定多个实际淹没网格点;将多个实际淹没网格点连接而成的区域确定为洪水淹没范围。本发明在多个可能淹没的网格点的基础上基于种子蔓延算法确定洪水淹没范围,减少了不必要的计算和连通性判断,减轻了种子蔓延算法的递归深度和迭代次数,提高了计算效率,进而提高了洪水淹没范围的提取效率。
在一个实施例中,步骤101中,基于预设的洪水水位值,在待分析区域的地形网格内确定多个可能淹没的网格点,可以包括:
步骤1011:将地形网格内各个网格点的高程值分别与预设的洪水水位值进行比较;
步骤1012:将高程值小于或等于预设的洪水水位值的网格点确定为可能淹没的网格点。
具体实施时,图2为本发明实施例中多个可能淹没的网格点的示意图,如图2所示,步骤101可以是本发明实施例中的第一次遍历,第一次遍历是在待分析区域内的所有地形格网范围内进行,因为不管是有源淹没范围提取还是无源淹没范围提取,洪水淹没范围内的高程点都是小于给定洪水水位值的。所以可以首先将地形网格内各个网格点的高程值分别与预设的洪水水位值进行比较,找出所有高程值小于洪水水位值的格网点,并标记为可能淹没的网格点,如图2中灰色的网格点所示。可以理解的是,第一次遍历时只是搜索可能淹没的网格点,不需要计算可能淹没的网格点之间的连通性,即相当于一次无源淹没范围提取,不需调用函数,占用系统资源少,避免了因数据量太大而造成递归深度太深,堆栈溢出的现象。
在一个实施例中,步骤102中,根据多个可能淹没的网格点,基于种子蔓延算法,确定多个实际淹没网格点,可以包括:
初始化堆栈,将多个可能淹没的网格点进行标记;
循环执行如下操作直至堆栈为空且不存在已标记的可能淹没的网格点为止,确定多个实际淹没网格点:
在多个已标记的可能淹没的网格点中选择一个网格点作为种子点压入堆栈;
根据堆栈栈顶的网格点,搜索与该网格点相邻的八个网格点中是否存在可能淹没的网格点;
在与该网格点相邻的八个网格点中存在可能淹没的网格点时,确定该网格点为实际淹没网格点,将该网格点推出堆栈并取消标记;
将与该网格点相邻的八个网格点中存在的可能淹没的网格点压入堆栈。
在一个实施例中,步骤102还可以包括:
在与该网格点相邻的八个网格点中不存在可能淹没的网格点时,将该网格点推出堆栈并取消标记。
具体实施时,步骤102可以是本发明实施例中的第二次遍历,第二次遍历是从多个可能淹没的网格点中选择一个网格点作为种子点开始遍历,从种子点八邻域方向搜索可能淹没的网格点,即判断连通性,图3为本发明实施例中基于种子点搜索实际淹没网格点的示意图,如图3所示,如果种子点八邻域方向内存在可能淹没的网格点,表示当前种子点和可能淹没的网格点互有连通性,即为实际淹没点。
基于种子蔓延算法提取洪水淹没范围时,可以采用递归的方式实现:即在区域内一点已知的条件下通过一定规律或属性搜索像素点来填充整个区域。可以包括:在区域内选取一点作为种子点压入堆栈,在堆栈非空的条件下对出栈像素填色,之后按顺序判断该点周围的四邻域或八邻域内是否有需要填充而未被填充的点,若有,则将有需要填充而未被填充的点压入堆栈,然后从堆栈中获取栈顶元素继续搜索判断,直至堆栈为空。
表1为种子点二维栅格数据模型,如表1所示,i和j分别代表二维栅格数据的行号和列号,(i,j)表示了一个中心点为i行j列的二维栅格数据的抽象模型,假设种子点为(i,j),而其它的八个点(i-1,j-1)…(i+1,j+1)为八邻域方向的点,如果种子点八邻域方向内存在可能淹没的网格点时,即表示有连通性,该点为实际淹没网格点,如果种子点八邻域方向内不存在可能淹没的网格点时,即表示没有连通性,该点不是实际淹没网格点。
表1种子点二维栅格数据模型
i-1,j-1 |
i-1,j |
i-1,j+1 |
i,j-1 |
i,j |
i,j+1 |
i+1,j-1 |
i+1,j |
i+1,j+1 |
具体实施时,步骤103中,在通过种子蔓延法遍历完待分析区域内的所有可能淹没的网格点后,所得到的实际淹没网格点的集合即构成洪水淹没区,图4为本发明实施例中多个实际淹没网格点的示意图,如图4所示。可以理解的是,第二次遍历重点是多个可能淹没的网格点覆盖的区域,与现有的有源淹没范围提取方法相比,本发明实施例不需要判断待分析区域内所有网格点的八邻域内的网格点是否被淹没,只需从当前种子点开始判断八邻域方向内是否存在可能淹没的网格点,本发明实施例通过两次遍历由原来的递归计算转变为迭代运算,从而提升了算法的整体效率和稳定性。
下面举一个具体的例子,以便于理解本发明如何实施。
图6为本发明实施例中待分析区域的DEM数据图,如图6所示,DEM为数字高程模型,DEM数据图为162MB的栅格数据,图5为本发明实施例中洪水淹没范围的确定方法具体实施例示意图,如图5所示,包括如下步骤:
第一步:输入洪水水位值(flooddepth),洪水水位值可以是给定值,也可以是预测值,但需要在待分析区域的数据高程范围之内;
第二步:初始化堆栈;
第三步:第一次格网遍历,遍历完待分析区域所有的地形格网,找出高程值(elevation)小于洪水水位值(flooddepth)的所有格网点,将其称为可能淹没的网格点,并标记为可淹没(true);
第四步:选择种子点,在多个可能淹没的网格点之间选择一个种子点将其压入堆栈;
第五步:第二次格网遍历,首先基于种子蔓延法从种子点的八邻域方向开始搜索可能淹没的网格点,如果种子点八邻域内存在可能淹没的网格点,即表示有连通性,将该种子点确定为实际淹没网格点,并推出堆栈取消标记,根据淹没水深程度重新赋值,将与该种子点相邻的八个网格点中存在的可能淹没的网格点压入堆栈;如果种子点八邻域内不存在可能淹没的网格点,将该种子点推出堆栈并取消标记;接着,取出堆栈中的第一个网格点继续搜索,每次搜索之后将该网格点取消标记,以免重复运算,以此循环,直至堆栈为空且不存在已标记的可能淹没的网格点为止。
第六步:统计所得到的所有实际淹没网格点,将多个实际淹没网格点连接而成的区域确定为洪水淹没范围。
图7为本发明实施例中提取到的洪水淹没范围的示意图,图8为本发明实施例中提取到的洪水淹没范围边界的示意图,图9为本发明实施例中提取到的洪水淹没范围网格灰度的示意图,如图7、图8、图9所示,提取到的洪水淹没范围可以充分体现淹没点之间的连通性,能够直观的显示出淹没信息。本发明实施例提出的洪水淹没范围的确定方法稳定性强且计算效率比较高,且很少出现过堆栈溢出、系统奔溃的现象,可以适用于不同数据、不同条件下的洪水淹没范围的提取。
基于同一发明构思,本发明实施例中还提供了一种洪水淹没范围的确定装置,如下面的实施例。由于装置解决问题的原理与方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本发明实施例提供一种洪水淹没范围的确定装置,用以提高洪水淹没范围提取的效率,图10为本发明实施例洪水淹没范围的确定装置结构的示意图,如图10所示,该装置包括:
待淹没点确定模块01,用于基于预设的洪水水位值,在待分析区域的地形网格内确定多个可能淹没的网格点;
实际淹没点确定模块02,用于根据多个可能淹没的网格点,基于种子蔓延算法,确定多个实际淹没网格点,其中,多个实际淹没网格点之间相互连接;
洪水淹没范围确定模块03,用于将多个实际淹没网格点连接而成的区域确定为洪水淹没范围。
在一个实施例中,待淹没点确定模块01具体用于:
将地形网格内各个网格点的高程值分别与预设的洪水水位值进行比较;
将高程值小于或等于预设的洪水水位值的网格点确定为可能淹没的网格点。
在一个实施例中,实际淹没点确定模块02具体用于:
初始化堆栈,将多个可能淹没的网格点进行标记;
循环执行如下操作直至堆栈为空且不存在已标记的可能淹没的网格点为止,确定多个实际淹没网格点:
在多个已标记的可能淹没的网格点中选择一个网格点作为种子点压入堆栈;
根据堆栈栈顶的网格点,搜索与该网格点相邻的八个网格点中是否存在可能淹没的网格点;
在与该网格点相邻的八个网格点中存在可能淹没的网格点时,确定该网格点为实际淹没网格点,将该网格点推出堆栈并取消标记;
将与该网格点相邻的八个网格点中存在的可能淹没的网格点压入堆栈。
在一个实施例中,实际淹没点确定模块02进一步用于:
在与该网格点相邻的八个网格点中不存在可能淹没的网格点时,将该网格点推出堆栈并取消标记。
本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述洪水淹没范围的确定方法。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有执行上述洪水淹没范围的确定方法的计算机程序。
综上所述,本发明实施例通过:基于预设的洪水水位值,在待分析区域的地形网格内确定多个可能淹没的网格点;根据多个可能淹没的网格点,基于种子蔓延算法,确定多个实际淹没网格点;将多个实际淹没网格点连接而成的区域确定为洪水淹没范围。本发明在多个可能淹没的网格点的基础上基于种子蔓延算法确定洪水淹没范围,减少了不必要的计算和连通性判断,减轻了种子蔓延算法的递归深度和迭代次数,提高了计算效率,进而提高了洪水淹没范围的提取效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。