2022年数学形态学和模式识别在建筑物多边形化简中的应用

上传人:re****.1 文档编号:567316935 上传时间:2024-07-19 格式:PDF 页数:21 大小:568.27KB
返回 下载 相关 举报
2022年数学形态学和模式识别在建筑物多边形化简中的应用_第1页
第1页 / 共21页
2022年数学形态学和模式识别在建筑物多边形化简中的应用_第2页
第2页 / 共21页
2022年数学形态学和模式识别在建筑物多边形化简中的应用_第3页
第3页 / 共21页
2022年数学形态学和模式识别在建筑物多边形化简中的应用_第4页
第4页 / 共21页
2022年数学形态学和模式识别在建筑物多边形化简中的应用_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《2022年数学形态学和模式识别在建筑物多边形化简中的应用》由会员分享,可在线阅读,更多相关《2022年数学形态学和模式识别在建筑物多边形化简中的应用(21页珍藏版)》请在金锄头文库上搜索。

1、基于数学形态学和模式识别的建筑物多边形化简算法研究文档Version 1.0 文档名称: ZD-研究文档 -Title-Vx.x.doc 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 21 页修订历史记录日期版本号修改说明修改人核准人2005/11/16 1.0 首次撰写精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 21 页目录1引言 . 41.1目的与范围. 41.2预期的读者. 41.3方法学 . 41.4定义、缩写词. 41.5参考资料 . 52研究内容 . 52.1子

2、研究内容分解 . 错误!未定义书签。3附录 . 21精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 21 页研究文档1 引言1.1 目的与范围本文档介绍了在数学形态学和神经网络支持下的模式识别的化简方法来实施多边形的自动综合。本文档作为该算法实现的理论依据和设计基础。文档中包含该算法及其主要子函数的流程图以及伪代码。1.2 预期的读者本文档预期的读者是本项目的设计人员、开发人员、测试人员、项目经理。1.3 方法学本设计所使用的主要方法是数学形态学的击中变换,基于混合遗传BP 神经网络的模式识别。1.4 定义、缩写词数学形态学:以形态为基

3、础对图像进行分析的数学工具。其基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的,是非线性变换。击中运算:一种数学形态学算子,用来寻找局部模式(局部指结构单元尺寸) 。它是一种模版匹配的变形,可对物体进行粗化或细化。结构元素 T 对图像 X 的击中变换为:BP(反向传播学习)神经网络算法的基本思想:ANN( 人工神经网络 )是对人类大脑的一种物理结构上的模拟,即以计算机仿真的方法,从物理结构上模拟人脑,以使系统具有人脑的某些智能。在众多的ANN 模型中,多层前馈神经网络模型是目前应用最为广泛的模型,反向传播学习算法(简称BP 算法)的基本思想为:根据网络

4、实际输出与期望输出的误差,从输出层开始,反过来调整网络的权值,最终使得输出的均方误差最小。遗传算法( GA) :遗传算法以生物进化过程为背景,模拟生物进化的步骤,将繁殖、杂精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 21 页交、变异、竞争和选择等概念引入到算法中,通过维持一组可行解,并通过对可行解的重新组合,改进可行解在多维空间内的移动轨迹或趋向,最终走向最优解。它克服了传统优化方法容易陷入局部极值的缺点,是一种全局优化算法。遗传算法的多层BP神经网络(GA-BP算法)基于遗传算法的人工神经网络的应用的基本原理是用遗传算法(GA)对

5、神经网络的连接权值进行优化学习,利用GA 的寻优能力来获取最佳权值。1.5 参考资料王辉连武芳. 数学形态学和模式识别在建筑物多边形化简中的应用. 测绘学报 . 2005 (3).269276 黄文骞 . 地图模式识别原理与方法M . 北京 :测绘出版社 ,2000 胡师彦 . 混合遗传 BP 算法在图像识别中的应用. 石家庄铁道学院学报 ,2002.15(3)孙即祥 . 现代模式识别 . 长沙 .国防科技大学出版设,2002 张 迁 刘政凯 . 基于数学形态学的地图自动配准方法. 小型微型计算机系统. 2003. 24(7)2 研究内容2.1 算法描述2.1.1 与地图比例尺相关的栅格数据与

