在等值线的追踪中有一类相对来说比较简单的,也就是涉及不是很深的问题,那就是本文要说的基于规则的等值线的追踪网格。

先说一下等值线的形成,等值线的绘制是有两种方法的,一种就是完全测量,也就是在实际的施工中找到所有的等值点,标记上

x,y,value,还有一种就是按一定的方式用几个预测点来采用一些插值方法形成规则的网格,每一个网格点上都有着坐标和value,

也就是高程值,然后在用这些网格上的值来估计出等值点,显然用第一种方法是不好的,常常也是不切实际的;这样也就有了一系列

的等值线的追踪方法的形成;在这里,也有一个不得不说的就是基于几个观测点的网格化问题,这里面也有很多的值得研究的地方,

我在做项目时用的是Kriging插值算法,当然还有一些其它的很多,有加权反距离,有最小曲率等等很多,这些算法都是比较不好做的,

大家也可以到网上搜的了解一下,我自己也没有弄好它们,也是惭愧,在项目中用到的Kriging算法也是别人老师做的,但也没有做的

非常的好,这个Kriging算法也有做的比较好的,我们做的是地质软件,象我们参照过的Srufer,就是这方面比较做的比较好 的,地质

上也是用的比较多的,它的这方面的算法就做的比较好,可是它也还有一点问题,也就是我前面说过的,它也没有把断层做好,当然我

也没有说别人的资格,我其实还远远没有做到他们的软件那样;在Kriging算法方面,也有一些开源的,比较好的就是斯坦福大学做的

开源的Fortran的代码,那可真是利害,也做了开源软件的最高境界, 我开源了,你看不懂,等你看懂了,也过时了;他做的就是我

开源了,你看不懂,那个可是真的太难看了,顺便说一句,如果大家有兴趣那个也真是值得大家研究研究,研究好了,那起码硕士

论文那绝对是不成问题的,因为别人的这方面的博士论文也就那样,呵呵。

以下就开始等值线追踪算法的讲解;等值线可以分成为非封闭等值线和封闭等值线,等值线的追踪先从网格边界或者网格内部上

一等值点出发, 求得下一等值点,然后以此点出发搜索下一等值点(主要是求出坐标),一直这样下去,若遇到网格边界或者

又回到起点(封闭等值线),则说明已经找到了一条等值上点所在的位置, 也就是找到了等值线。

要注意网格,什么是网格?网格又意味着什么?等值线在网格中又有什么不一样的地方?大家可要知道,我现在要说的是一种

基于规则网格的等值线的追踪,就是那种矩形的网格,只有网格上才有坐标和高程值,而在算法中又要找出坐标,难道是找那些

网格点,把网格点上的等值点长出来,这当然不是,我们要找的点应该是在那些网格的每一个小格子的边上,在遇到了等值点正好在

网格点上时我们还不得不做一些小的处理,否则是无法追踪下去的,待会我再讲原因; 大家又可能会问,那没有值我们追踪个啥,

这也就是这种方法要做的,记住在每一个小格上的四个点的坐标和高程值我们是知道的,那就可以根据这些值来估计了,有人会说,

是估计的话那不就不准了,那我问你,你的插值算法准吗?你要准,那你就自己去一点点测量吧。那怎么样根据这些值来估计呢,

这就相当于在做线性插值,这里可以放心,因为网格化后的每一个网格的小格在坐标的距离都并不会很大,用什么插值也没有

就争议了,这里用一个图来说明

图1

大家看到了如果说有图那样的情况,是不是那一个等值点就找到了呢,提示大家一下,大家有没有看到这张图里的那个黑点是不是

比较靠近10,这可就是线性插值的真实情况了。在一个这样的小格中,这样的点只会有0,2 ,4 个,为什么不会有1,3 个呢,

大家想想,如果只有一个,那等值线进去了要怎么样出去呢,3个同样如此,5 个以上那就更不可能,为什么,要注意我们做的是

线性插值。这里大家可能想那如果上图中的5变成10,那可怎么办呢,你这样想说明你有点上路了,这个我们会在程序中将其中的

一个10加上一个修正值来解决。如果出现有四个等值点的情况,则必须做一下处理,我们就按上图来说明,如果是有四个点,就说明

