一种山体边界自动提取方法与流程

文档序号:11919343阅读:1178来源:国知局
一种山体边界自动提取方法与流程

本发明涉及地理信息技术领域,具体涉及一种山体边界自动提取方法。



背景技术:

目前,在已存的地形模型中,通常采用规则采样点、三角面片、等高线等形式来表达山体,而避免直接表达山体对象。实际上,地形中存在山峰与河谷等现象,也能明确其位置和形态,可见地形中存在对象。在地貌学中,山体作为一种重要的地形对象,其构建主要有以下必要性:(1)为地貌学中地貌特征及水文学中水文特征的分析提供服务;(2)在地质灾害方面,能够在山体重构时做出迅速地改变和调整;(3)山体的对象模型,可以为地形多尺度综合提供特征数据。

传统的山体边界自动提取方法主要思路为:(1)数据预处理:将原始DEM利用差值运算进行地形倒置,形成反地形DEM,再对反地形DEM进行填洼,获取无洼地的DEM;(2)水流方向提取:对反地形无洼地的DEM进行流向分析;(3)流域分析:基于流向数据,对其进行流域分析以实现盆地边界的提取,最后经栅矢转换得到矢量流域边界,初步获取山体边界。

由于山地地形的复杂性及多尺度问题,导致上述方法在实施时,提取的山体边界较为破碎,与地理视角下的山体边界不一致,难以满足地理研究需要,需进一步手工处理,投入大,效率低。因此,对破碎的山体边界基于规则约束进行关联,最终形成地理尺度的山体对象极为关键。



技术实现要素:

发明目的:本发明的目的在于针对现有技术的问题,基于地形特征线作为地形的骨架线来控制地形的起伏变化,提出了一种山体边界自动提取方法,通过相对破碎的山体边界面数据,以地形特征线作为约束条件,关联符合条件的面,基本实现了地理尺度山体边界的自动提取。

技术方案:本发明提供了一种山体边界自动提取方法,包括以下步骤:

(1)获取山体边界面、山脊线和山谷线数据;

(2)基于山脊线数据,关联山脊线经过的面,初次形成山体边界;

(3)查找与山体边界具有邻接关系的面,并以山谷线为约束,关联符合条件的面;

(4)将规则约束条件外的面进行关联,最终形成地理尺度的山体边界。

进一步,步骤(1)通过加载DEM数据,运用ArcGIS并基于地形表面水文分析原理获取矢量的图层数据,针对相对破碎的山体边界面图层,运用ArcGIS中的消除工具,以字段Area阈值,消除小于该阈值的图斑,不断调整阈值的大小,经多次消除,得到山体边界面要素图层。

进一步,步骤(2)包括:

(2-1)加载山体边界面要素图层、山脊线线要素图层和山谷线线要素图层,分别得到山体边界面要素集合Mount={mti|i=1,2,…,m}、山脊线线要素集合RidgeL={rli|i=1,2,…,n}和山谷线线要素集合ValleyL={vli|i=1,2,…,r};

其中,mti表示第i个面要素,m为面要素的个数;rli表示第i个山脊线线要素,n为山脊线线要素的个数;vli表示第i个山谷线线要素,r为山谷线线要素的个数;

(2-2)遵循山脊线线要素个数n决定地理尺度的山体边界面要素个数的原则,对集合Mount中的每一个面要素mti按以下步骤进行属性添加与赋值:

①给面要素mti添加属性Id,Id表示山脊线编号,初始化为-1;

②读取集合RidgeL中的线要素rli包含的点要素集合RLPt={rpj|j=1,2,…,a},rpj表示线要素rli上第j个点要素,a为点要素的个数;

③判断集合RLPt中的点rpj是否在面要素mti内,当存在任一点符合条件时,修改mti的编号属性Id为rli的下标i;

④循环执行步骤②-③,直至集合RidgeL中的线要素遍历完毕;

(2-3)根据编号属性Id的不同,对面要素mti分组:遍历集合Mount中的每一个面要素mti,当mti的Id等于-1时,将mti加入面要素集合NoUnionM;当Id等于1时,将mti加入面要素集合UnionS1,当Id等于2时,将mti加入面要素集合UnionS2,……,当Id等于n时,将mti加入面要素集合UnionSp;遍历完毕,得到集合NoUnionM={nmi|i=1,2,…,q}和以集合为元素的集合SET={UnionS1,UnionS2,…,UnionSp};

其中,nmi表示不符合关联条件的面要素,q为面要素的个数,UnionSp表示具有相同Id的面要素集合,p为面要素集合的个数;