6、矢量数据结合的数据模型街区边线的矢量数据栅格化过程:使用经典的 Bresenham 算法进行街区边线的栅格化;用种子填充算法得到建筑物多边形的栅格数据。注:栅格单元尺寸定为地图上的0.1mm栅格数据模型如下所示: typedef struct tagResident GridData double X,Y ;/ 图像的左下角坐标double m_dGridWidth ;/ 栅格宽度int m_iResident GridRow;/ 图像高int m_iResident GridColumn;/ 图像宽BYTE *m_pResident GridData;/ 栅格数据 GMS_Resident

7、GridData;/ 栅格数据结构用改进的 Freeman链码来表示街区的轮廓,其数据模型为:typedef struct tagCodeCell int m_iDirection ; / / 追踪方向int m_iLength ; / / 追踪长度 ( 像素数 ) int m_iPatternFlag ; / / 模式识别标志 GMS_CodeCell ; / / Freeman 链码单元精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 21 页typedef struct tagFreeman_ChainCode BOOL m_bFi

8、nishedSimplication; /化简标识CPoint m_Start Point; / 起点坐标CArray m_ChainCodeArray ; / 链码数据 GMS_Freeman_ChainCode ; /Freeman 链码2.1.2 对建筑物多边形进行矩形化变换矩形化变换:在给定的化简尺度上, 对建筑物多边形进行最大程度的化简, 即直接变为矩形。街区的复杂度决定了建筑物多边形能否被矩形化。街区的复杂度可以用最小表达尺度和最小外接矩形来评价。所谓最小表达尺度即图上0.3 mm。找出建筑物多边形最小外接矩形, 在其面积与建筑物多边形面积之差小于建筑物多边形面积的30%(实验值

9、) 的条件下 , 如果最小外接矩形的宽接近最小表达尺度, 或者建筑物多边形的多条长边在最小外接矩形的边上 , 则街区可直接化简成矩形。所谓“最小外接矩形”, 与平时提到的外接矩形不同( 如图 ) ,最小外接矩形是指建筑物多边形的外接矩形中面积最小的矩形, 在适当调整其中心位置和面积大小后可以作为建筑物多边形矩形化的化简结果。为了最好地表达建筑物多边形的位置、方向、形态和面积特征, 建筑物多边形矩形化时不能只是简单地用最小外接矩形替代表示, 还要对最小外接矩形的位置和面积作适当调整( 如图 )。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,

10、共 21 页2.1.3 对建筑物多边形进行直角化调整进行直角化调整( 实质是一种数据纠正) 既可突出建筑物多边形的直角化特征, 也利于后面的数学形态学化简和模式识别化简。计算建筑物多边形各边与X 轴正方向的夹角, 在可将各边在一定偏差范围内归为两个垂直方向的条件下, 只需使各边调整后的方向等于最小外接矩形的长轴方向或者 90, 即达到了直角化的目的; 而对于有几个分布轴向的多边形, 其直角化相对复杂, 需要对与每个轴向相关的边的方向分别调整。直角化需注意顶点坐标的精度控制, 为了不改变多边形的主要形态和方向特征, 需要有一个合理的评价尺度。以顶点的平移距不超过某一阈值作为标准, 而不用旋转角度

11、来评价, 可以保证长、短边的精度控制的一致性( 如图) 。直角化操作的原则是尽可能保持长边的方向和短边的长度不变。调整边的方向时, 采用了让边绕其中点旋转一个角度的办法,这样可保证多边形的面积不变。2.1.4 利用数学形态学方法对建筑物多边形进行初步化简数学形态学是一门建立在严格数学理论基础之上的学科, 是一种用于数字图像处理和识别的理论与方法。数学形态学的运算有容易控制、运算速度快的优点。由于栅格数据是与比例尺相关的,因此栅格单元的大小直接与最小表达尺度挂钩。设计合适的击中模板,可以通过击中运算来识别建筑物多边形轮廓的相关结构。受模板结构的限制, 数学形态学不能很好处理复杂的多边形轮廓化简,

