克里金算法以及等高线的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主要参考程序:Kriging 算法实现2维和3维地图等高线,kriging算法参考:kriging.ppt 为了方便调试,kriging 算法与等高线程序分别实现

kriging.py程序的主要功能为:根据输入参数,输出运算结果data.txt

drawtest.py程序的主要功能为:读取data.txt,绘制等高线,加入背景位图,加入参考节点kriging.py

输入参数:

算法实现:

使用科学运算库numpy,scipy能够方便的进行矩阵运算,解线性方程组,程序只需要根据输入参数生成需要的运算矩阵即可

import numpy

import scipy

v = numpy.ones((item+1,item+1))

D = numpy.ones((item+1,1))

Cd = numpy.ones((item+1,item+1))

Cd[item][item] = 0

V表示一个(n+1)*(n+1)矩阵

D为一个(n+1)*1矩阵

Cd用于存放距离方便V的运算

V代表计算公式中的【k】,D代表计算公式中的M2。计算出权值系数之后存入D中。各个

矩阵的生成方式可参考kriging.ppt中的实例。

根据X轴,Y轴方向上的分辨率计算出x+1 * y+1 个插值结果

drawtest.py:

根据一个画图程序改编,保留了其框架。

主要功能函数介绍:

程序运行流程:

读取数据->绘制等高线图->加入背景图层,设置背景图层透明度->加入节点图层->显示整体图像

说明:

内存位图的操作基本与MFC中一致,仿佛没有释放DC的操作(参考手册上没有发现)

透明画笔:直接使用“正常DC”不能实现画笔画刷的透明属性。需将其进行GCDC转化(原因??)具体操作test函数中有相关描述。

由于采用透明画笔绘制等高线会出现问题,故不使用。在其上加入透明背景图层。

透明位图的操作:实现透明效果有两种方式(均是image操作)

wxPython大概支持两种类型图像的处理:image,bitmap。Image是各种类型图像处理的一个抽象类,能够实现各种较为复杂的功能。Bitmap类主要是对位图进行处理,使用方便效率较好,能与image间进行相互转换以完成较复杂的功能。

设置图像的遮罩以指定一个透明的图像

图像遮罩是图像中的一个特殊的颜色集,当图像显示在其它显示部分之上时,它扮演透明度的角色。你可以使用SetMaskColor(red, green, blue)方法来设置一个图像遮罩,其中的red, green, blue定义图像遮罩的颜色。如果你想关闭遮罩,可以使用SetMask(False),重置使用SetMask(True)。方法HasMask()返回与当前遮罩状态相关的一个布尔值。你也可以使用方法SetMaskFromImage(mask, mr, mg, mb)根据同一尺寸的另一图像设置遮罩——在这种情况下,遮罩被定义为在遮罩wx.Image中有着颜色mr, mg, mb的所有像素,而不管在主图像中那些像素是什么颜色。这使得你在创建一个遮罩中有了很大的灵活性,因为你不必再担心在你原图像中的像素的颜色。你可以使用GetMaskRed(),GetMaskGreen(), 和GetMaskBlue()获取遮罩色。如果一个有遮罩的图像被转换为一个wx.Bitmap,那么遮罩被自动转换为一个wx.Mask对象并赋给该位图。

设置alpha值来指定一个透明的图像

alpha值是指定一个透明或部分透明图像的另一个方法。每个像素都有一个alpha值,取值位于0(如果图像在该像素是完全透明的)到255(如果图像在该像素点是完全不透明的)之间。你可以使用SetAlphaData(data)方法来设置alpha值,它要求类似于SetData()的字符串字节值,但是每个像素只有一个值。和SetData()一样,SetAlphaData()不进行范围检查。你可以使用HasAlpha()来看是否设置了alpha值,你也可以使用GetAlphaData()来得到全部的数据集。你也可以使用SetAlpha(x, y, alpha)来设定一个特定的像素的alpha值,并使用GetAlpha(x, y)来得到该值。

注意setData,setAlpha,SetAlphaData等一系列函数的输入参数与相关getXX的输出

1输入参数得是字符,不是字符,使用toString使其转换为字符

2这些操作都是针对图像每一个像素点的setData有三个部分组成(R,G,B)麻烦一点,SetAlpha 只有一个部分-透明度。参数输出如下(10*10)

3例如如果你要把位图的透明度置为128,输入参数可以是用a = width * hight *chr(128)

如果要设置某一点的透明度可以使用SetAlpha函数给出点的坐标。要实现某些复杂的透明功能,使用Mask方式会更方便一点。Alpha方式实现区域的透明很方便。Mask实现某些颜色的透明,其他图像中相关颜色的透明很方便。

相关文档
最新文档