python实现调和反距离空间插值法AIDW

news2025/4/17 4:45:04
1 简介

AIDW 主要是针对 IDW 的缺点进行了改进,考虑了样本点与预测点的位置,即方向和距离,具体见下图:

在这里插入图片描述

2 改进

IDW 公式:

在这里插入图片描述

从IDW算法可看出,插值点的估算值仅与插值样本距插值点的远近相关,并未考虑样本点的方位性(即样本点被表示为各向同性)。

IDW 插值的基本假设是样点在插值区呈均匀分布。但众多情况下,样点在各向分布并非均匀,甚至会出现样点集中于某一方向的现象,违背了基本假设,其插值合理性就难被保证。针对 IDW 这一插值局限,作者提出了调和反距离权重(AIDW)插值算法。

AIDW 增加了可反映插值点与样本点方位关系的调和权重系数 K,其基本假设是:距插值点近的样本点,对其后方的样本点有遮蔽效应,当两样本点与插值点的连线夹角 α < 360 ° / n \alpha<360°/n α<360°/n(n 为插值搜索邻域内的样点个数)时,遮蔽效应存在,当 α ≥ 360 ° / n \alpha≥360°/n α360°/n 时,遮蔽效应消失。在 AIDW 插值过程中,受遮蔽影响的样本点,其插值权重将被削弱,削弱的程度取决于该样点 K 值的大小。

按上述假设:

  • 图1(a) 所示的 5 个样点在方向上均匀地分布在插值点(中心点)周围,任意两样点与插值点的连线夹角均大于或等于 72°(即α α ≥ 360 ° / 5 \alpha≥360°/5 α360°/5),即认为该5个样点间相互不存在遮蔽效应;
  • 在图1©中,任意两样点与插值点的连线夹角均小于72°,即认为距插值点的近样点,对其后的样点均具有遮蔽效应;在大多情况下,样点在插值点周围的分布应类似图1(b),既不像图1(a)均匀分布,也不像图1©集中分布。
  • 图1(b)中 Z 1 Z_1 Z1 Z 3 Z_3 Z3 对任一样点均无遮蔽, Z 2 Z_2 Z2 Z 4 Z_4 Z4 Z 5 Z_5 Z5 有遮蔽, Z 4 Z_4 Z4 Z 5 Z_5 Z5 也有遮蔽。

在这里插入图片描述

将 IDW 传统的算法思想与本文的基本假设结合,提出了 AIDW 算法:

在这里插入图片描述

sin ⁡ p θ \sin ^p\theta sinpθ的理解:

  • 从下图(a)可以看出, Z i Z_i Zi 逐渐移向 Z 0 Z_0 Z0 的过程种, θ \theta θ 逐渐增大,当三者形成等腰三角形时, θ = 90 ° \theta=90° θ=90°,此时最大,即 sin ⁡ p θ = 1 \sin^p\theta=1 sinpθ=1 Z j Z_j Zj 不会对 Z i Z_i Zi 产生遮蔽影响。
  • 从下图(b)可以看出, Z i Z_i Zi 保持与 Z 0 Z_0 Z0相同的距离向 Z j Z_j Zj 移动,当两者位于同一条线时, Z i Z_i Zi的影响完全被遮蔽,即 θ = 0 ° , sin ⁡ p θ = 0 \theta=0°,\sin^p\theta=0 θ=,sinpθ=0

在这里插入图片描述

计算样例:

按AIDW算法,在图3(b)中因 Z 1 Z_1 Z1 Z 6 Z_6 Z6 Z 3 Z_3 Z3 Z 7 Z_7 Z7 Z 8 Z_8 Z8 Z 4 Z_4 Z4 Z 7 Z_7 Z7有遮蔽影响,这些受遮蔽样点的插值权重被削减, Z 10 、 Z 11 、 Z 12 Z_{10}、Z_{11}、Z_{12} Z10Z11Z12分别被 Z 4 Z_{4} Z4 Z 3 Z_3 Z3 Z 7 Z_7 Z7 完全遮蔽,它们的插值权重降至为0。依照式(2)和式(3),最终插值点估算值的计算式为:

在这里插入图片描述

  • Z Z Z 为插值点(中心点)估算值
  • Z 1 − Z 9 Z_1-Z_9 Z1Z9为样点观测值
  • d 1 − d 9 d_1-d_9 d1d9为样点与插值点的欧氏距离
  • p 是幂指数
  • θ \theta θ 角如图3(b)所示

在这里插入图片描述

3 程序设计流程

AIDW 的插值程序可分为插值前准备和插值计算两个过程:

  • 插值前准备主要是用于搜索合适的插值样点,并为下一步的插值计算提供 d i d_i di f i j f_{ij} fij 值;
  • 插值计算过程主要是求算反映样点遮蔽程度的 sin ⁡ p θ i j \sin^p\theta_{ij} sinpθij 值,并结合 d i 、 z i d_i、z_i dizi 值求算插值点的Z值。