(2-4)面要素关联:对SET中的每一个面要素集合UnionSp,进行面要素合并,形成新的面要素,得到关联后的面要素集合UnionM={umi|i=1,2,…,g},umi表示关联后的面要素,g为面要素的个数。

进一步,步骤(3)包括:

(3-1)给集合NoUnionM中的一面要素nmi添加属性Fid、LineC和Dir;

其中,Fid表示山谷线编号,初始化为-1,LineC表示判断nmi相对山谷线位置的有向线段,Dir表示nmi在有向线段的左右侧,Dir取值为“left”或“right”;

(3-2)读取集合ValleyL中的一线要素vli包含的点要素集合VLPt={vpj|j=1,2,…,b},vpj表示线要素vli上第j个点要素,b为点要素的个数;

(3-3)循环取集合VLPt中的相邻两点vpj和vpj+1,若有向线段与面要素nmi相交,将加入有向线段集合LineSeg,得到集合

其中,表示第k个有向线段,sp为有向线段的首点,ep为有向线段的尾点,c为有向线段的个数;

(3-4)对集合LineSeg的要素个数c进行以下判断:

若c等于0,则执行步骤(3-2)-(3-3),继续计算有向线段;

若c等于1,修改nmi的属性,Fid为vli的下标i,属性LineC等于有向线段属性Dir的值按步骤(3-5)计算;

若c大于1,修改nmi的属性,Fid为vli的下标i,属性LineC等于集合LineSeg中有向线段的首点sp和有向线段的尾点ep组成的有向线段属性Dir的值按步骤(3-5)计算;

(3-5)计算属性Dir的值:

读取面要素nmi包含的点要素集合NUnionPt={npj|j=1,2,…,d},npj表示面要素nmi上第j个点要素,d为点要素的个数;

循环取集合NUnionPt中的点npj,采用判断点在直线左右侧的方法,根据公式(1)计算有向线段的首尾点与点npj的面积量S(sp,ep,npj);

S(P1,P2,P3)=(x1-x3)×(y2-y3)-(y1-y3)×(x2-x3) (1)

若S大于0,将点npj加入点要素集合LeftPt;反之,将点npj加入点要素集合RightPt;

设集合LeftPt、RightPt的点要素个数分别是e、f,若e小于3或f小于3,则根据公式(2)计算Dir的值;若e、f均不小于3,则根据公式(3)计算Dir的值;

其中,Se、Sf分别表示集合LeftPt、RightPt中的点所构成面的面积;

(3-6)循环执行步骤(3-1)-(3-5),直至集合NoUnionM中的所有面要素完成属性的添加与赋值;

(3-7)基于规则约束条件,对经属性赋值后的面要素集合NoUnionM按以下步骤递归:

1)读取集合UnionM中的一面要素umi,将其加入面要素集合TmpPoly;

2)遍历集合NoUnionM,若存在面要素nmi与umi是邻接关系,按以下步骤计算几个约束参数,否则,跳转步骤1):

a)读取nmi的编号属性Fid,若Fid等于-1,则不计算d)、e);

b)统计nmi与集合UnionM中的面要素具有邻接关系的总面要素数count,若count等于1,不计算c),若Fid不等于-1且count不等于1,不计算e);

c)比较nmi与集合UnionM中的面要素具有邻接关系的所有面要素,找到存在最大公共边界的面要素um';

d)读取nmi的属性值Dir,采用nmi的属性值LineC,计算umi的属性值Dir';

e)计算nmi与umi的公共边界长度占nmi周长的比例scale;

3)判断约束参数若符合以下四个约束条件之一,则执行操作:将nmi加入集合TmpPoly,并从集合NoUnionM中移除nmi

条件1:Fid等于-1且count大于1且um'等于umi

条件2:Fid等于-1且count等于1;

条件3:Fid不等于-1且count大于1且um'等于umi且Dir'等于Dir;

条件4:Fid不等于-1且count等于1且scale不小于0.5且Dir'等于Dir;

4)面要素关联:若集合TmpPoly的面要素个数大于1,则对其进行面要素的合并,形成新的面要素,并替换原来的面要素umi,置空TmpPoly;

5)循环执行步骤1)-4),直至集合UnionM中的面要素umi遍历完毕。

进一步,步骤(4)包括:

(4-1)循环计算出集合NoUnionM中的面要素nmi与集合UnionM中具有最大公共边界的面要素umi,记录umi的下标,得到下标集合Index={ink|k=1,2,…,w},w为集合NoUnionM中面要素的个数;