12、 因而只将两种最常见的建筑物多边形轮廓上需要化简的简单结构用数学形态学进行处理 , 即轮廓上单个宽度小于最小表达尺度的凸起和凹陷部分。对于建筑物多边形轮廓上的小的弯曲, 如图 6所示 , 化简需要在舍去、保留和夸大表示之间做出合理的选择:如果弯曲的高度( 或深度 ) 和宽度都小于最小表达尺度, 则该弯曲可以舍去( 如图中弯曲 A) ;如果弯曲的高度( 或深度 ) 和宽度之中一项大于最小表达尺度, 另一项小于最小表达尺度, 则该弯曲需要夸大表示 , 将小于最小表达尺度的一项夸大到等于最小表达尺度( 如图中弯曲 B);如果弯曲的高度( 或深度 ) 和宽度都大于最小表达尺度, 则该弯曲应保留。注:通

13、过上面的直角化调整,建筑物多边形的直角化特征明显,其各边可分为互相垂直的两组。而栅格单元同样是在垂直和水平方向上分布的, 这就便于了模板选择。利用数学形态学进行建筑物多边形化简的步骤如下: 1. 建筑物多边形经过前面的矩形化和直角化操作后, 如果建筑物多边形的最小外接矩形的方向不是精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 21 页沿着水平和垂直方向, 则先进行坐标旋转变换使得建筑物多边形各边都尽可能沿水平或垂直方向, 然后栅格化 , 并用轮廓追踪的方法获取多边形轮廓的Freeman 链码。2. 利用如图所示的55结构模板对栅格数据

14、进行击中运算:模板一及其旋转90、 180和 270的四种情形, 可用来对轮廓上需要化简的窄的凸起结构的识别;模板二及其旋转90、 180和 270的四种情形, 可用来对轮廓上需要化简的窄的凹陷结构的识别。图:模板一(突起)模板二(凹陷)3. 对找到的凸起或凹陷部分对应的Freeman链码作进一步分析, 确定其为单个凸起或凹陷结构, 并根据结构的高度( 或深度 ) 对其采取舍去、保留或夸大的操作。对应的操作都针对栅格链码数据, 只需调整链码单元的追踪长度, 数据处理相对矢量运算来说简单高效。4. 对化简后的栅格链码数据进行分析, 如不存在需要化简的短边则进行矢量化,并进行坐标反向旋转变换得到原

15、坐标系下的坐标;如还存在需要化简的短边则留待后面使用模式识别方法化简。在如图 7的建筑物多边形化简中, 能识别出 A 、B、C、D、E 并分别进行处理;但F部分则无法识别与处理, 这种情形及更复杂的凸起和凹陷部分相邻连续的情形需要随后用模式识别的方法进行处理。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 21 页2.1.5 神经网络支持下的建筑物多边形模式识别化简由于轮廓的 Freeman 链码可看作是一种首尾相连的矢量序列, 这有利于将建筑物多边形轮廓在染色体文法基础上表示成基元串或子模式串, 然后通过句法翻译进行识别分类, 针对不

16、同模式选择合适的方法进行化简。由于栅格化时通过坐标旋转使轮廓像素沿水平或垂直方向分布, 且轮廓跟踪时采用顺时针方向并选择轮廓左下角为起点,这样就能用图10中的 8种结构基元去描述街区轮廓的结构。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 21 页下图中的阶梯状轮廓可用串abc bcb cd 来描述,波浪形轮廓可用串abcbabcd 来描述。阶梯状轮廓波浪形轮廓如何从描述轮廓的基元串中识别出不同模式则是实现模式识别的核心步骤。这一方面需要定义一个完整的文法 , 已知染色体文法G (N, ,P,S) 中的终结符集为 a , a, b ,