上,右,下边都有等值点,那怎么样就认为8这个点是从那一边出去呢,

图2

(3)这种情况是不可能出现的,如果出现,那下一次追踪到这一个小格时就不得不将上下两个点连接起来,这样在画等值线就出现了

交叉的情况,这是不允许的,现在要解决的就是究竟是(1)还是(2)的问题,这个问题上也有几种方法,也有比较麻烦的,我只是

按照别人的方法用了一个比较简单的方法,就是上下两个点谁8近的方法,如果两个都一样近就看8那面的那个点是偏离上下边哪 个近

离上边近就是(1),否则就是(2),按这种方法,上图中就应该是(2)这种方式。

要说算法,就有一些不得不说的,那就是算法里用到的算定义的数据结构,

CodestructIsoPoint

{

publicint_column;//这里的行列的最大值要比网格的行列数分别小1publicint_row;//因为这里的行列是按行列线(注意是线)来算的publicbool_isHorizon;//等值点是否在X轴上(水平线上)   true--X   false--Y}

Code//每条边上的信息(有无等值点,有时点在何处(_rate)structEdgeIsoInfo

{

publicfloat_rate;//比率是代表在网格边上的比率位置publicbool_isIsoPoint;//在此边上是否有等值点}

这两种结构就可以将整个网格的各个小格边上是否有等值点,在哪一条边,在哪什么坐标位置(你注意到了_rate了吗?)。

在开始前,我们先对整个网格做一次预处理,就是用二维数组保存各个边上的信息

CodeprivateEdgeIsoInfo[,] _xSide;

privateEdgeIsoInfo[,] _ySide;

其中_xSide, _ySide分别指的是x,y边上的等值点信息。

预处理就相当于找到此高程值的所有等值点(为什么,自己想),我这里做的是循环,就是说每一个高程值做一次预处理循环,

有了此高程值相对应的点信息,现在的问题就是如何将所有的这些点分类,分成一条条的等值线,这样就必须要做一些处理,

那就决定从哪里开始找起,这样就有网格的左,上,右,底边四个边界和网格内部(用于追踪封闭等值线),我们就先做开等值线的

追踪,后做封闭等值线的追踪,对于开等值线,我们拿一上面的第一个图来说,也就是追踪左边界,我们从左边界的最下端开始追起,

也就是追_ySide[0,0], 看它的那个_isIsoPoints是否为true, 不是就在找_ySide[1,0],依次类推,假如我们到达10,5 那个位置,

也就产图1的情况就达到了示例程序中的从左到右追踪的条件TracingFromLeft2Right(具体见代码),处理完了以后,为了避免再一次

追踪到这一点,那我们就将 _isIsoPoints设为false, 这样下次就不会再找到这个点了。

对于封闭等值线的处理同样如此,就不再说了。

其余详细的看示例代码吧,其实我也是第一次写博客,才知道写东西真的不是那么的容易,以前 看别人一天博客更新一次还嫌慢了,

现在到了自己的头上才发现真的不容易,我再说一次,我这里写的,还远远没有将算法讲清楚,也只能想当于介绍了一下子而已,想要

弄清楚的大牛们就自己去看源码吧,也可以欢迎和我联系。

下一篇就讲光滑了,下次力争写的好一点。

示例代码:

python等值面追踪_等值线的追踪算法(2)相关推荐

  1. python等值面追踪_等值线的追踪算法(1)

    现在还没有开学,也没有什么事做,前些日子做过一些小东西,总觉得要整理一下,做一个个人小结,算是给自己这一年来 做项目的一点积累,以前常常都在想写写什么文章,可惜都是无始无终,这一次,就一定就一定我会坚 ...

  2. python机器识别追踪_多目标追踪器:用OpenCV实现多目标追踪(C++/Python)

    原标题:多目标追踪器:用OpenCV实现多目标追踪(C++/Python) MultiTracker : Multiple Object Tracking using OpenCV (C++/Pyth ...

  3. python vector 初始化_从零开始搭建机器学习算法框架(python)--计算框架

    介绍 今天开始一个新的系列,这个系列的目标是用python在不使用任何第三方库的情况下去实现各类机器学习或者深度学习的算法.之所以会有这种想法是因为每当我想提高编程技巧的时候,我总希望能够做一些简单又 ...

  4. python数据结构题目_《数据结构与算法Python语言描述》习题第二章第三题(python版)...

    ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本 ...

  5. python闭环最短路径_深度学习经典算法 | 蚁群算法解析

    蚁群算法基本思想 蚁群算法的基本原理来源于自然界中蚂蚁觅食的最短路径问题.根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发 ...

  6. python越来越慢_为什么我的算法越来越慢?

    前提:我不是程序员! 我编写了一个Python代码,用arcgis9.2geoprocessor在DB字段上执行迭代. 该算法需要在超过两千条记录上迭代,其速度逐渐降低,直到每次迭代5/6分钟! 这是 ...

  7. python预测糖尿病_使用机器学习的算法预测皮马印第安人糖尿病

    皮马印第安人糖尿病预测 pima_diabetes_analysis_and_prediction 文件夹: data --> 存储原始样本 和 数据清洗后的样本 data_analysis_a ...

  8. python音频聚类_用K-means聚类算法实现音调的分类与可视化

    本文由 伯乐在线 - ggspeed 翻译,耶鲁怕冷 校稿.未经许可,禁止转载! 英文出处:jared polivka.欢迎加入翻译组. 利用 K-means 聚类算法来聚类和可视化音调 Galvan ...

  9. python canny优化_自适应Canny边缘检测算法

    我正在尝试使用python从头开始实现Canny算法.在 我正在按步骤操作双边滤波图像 使用高斯一阶导数在4个不同方向上计算梯度 def deroGauss(w=5,s=1,angle=0):wlim ...

  10. python求组合数_求组合数的算法_Cppowboy's Blog - SegmentFault 思否

    问题:求解组合数C(n,m),即从n个相同物品中取出m个的方案数,由于结果可能非常大,对结果模10007即可. 方案一 暴力求解,C(n,m)=n(n-1)-*(n-m+1)/m! int Combi ...

最新文章

  1. 使用Python,OpenCV进行图像哈希
  2. 【每日一学】复杂度分析
  3. Scala使用半生对象来创建伴生类对象(默认单例)
  4. node JS 微信开发
  5. sql相同顺序法和一次封锁法_数学专题 | Ep01 隔板法的妙用
  6. 读《python核心编程2》笔记 1
  7. [Python] L1-034. 点赞 团体程序设计天梯赛GPLT
  8. actionbar与viewpager的联合使用(android 3.0 ,level 11以上)
  9. windows server 2019添加开机启动项
  10. CPU虚拟化是否开启
  11. winSCP start
  12. 全球及中国回转窑扫描仪行业发展动态与前景趋势预测报告2022-2028年
  13. skyline 查询 和 验证索引数据结构MR-tree的构建
  14. sql支持emoji表情符
  15. 人机猜拳代码python_python 实现人和电脑猜拳的示例代码
  16. MATLAB复原动态模糊图像
  17. MySQL 数据库下载(windows)
  18. Ceph用户:中国用户统计表(2018年度)
  19. 计算机保存图片找不到桌面,保存的图片在桌面但是找不到怎么办? 爱问知识人...
  20. 招银网络科技终面编程题

热门文章

  1. 对数幅度谱图像matlab,幅度谱 fft2绘制图像的对数幅度谱,比较图像旋转、平移和缩放后的频谱...
  2. vc 控制台添加托盘显示_本教程将教会你如何让控制台程序拥有托盘图标
  3. 爬虫基础之代理的基本原理
  4. 关于配置移动硬盘上的Eclipse+mingw+qt4.5.3的问题解决!
  5. 厦门大学国家奖学金答辩PPT模板
  6. python修改pdf内容_如何编辑pdf文件,替换其数据?
  7. 十大著名黑客-----凯文-米特尼克
  8. 国美云运维自动化实践
  9. 《HybridSN: Exploring 3-D–2-DCNN Feature Hierarchy for Hyperspectral Image Classification》论文学习笔记
  10. 转载 elm中文手册