在这里插入图片描述

  • 插值搜索邻域的大小以格点数(k×k)表示
  • m 是搜索邻域内的样点数
  • n 是插值所需的样点数
  • d、f 分别为样点与插值点的欧氏距离和两样点间的欧氏距离
  • i、j、u、v 均为插值样点的序号
4 插值结果

在这里插入图片描述

  • 对比 M 点(黑色框),IDW 出现孤立圆现象(站点集中于一侧),AIDW 消除了孤立圆现象
  • 对比 C 点(红色框),IDW 出现同心圆现象,AIDW 消除了同心圆现象
  • 对比 K 点(黄色框),两者均出现孤立圆,通过分析,K 点周围的站点分布均匀。

从上图可以看出 AIDW 有效改进了 IDW 的缺点,同时又能保留 IDW 的插值思想,但 AIDW 需要计算 θ \theta θ ,因此在插值时间上要比 IDW 慢。

5 python 实现
from sklearn.neighbors import NearestNeighbors

"""类函数"""
class AIDW:
    def __init__(self, x, y, m,p=2):
        self.m = m # 搜索邻域内的样点数
        self.nbrs = NearestNeighbors(n_neighbors=m, algorithm='ball_tree').fit(x)
        self.thresh = 360/m
        self.p = p
        self.y = y
        self.x = x
        
    def fit(self, x_new):
        indices = self.nbrs.kneighbors(x_new, return_distance=False)
        x_sample = self.x[indices[0]]
        y_sample = self.y[indices[0]]
        x_ = x_sample-x_new
        zi = []
        ki = 1
        for i in range(1, self.m-1):
            for j in range(i):
                cos_ = np.sum(x_[i]*x_[j])/((np.sum(x_[i]**2)**(1/2))*(np.sum(x_[j]**2)**(1/2)))
                radian = np.arccos(cos_)
                angle = radian*180/np.pi 
                if angle>=self.thresh:continue
                else:
                    ki*=np.sin(radian)**self.p
            di = np.sum(x_[i]**2)**(1/2)
            zi.append(ki/(di**self.p))
        z = np.sum(np.array(zi)*y_sample[1:-1])/np.sum(zi)
        return z

"""demo"""
import numpy as np
import matplotlib.pyplot as plt

# create sample points with structured scores
X1 = 10 * np.random.rand(1000, 2) -5

def func(x, y):
    return np.sin(x**2 + y**2) / (x**2 + y**2 )

z1 = func(X1[:,0], X1[:,1])

# 'train'
aidw = AIDW(X1, z1, m=15)

# 'test'
spacing = np.linspace(-5., 5., 100)
X2 = np.meshgrid(spacing, spacing)
grid_shape = X2[0].shape
X2 = np.reshape(X2, (2, -1)).T
z2 = []
for x2 in X2:
    z2.append(aidw.fit(x2.reshape(1,-1)))
z2 = np.array(z2)

# plot
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharex=True, sharey=True, figsize=(10,3))
ax1.contourf(spacing, spacing, func(*np.meshgrid(spacing, spacing)))
ax1.set_title('Ground truth')
ax2.scatter(X1[:,0], X1[:,1], c=z1, linewidths=0)
ax2.set_title('Samples')
ax3.contourf(spacing, spacing, z2.reshape(grid_shape))
ax3.set_title('Reconstruction')
plt.show()

在这里插入图片描述

参考:
顾及方向遮蔽性的反距离权重插值法.李正泉.
An Adjusted Inverse Distance Weighted Spatial Interpolation Method.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1239631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于鹈鹕算法优化概率神经网络PNN的分类预测 - 附代码

基于鹈鹕算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鹈鹕算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鹈鹕优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

【LeetCode刷题】--40.组合总和II

40.组合总和II 本题详解&#xff1a;回溯算法 class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return re…

基于python人脸性别年龄检测系统-深度学习项目

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术组成1. OpenCV2. Dlib3. TensorFlow 和 Keras 功能流程 二、功能三、系统四. 总结 一项目简介 # Python 人脸性别年龄检测系统介绍 简介 该系统基…

Windows、VMware问题集合

Windows、VMware问题集合 一. Windows11安装VMware17提升虚拟机性能1. 桌面右击图标点击属性——>兼容性&#xff0c;找到“以管理员身份运行此程序”勾选&#xff0c;最后点击确定即可。2. 关闭win11的内核隔离功能。 二. VMware虚拟机报错&#xff08;虚拟化性能计数器需要…

UML建模图文详解教程——类图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 类图概述 类图用来描述系统内各种实体的类型以及不同…

计算机毕业设计 基于微信小程序的“共享书角”图书借还管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

非结构化数据保护