17、 b, c , c,d , d ,还需要确定非终结符集N 和产生式集 P;另一方面还需要从描述轮廓的基元串中找出有意义的表示相应模式的句子 , 如上图中的波浪形轮廓的基元串abcba bcd 中的子串 bcbab 就是一个表示波浪形的单个浅凹进结构的句子。由于街区轮廓的形态多样,这样各种子模式的组合方式也就很多, 这给非终结符集N(一定意义上可认为是子模式集) 和产生式集 P(语法规则集 ) 的确定带来了一定困难。实际上模式识别也不可能 ( 或不要求 ) 处理所有情形的轮廓化简, 而穷举典型模式及构造对应文法是可能的, 以长边 ( 即基元a , b , c , d) 作为句子的分界点, 也不难

18、从描述轮廓的基元串中找出含短边( 即基元 a ,b , c , d) 的句子。对句法模式进行识别, 一般都通过句法分析采用自上而下法或自下而上法来判断一个句子( 即模式 ) 是否在语言 L ( Gi ) 中是合法的 , 从而把这个模式惟一地分配到第i 类。模式识别分类问题实际上是一个模式特征空间的划分问题或映射问题, 而神经网络尤其是多层神经网络的工作原理是建立在模式变换的基础上的 , 因此将神经网络用于模式识别是十分自然而有效的, 而且基于神经网络的模式识别还表现出很好的自适应、自学习、自组织及容错等能力。3层BP 神经网络即可实现多维空间的任意分割, 为了提高 BP神经网络的全局优化特性和

19、加快网络学习收敛速度, 本文采用 3 层混和 GA BP 神经网络来进行模式识别,神经网络起句法翻译的作用。用神经网络来进行句法模式识别的基本步骤如下: 1. 枚举可能的典型模式并构造文法;2. 用自上而下的句法分析得到各典型模式的合法句子, 将其适当转换作为神经网络的输入对神经网络进行有监督的学习, 收敛后将神经网络的权值矩阵及对应模式存入模式库。模式库按句子长度( 即基元个数 ) 分类存储;3. 将建筑物多边形轮廓的Freeman 链码转换为基元串;4. 从基元串中找出合法句子, 按句子长度从对应模式库中读入神经网络的权值矩阵,构造神经网络并将句子作为输入 , 直到神经网络得到合法模式的输

20、出, 即完成了模式识别。完成模式识别后, 针对不同模式采取合理的化简方案即可实现建筑物多边形的化简。2.1.6 对化简后的建筑物多边形的不合理部分进行整形在某些情形下,建筑物多边形经过化简后即使已不存在小于最小表达尺度的短边, 但仍可能有与制图规范相冲突的情况。如图中的两种过于狭窄部分的存在是不允许的,但在上述化简操作中无法识别这种情形进行处理。因此还要对化简后的多边形的不合理部分进行整形。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 21 页2.1.7 对一些复杂建筑物多边形的化简处理对一些复杂建筑物多边形, 可在矢量数据下用类似

21、模式识别的方法去分析并遵循化简原则进行合理化简。2.1.8 算法总结下图即为在自动综合软件中用此算法实现的居民地自动综合的效果:结合试验对该算法的一些总结:1. 通过实验反映作者所采用的建筑物多边形化简步骤是比较合理的, 采用这样的化简步骤大大提高了化简效率(1 000 多个多边形的化简耗时十几秒, 与计算机配置关系不大) 。约 35 %的多边形矩形化时直接化简为矩形。20 %的多边形通过数学形态学方法可完成化简。神经网络辅助下的模式识别相对于基于句法分析方法的模式识别,有易于程序实现、识别容错能力较好的优点。2. 本文的方法能较好保持多边形的轮廓特征和面积, 考虑了化简尺度, 化简结果基本符

