反距离权重IDW算法解析与示例

在GIS和图像处理中插值算法很常用,散点状的数据面状化。
常用的插值方法包括:反距离权重插值法(IDW)、克里金插值法(Kriging)、双线性插值法等。

反距离权重插值法

反距离加权插值,(Inverse Distance Weight) ,也可以称为距离倒数乘方法。是指距离倒数乘方格网化方法是一个加权平均插值法,可以进行确切的或者圆滑的方式插值。

用左侧离散点生成右侧面状图

ArcGIS的解释:

反距离权重 (IDW) 插值显式假设:彼此距离较近的事物要比彼此距离较远的事物更相似。当为任何未测量的位置预测值时,反距离权重法会采用预测位置周围的测量值。与距离预测位置较远的测量值相比,距离预测位置最近的测量值对预测值的影响更大。反距离权重法假定每个测量点都有一种局部影响,而这种影响会随着距离的增大而减小。由于这种方法为距离预测位置最近的点分配的权重较大,而权重却作为距离的函数而减小,因此称之为反距离权重法。

核心概念就是,随着距离增大,预测点的值受到离散点的影响变小,也就是权重变小,如图所示



权重与反距离(数据点与预测位置之间)的 p 次幂成正比。因此,随着距离的增加,权重将迅速降低。权重下降的速度取决于 p 值。如果 p = 0,则表示权重不随距离减小,且因每个权重 λi 的值均相同,预测值将是搜索邻域内的所有数据值的平均值。随着 p 值的增大,较远数据点的权重将迅速减小。如果 p 值极大,则仅最邻近的数据点会对预测产生影响。


示例

最上面的图即为效果图
核心代码:

    //随机生成数据
    function randomPoint() {
      for (let i = 0; i < 10; i++) {
        var x = rn(width);
        var y = rn(height);
        var z = rn(255);
        datas.push([x, y, z]);
      }
    }

    //遍历像素点计算预测值
    function interpolateGrid(id) {
      for (let i = 0; i < width; i++) {
        for (let j = 0; j < height; j++) {
          var v = idw(i, j);
          createPixel(id, i, j, v);
        }
      }
    }

    //遍历离散点计算权重得出预测值
    function idw(x, y) {
      var sw = 0, zw = 0;
      datas.forEach(data => {
        var dx = data[0] - x;
        var dy = data[1] - y;
        var distance = Math.sqrt(dx * dx + dy * dy)
        var zValue = data[2];
        var w = 1.0 / Math.pow(distance, 2);
        sw += w;
        zw += w * zValue;
      })
      return zw / sw;
    }

你可能感兴趣的:(反距离权重IDW算法解析与示例)