计算机信息化系统中的数据分为结构化数据和非结构化数据。非结构化数据其格式非常多样&#xff0c;标准也是多样性的&#xff0c;而且在技术上非结构化信息比结构化信息更难标准化和理解。 非结构化数据是数据结构不规则或不完整&#xff0c;没有预定义的数据模型&#xff0c;…

阿里云 ACK 新升级,打造智算时代的现代化应用平台

云布道师 今天&#xff0c;能想到的或是想不到的领域&#xff0c;对容器和 Kubernetes 的需求都居高不减&#xff0c;使这项技术正在真正走向无处不在。 在 2023 云栖大会上&#xff0c;阿里云云原生产品线容器服务负责人易立关于容器服务 ACK 在本届亚运会上应用的介绍&#…

智慧法院档案数字化解决方案

智慧法院档案数字化解决方案可以采用以下步骤&#xff1a; 1. 确定数字化目标&#xff1a;明确数字化的目标和范围&#xff0c;比如将所有的案件相关文件、纸质档案和材料进行数字化。 2. 确定数字化流程&#xff1a;制定数字化的流程和标准&#xff0c;比如采用哪些设备和软件…

连接k8s和凌鲨

通过连接k8s和凌鲨&#xff0c;可以让研发过程中的重用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 架构 所有操作通过k8s proxy连接&#xff0c;通过设置namespace label赋予访问权限。只有赋予特定label的namespace才能被访问。 使用步骤 部署k8s proxy 你…

「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」

介绍 使用Docker开发Golang云原生应用程序&#xff0c;使用Golang服务和Redis服务 注&#xff1a;写得很详细 为方便我的朋友可以看懂 环境部署 确保已经安装Go、docker等基础配置 官网下载链接直达&#xff1a;Docker官网下载 Go官网下载 操作步骤 第一步 创建一个…

io+day5

1&#xff0c;select服务端 1 #include<myhead.h>2 3 #define PORT 8888 //端口号4 #define IP "192.168.228.165" //IP地址5 6 7 int main(int argc, const char *argv[])8 {9 //1、创建用于接受连接的套接字10 int sfd socket(…

elasticsearch安装分词器插件

查看插件安装情况 elasticsearch-plugin list 插件在线安装 bin/elasticsearch-plugin install analysis-icu 离线安装ik分词 cd plugins wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip unzi…

区域人员超限AI算法的介绍及TSINGSEE视频智能分析技术的行业应用

视频AI智能分析已经渗透到人类生活及社会发展的各个方面。从生活中的人脸识别、停车场的车牌识别、工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品的品质缺陷AI检测等&#xff0c;AI智能分析技术无处不在。在某些场景中&#xff0c;重点区域的人数统计与…

[计算机网络实验]头歌 实验二 以太网帧、IP报文分析(含部分分析)

目录 第1关&#xff1a;Wireshark基本使用入门 【实验目的】 【实验环境】 【本地主机、平台虚拟机之间数据传递】 wireshark基本用法】 1、wireshark主界面 2、抓取分组操作 3、Wireshark窗口功能 4、筛选分组操作 【实验操作】 ​编辑 第2关&#xff1a;Ethernet帧…

【华为OD题库-033】经典屏保-java

题目 DVD机在视频输出时&#xff0c;为了保护电视显像管&#xff0c;在待机状态会显示"屏保动画”&#xff0c;如下图所示,DVD Logo在屏幕内来回运动&#xff0c;碰到边缘会反弹:请根据如下要求&#xff0c;实现屏保Logo坐标的计算算法 1、屏幕是一个800 * 600像素的矩形&…

基于STM32的烟雾浓度检测报警仿真设计(仿真+程序+讲解视频)

这里写目录标题 &#x1f4d1;1.主要功能&#x1f4d1;2.仿真&#x1f4d1;3. 程序&#x1f4d1;4. 资料清单&下载链接&#x1f4d1;[资料下载链接](https://docs.qq.com/doc/DS0VHTmxmUHBtVGVP) 基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解&#xff09; 仿真图prot…

2023 年 亚太赛 APMCM 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 cs数模团队在亚太赛 APMCM前为大家提供了许多资料的内容呀&…

Linux 进程等待

在2号手册里查wait&#xff08;&#xff09;。wait()等待任意一个子进程的状态。 wait&#xff08;&#xff09;等待成功会返回该子进程的id,返回失败会返回-1&#xff1a; 小实验 子进程的退出码 子进程执行work()&#xff0c;父进程wait子进程。 子进程跑完5秒之后就e…

如何保持口腔健康?羊大师全面指南!

口腔健康对于我们的整体健康至关重要。保持口腔健康可以帮助我们避免口腔疾病&#xff0c;如龋齿、牙周疾病等。口腔健康与身体其他部分的健康也有很大的关系。我们应该如何保持口腔健康呢&#xff1f;在本文中&#xff0c;小编羊大师将为您提供全面指南&#xff0c;详细介绍如…