22、合制图规范。与现有方法比较体现出一定优势。3. 本文算法中有矢栅数据转换, 采用多步骤、多方法, 算法的一致性、健壮性不如文献4 (郭庆胜 .以直角方式转折的面状要素图形化简方法J.武汉测绘科技大学学报,1999 ,24 (3)中的方法 , 在某些情形下 , 会有不合理的化简结果, 但85 % 以上的化简结果是较理想的。4. 尽管本文的方法有一定实用性, 但还存在以下不足: 首先本方法只适合于大比例尺下直角化特征明显的建筑物多边形的化简, 对复杂建筑物多边形的化简还不尽如意;其次构造有一定容错性、并能导出完整模式集的文法困难, 这导致少数模式无法正确识别, 化简结果不确定。精选学习资料 - -

23、 - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 21 页2.2 算法流程图及伪代码基于数学形态学和模式识别的建筑物多边形的化简是否是调整最小外接矩形的位置和面积作为矩形化结果直角化调整 坐标旋转变换(使各边都尽可能沿水平或垂直方向)矢量数据栅格化对多边形轮廓进行Freeman 链码编码开始数据输入建筑物多边形是否需要化简(是否存在长度小于阈值(0.3mm )的短边)多边形是否可直接化简为矩形用凸起和凹陷模板对栅格数据进行击中运算对找到的凸部和凹部的freeman码做分析弯曲的高度(深度)和宽度阈最小表达尺度的关系高度(深度)和宽度都大于 0.3mm高度(

24、深度)和宽度都小于 0.3mm删除该弯曲保留该弯曲一项大于等于另一项小于0.3mm0.3mm将小于的一项夸大到0.3mm调整freeman链码追踪长度是否还有需要化简的短边否是根据可能的典型模式构造文法句法分析得到各典型模式构造模式库按句长存储将轮廓的freeman链码转换为基元串将基元串中的合法句子通过神经网络得到合法的模式输出多边形化简后的整形复杂多边形的化简栅格数据矢量化坐标反转到原坐标系下数据输出结束否1 开始2 将建筑物多边形数据读入3 设置最小表达尺度(全局),一般为地图上的0.3mm 4 while 此时不是最后一项记录5 判断是否有需要化简的短边6 对标记为需要被化简的每个多边

25、形记录进行矩形化判断,对被标记为可被矩形化的多边形,调整其最小外接矩形,作为矩形化结果输出7 对标记为不可被直接矩形化的多边形,进行直角化调整8 if 该多边形的最小外接矩形的方向不是沿着水平或垂直方向, then 对该多边形进行坐标旋转,使其边尽可能的沿水平或垂直方向9 矢量数据栅格化10 对建筑物多边形的轮廓进行Freeman链码编码11 对栅格数据用数学形态学的方法进行击中算法,识别出轮廓上的凸起和凹陷部分 12 分析凸起和凹陷部分的Freeman链码,对其进行处理13if(判断是否有需要化简的短边 true) then 用GA-BP算法进行模式识别;else then 14 栅格数据矢

26、量15 坐标变换,反转到原坐标系下 Endwhile 16 矢量环境下对复杂多边形的化简 17 结束精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 21 页2.3 子函数流程图及伪代码2.3.1 是否有需要化简的短边 1 对每条记录中的多边形的边遍历,if 存在边长小于阈值(0.3mm)的边, then 该多边形标记为需要化简, else then直接输出该多边形 2.3.2 获得外接矩形2.3.3 最小外接矩形的获得 1获取几何对象的外接矩形,并得到其面积值赋给变量AreaMin ;2 For( 0; AreaTmp ;5 If(A

27、reaTmp公共变量B 9 10 11将得到的矩形反旋转一个B 角度,得到的就是原多边形的最小外接矩形 2.3.4 矩形化判断 1 计算指定建筑物多边形的面积Spoly 2 对指定的建筑物多边形建立其最小外接矩形(MER),并计算其最小外接矩形的面积Smer 3 If(|Spoly-Smer|= 最小表达尺度&Width= 最小表达尺度) then 保留该弯曲,不作调整3If (Height最小表达尺度&Width= 最小表达尺度&Width 最小表达尺度 )then Width=0.3mm (最小表达尺度) ,调整链码if(Height= 最小表达尺度 )then Height0.3mm(

28、最小表达尺度),调整链码 5 输出调整后的Freeman链码 弯曲的高度(深度)和宽度阈最小表达尺度的关系高度(深度)和宽度都大于0.3mm高度(深度)和宽度都小于0.3mm删除该弯曲保留该弯曲一项大于等于另一项小于0.3mm0.3mm将小于的一项夸大到0.3mm调整freeman链码追踪长度开始轮廓上凸起或凹陷的freeman链码输入数据输出结束处理凸起和凹陷部分的Freeman 链码精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 21 页2.3.11 GA-BP 算法进行模式识别(暂略 ) 考虑到该部分的实现难度,在该算法中的意义

29、作用,在具体实现时暂时不处理该部分( 2.3.122.3.14)2.3.12 GA-BP 多层神经网络的训练(暂略 ) 1将全部权值与结点的阈值预置为一个小的随机数2While 未达到预定误差精度或循环次数3 一级流程图模式识别开始数据输入根据可能的典型模式构造文法句法分析得到各典型模式将神经网络的权值矩阵和对应的模式按句长存入模式库将轮廓的 freeman链码转换为基元串将基元串中的合法句子通过神经网络得到合法的模式输出数据输出结束将典型模式作为输入训练神经网络GA-BP 算法进行模式识别 1用 穷举 法构 造 染色 体文 法G=(Vn,Vt,P,S) 2由自顶向下的句法分析构造各典型模式的

30、合法句子3训练BP神经网络,将收敛后将神经网络的权值矩阵及对应模式存入模式库。模式库按句子长度分类存储4将用多边形轮廓的Freeman链码表示为基元串5从基元串中找出合法句子,按句子长度从对应模式库中读入神经网络的权值矩阵 ,构造神经网络并将句子作为输入,直到神经网络得到合法模式的输出,输出值 y=f( wjxj- e)6对识别出的模式进行化简处理 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 21 页4将各典型模式的合法句子作为输入,所要类别数作为输出分别加载,采用 S型函数模型( fs(x)=1/(1+e-x) )5计算各实际输

31、出值67修正权值8 2.3.13 修正权值 (暂略 ) 1将权值矩阵W , 阈值矩阵H 的每一个元素用一个8 位二进制串编码, 将所有元素的编码串连起来, 构成基因码链2解释算子 W i= L (8 位二进制对应十进制值- 127)/1 27+ W iT,实现编码与权重(阀值 ) 之间的码制转换, W i 是第 i 个权重元素的值,初始选择范围为(W iT - L ,W iT + L );W iT 是第 i 个权重元素的中心取值点; L 是权重取值区间的长度3产生初始群体。将W , H 的解空间均匀等分, 每个区域选取一个点作为代表, 产生 m 个初始解评价各 W , H 的个体优势 , 对适

32、应度 F i 的个体 , 赋予其选中概率F = C- E(C 为一常数 , E 为能量函数)能量函数E:4 交叉 : 首先将复制的数字串任意配对, 然后分别对每对进行交叉操作。最简单的交叉方法是随机地选取一个截断点, 将双亲的基因码链在截断点切开, 然后交换其尾部。变异 : 首先根据给定的变异概率随机选取若干个体。一般而言, 给定变异概都很小, 一般取00.05。然后对于选中的个体, 随机选取某一位进行取反运算。5 对父代、子代W , H 的各种取值重新排列, 取 m 个适应度较大的个体作为下一代种群, 转步骤 3 直到群体适应度趋于稳定。6 在趋于稳定的种群中选择适应度值最高的个体, 对之应

33、用BP 算法。7 得到最优值。当网络的训练误差达到给定误差要求时算法结束。此时的W r, Hr 为所求的最优值。 2.3.14 Freeman 链码表示为基元串(暂略 ) 1多边形轮廓的Freeman 链码 =string s,Freeman 链码中同一方向上的追踪长度(像素值)=int m_iLength 2If m_iLength=3 ,即追踪长度为大于等于最小表达尺度,将追踪方向按0-B,1-A,2-D,3-C的规律转换3If m_iLengthb,1-a,2-d,3-c的规律转换4输出基元串s 2.3.15 栅格数据矢量化2.3.16 复杂多边形的化简(矢量)2006.1.2 在栅格数

34、据处理时,该算法的思想是:首先追踪Freeman链码,再通过ModelMatching 找到所有的凸部、凹部,并对应标记在Freeman链码上,最后修改链码,得到矢量化的化简结果。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 21 页在具体实现时,设计的算法是:用简单而直观的(行号,列号)来标记,以此来确定凸部、凹部在链码上的位置,但这样的映射方法很繁琐,在实现上实际是绕了个弯为了正确的映射,还要将Freeman链码的每个单元码也转换为该段链码的(行号,列号)坐标值这是我所能想到的方法。修改链码又是另外一个问题,不同形态的凸部和凹部

35、(比如说波浪形的和阶梯形的)所要修改的段数是不同的。那么很自然的想到,既然在ModelMatching 中,识别出了尽可能多的凸部和凹部,为何不在识别的同时进行修改呢?在实现识别时,我所采用的方法是55 模板击中,通过判断对应位置上的栅格单元值是否完全相同,来确定此处是否有凸凹。同样的,通过直接更改栅格单元的值来完成对凸部和凹部的抚平和填补,应该是一个可行而更为高效的方法。这样一来,程序的流程应该更改为:主程序得到的Griddata ModelMatching.dll 得到新的Griddata-直接传入FreemanChainCode.dll 中由Freeman 链码直接得到矢量数据旋转回原坐

36、标下,这样,对一个多边形的操作就完成了。2006-1-3 原来实现的FreemanChainCode,是由(0, 0)点出发,找到第一个不为0 的栅格单元,将其作为Freeman 链码的起始单元,开始跟踪。由于昨天对程序的更改,Freeman 链码的起始单元应为左下脚的点,也就是m_StartPoint 中应存放的坐标值对应的栅格单元。在栅格数据转回矢量数据的时候,这个点就变为了屏幕上的右上角的点。根据输入的要素类图层,在程序中应该相应的设置的几个值:确定要进行化简的最小表达尺度m_minLimit 栅格单元的大小m_GridSize 确定要进行直角化的角度下限m_RightModify_LM

37、T 程序结果的一些数据:要素类中居民地总数:判断要进行化简的总数:矩形化中完成化简数:数学形态学完成化简数:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 21 页GenerationProcess.dll :处理整个地图综合流程,调用各个动态库中的函数classGENERATIONPROCESS_EXPORT_CLASS CNewGenerFCls public: /创建新的要素类,存放综合后的数据BOOL CreateNewFCls(CFeatureCls *m_ptFCls,CFeatureCls *pResultFCls);

38、/处理整个要素类,地图综合流程void GenerationProcess (CFeatureCls *ptFCls); /判断要素是否需要被综合BOOL GenerationDecided (CFeatureCls *ptFCls,TYPE_FID feaID); /向综合后的要素类中添加新的要素TYPE_FID AppendNewFeature (CFeatureCls *pResultFCls,D_DOT *ptXY, longDotnum); private: long m_minLimit ; /最小表达尺度,根据比例尺自动设定; RegModifyInVector.dll:在矢量数

39、据下进行的多边形化简操作classREGMODIFYINVECTOR_EXPORT_CLASSCRegModifyVect public: struct MER /最小外接矩形结构体 double Area;/最小外接矩形的面积double XMerMax; /最小外接矩形点的坐标double XMerMin; double YMerMax; double YMerMin; double MinEdgeLen;/最小外接矩形的最短边m_PolyMER; /判断要素可否被矩形化 0/1 可以/不可以BOOL RectDecidedAndModify(CFeatureCls *ptFCls,TYP

40、E_FID feaID); /获得要素的最小外接矩形void GetRegMER(CFeatureCls *ptFCls,TYPE_FID feaID); /获得要素的信息void GetFeaInfo(CFeatureCls *ptFCls,TYPE_FID feaID); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 21 页/对无法直接矩形化的多边形,做直角化操作void ChangeRegToRightAngle (CFeatureCls *ptFCls,TYPE_FID feaID); /对已完成直角化的多边形,旋转为正方

41、向void RotateRegRight (CFeatureCls *ptFCls,TYPE_FID feaID); /对完成栅格处理的多边形,旋转回原方向void RotateRegOrign (D_DOT *ptXY, long Dotnum); /提供综合后的多边形的坐标点和点数BOOL SetRegPtXYAndDotnum(D_DOT *ptXY, long &Dotnum); private: TYPE_FID m_FeaID; CPolyGeometry m_geoms; long m_geomNum; long *m_ptNeLen; long *m_ptNe; D_DOT *

42、m_ptXY; long m_Dotnum; D_DOT *m_ptXYNew; /化简后得到的新的坐标long m_DotnumNew;/化简后得到的新的坐标点数double m_MerAngle;/取得最小外接矩形时,多边形旋转的度数D_DOT m_RotateDot;/多边形旋转到正方向时的旋转中心double m_RotateAngle; /旋转为正时的旋转角度; /获得多边形的外包矩形void GetMaxMinXY (D_DOT *ptXY, long dotnum,double &xmax, double &xmin, double&ymax,double &ymin); /旋转

43、点void RotateDotNew(double &dotX, double &dotY, double centerX,double centerY,doubledAngle); /计算两条线段的夹角short calTwoSection_PIAngle(D_DOT dot0,D_DOT dot1,D_DOT dot2,D_DOT dot3,double*angle); /将两条线段的夹角调整为90度(吴老师)short TransAngleTo90Agree(D_DOT dot1,D_DOT *dot2,D_DOT dot3); RegModifyInRaster.dll:在栅格数据下进

44、行的多边形化简操作classREGMODIFYINRASTER_EXPORT_CLASSCRegModifyRast public: /将ptFCls中的多边形 feaID进行栅格化void RasterReg (CFeatureCls *ptFCls,TYPE_FID feaID); /将经过栅格处理的多边形转回矢量void VectorReg(GMS_Freeman_ChainCode & FreemanChainCode); /提供综合后的多边形的坐标点和点数BOOL SetRegPtXYAndDotnum(D_DOT *ptXY, long &Dotnum); 精选学习资料 - - -

45、 - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 21 页private: double m_GridSize; /栅格化时的格网大小,可根据化简精度来指定unsignedchar *Griddata;/栅格化后,转换得到的二维数组D_DOT *m_ptXYNew; /化简后得到的新的坐标long m_DotnumNew; /化简后得到的新的坐标点数GMS_Freeman_ChainCode FreemanChainCode; /对化简后的数据外围轮廓跟踪得到的Freeman 链码; ModelMatching.dll:对栅格数据进行模板匹配操作,对于击中的数

46、据进行相应的修改凸起凹陷(1 表示街区象素 0 表示背景象素 *表示街区或者背景象素)以及这两个model 旋转 90 度, 180 度, 270 度后的状态,构成击中运算的模版集FreemanChainCode.dll:形成修改后的栅格数据的外围轮廓二维数组,由此生成修改后的多边形的矢量数据typedefstruct tagCodeCell/Freeman 链码单元 int m_iDirection; /追踪方向int m_iLength;/追踪长度 (象素数 )int m_iPatternFlag;/模式识别标志GMS_CodeCell; typedefstruct tagFreeman_

47、ChainCode /Freeman链码 bool m_bFinishedSimplication;/化简标志 1CPoint m_StartPoint;/起点坐标 8CArray m_ChainCodeArray;/链码数据GMS_Freeman_ChainCode; 0 0 0 0 0 0 * * * 0 0 * * * 0 0 * 1 * 0 * * 1 * * * * 0 * * 1 * 0 * 1 1 * * * 1 1 * * * 1 1 1 1 1 1 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 21 页3 附录把其他与设计相关的文档放在这里,可以直接写在文档中,也可以放到其他文档中,在这里进行索引。比如利用其他工具所做的各种模型文件等。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 21 页

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号