(4-2)按以下步骤进行面要素关联:

Ⅰ、读取集合UnionM中的面要素umi,将其加入面要素集合TmpFS;

Ⅱ、遍历下标集合Index,若umi的下标i等于ink,则将nmk加入集合TmpFS;

Ⅲ、将集合TmpFS中的面要素进行合并,形成新的面要素,将其加入面要素集合UnionM',TmpFS置空;

Ⅳ、循环执行步骤Ⅰ-Ⅲ,得到关联后的面要素集合UnionM'={um'i|i=1,2,…,h},um'i表示第i个山体边界面要素,h为面要素的个数,将集合UnionM'写入面要素图层。

有益效果:本发明基于山体边界面数据,以地形特征线作为约束条件,关联符合条件的面,实现了地理尺度山体边界的自动提取,提取后的山体较为完整,尺度相对合理,可直接满足地理研究的需要,因此可成为构建山体对象的基础,并为地貌学和人文学的特征分析、地质灾害后的山体重构以及地形多尺度综合提供了有效支持。

附图说明

图1为本发明方法的流程图

图2为DEM与相对破碎的山体边界面图层示意图;

图3为DEM与山脊线线图层示意图;

图4为DEM与山谷线线图层示意图;

图5为经消除处理后的山体边界面图层示意图;

图6为实施例步骤(2)中未关联面要素和关联后的面要素图层示意图;

图7为实施例步骤(3-7)中满足四种约束条件的情况示意图,其中(a)为条件2,(b)为条件1,(c)为条件3,(d)为条件4);

图8为实施例步骤(3-7)递归过程中未关联面要素和关联后的面要素图层示意图,其中(a)-(f)分别为6次递归结果;

图9为实施例步骤(4)中关联后的山体边界面要素图层示意图;

图10为地理尺度的山体边界面要素图层与山体阴影叠加示意图。

具体实施方式

下面对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。

实施例:一种山体边界自动提取方法,如图1所示,具体操作如下:

步骤(1)具体包括:

(1-1)加载DEM数据,借助ArcGIS软件,基于地形表面水文分析原理,获取矢量的山体边界面图层(图2)、山脊线线图层(图3)和山谷线线图层数据(图4);

(1-2)针对相对破碎的山体边界面图层,运用ArcGIS中的消除工具,以面积字段Area阈值,消除小于100m2的图斑,调整阈值的大小,经7次消除,最终消除面积小于3万m2的图斑,得到山体边界面要素图层(图5)。

步骤(2)具体包括:

(2-1)加载山体边界面要素图层、山脊线线要素图层和山谷线线要素图层,得到山体边界面要素集合Mount={mti|i=1,2,…,437}、山脊线线要素集合RidgeL={rli|i=1,2,...,8}和山谷线线要素集合ValleyL={vli|i=1,2,…,7};

(2-2)遵循山脊线线要素个数决定地理尺度的山体边界面要素个数(即为8)的原则,对集合Mount中的每一个面要素mti按以下步骤进行属性添加与赋值:

①给面要素mt1添加属性Id,初始化为-1;

②读取集合RidgeL中的线要素rl1包含的点要素集合RLPt={rpj|j=1,2,…,924};

③遍历集合RLPt,mt1不包含线要素rl1上的点,编号属性Id不变;

④循环执行步骤②-③,直至集合RidgeL中的线要素遍历完毕;

(2-3)根据编号属性Id的不同,对面要素mti分组:遍历集合Mount中的每一个面要素mti,mt1的Id等于-1,将mt1加入集合NoUnionM,mt3的Id等于1,将mt3加入集合UnionS1,……,mt435的Id等于8,将mt435加入集合UnionS8……遍历完毕,得到集合NoUnionM={nmi|i=1,2,…,269}(图6灰色面要素)和以集合为元素的集合SET={UnionS1,UnionS2,…,UnionS8};

(2-4)面要素关联:对SET中的每一个面要素集合(UnionS1-UnionS8),进行面要素合并,形成新的面要素,得到关联后的面要素集合UnionM={umi|i=1,2,…,8}(图6未填充面要素)。

步骤(3)具体包括:

(3-1)给集合NoUnionM中的一面要素nm83添加属性Fid、LineC和Dir;

(3-2)读取集合ValleyL中的一线要素vl4包含的点要素集合VLPt={vpj|j=1,2,…,859};

(3-3)循环取集合VLPt中的相邻两点,找到vp760和vp761使有向线段与面要素nm83相交,将加入有向线段集合LineSeg中,遍历完毕,得到集合共35个有向线段;

(3-4)对集合LineSeg的要素个数35进行判断:35大于1,修改nm83的属性Fid为vl4的下标4,属性LineC等于集合LineSeg中第一个有向线段的首点vp760和最后一个有向线段的尾点vp859组成的有向线段属性Dir的值按步骤(3-5)计算;

(3-5)计算属性Dir的值:

读取面要素nm83包含的点要素集合NUnionPt={npj|j=1,2,…,217};

循环取集合NUnionPt中的点np1,根据公式(1)计算有向线段的首点vp760、尾点vp859与点np1这三点的面积量S(vp760,vp859,np1)=595212.70;S大于0,将点np1加入点要素集合LeftPt,遍历完毕,得到集合LeftPt={np1,np2,…,np217}和集合RightPt={np78,np79,…,np143},,点要素个数分别是162、54;

集合LeftPt、RightPt的点要素个数均大于3,则根据公式(3)计算Se=535959.49、Sf=21218.17,Se>Sf,故Dir的值为“left”;

(3-6)循环执行步骤(3-1)-(3-5),直至集合NoUnionM中的所有面要素完成属性的添加与赋值;

(3-7)基于规则约束条件,对经属性赋值后的面要素集合NoUnionM按以下步骤递归(图8(a)-(f)):

1)读取集合UnionM中的一面要素um1,将其加入面要素集合TmpPoly;

2)遍历集合NoUnionM,存在面要素nm2与um1是邻接关系,按以下步骤计算2个约束参数:

a)读取nm2的编号属性Fid等于-1;

b)统计nm2与集合UnionM中的面要素具有邻接关系的总面要素数count等于1;

3)约束参数符合条件2(图7(a)),则将nm2加入集合TmpPoly,并从集合NoUnionM中移除nm2

继续取集合NoUnionM中的面要素,分别列举符合条件1、3和4的情况:

①存在面要素nm108与um1是邻接关系,计算3个约束参数:

a)读取nm108的编号属性Fid等于-1;

b)统计nm108与集合UnionM中的面要素具有邻接关系的总面要素数count等于2;

c)比较nm108与集合UnionM中的面要素具有邻接关系的2个面要素um1、um4,找到存在最大公共边界的面要素um1

判断约束参数符合条件1的情况(图7(b));

②存在面要素nm105与um1是邻接关系,计算5个约束参数:

a)读取nm105的编号属性Fid等于4;

b)统计nm105与集合UnionM中的面要素具有邻接关系的总面要素数count等于2;

c)比较nm105与集合UnionM中的面要素具有邻接关系的2个面要素um1、um5,找到存在最大公共边界的面要素um1

d)读取nm105的属性值Dir为“left”,采用nm105的属性值LineC,计算um1的属性值Dir'为“left”;

判断约束参数符合条件3的情况(图7(c));

③存在面要素nm106与um1是邻接关系,计算5个约束参数:

a)读取nm106的编号属性Fid等于1;

b)统计nm106与集合UnionM中的面要素具有邻接关系的总面要素count等于1;

c)读取nm106的属性值Dir为“right”,采用nm106的属性值LineC,计算nm106的属性值Dir'为“right”;

d)计算nm106与um1的公共边界长度占nm106周长的比例scale等于0.59;

判断约束参数符合条件4的情况(图7(d));

4)面要素关联:集合TmpPoly的面要素个数为36,对其进行面要素的合并,形成新的面要素,并替换原来的面要素um1,置空TmpPoly;

5)循环执行步骤1)-4),直至集合UnionM中的面要素umi遍历完毕。

步骤(4)具体包括:

(4-1)循环计算出集合NoUnionM中的面要素nm1与集合UnionM中具有最大公共边界的面要素um5,记录um5的下标5,遍历完毕,得到下标集合Index={5,1,…,7},共7个下标;

(4-2)按以下步骤进行面要素关联:

Ⅰ、读取集合UnionM中的面要素um1,将其加入面要素集合TmpFS;

Ⅱ、遍历下标集合Index,um1的下标1等于in2,则将nm2加入集合TmpFS;

Ⅲ、将集合TmpFS中的面要素进行合并,形成新的面要素,将其加入面要素集合UnionM',TmpFS置空;

Ⅳ、循环执行步骤Ⅰ-Ⅲ,得到关联后的面要素集合UnionM'={um'i|i=1,2,…,8},将集合UnionM'写入面要素图层(图9)。

将以上实施例最终得到的地理尺度的山体边界面要素图层,与相应的山体阴影图进行叠加(图10)发现:山体边界基本符合地形情况,效果良好。

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