美文网首页
反距离权重IDW算法解析与示例

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

作者: jadefan | 来源:发表于2019-09-30 15:15 被阅读0次

    在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算法解析与示例

          本文链接:https://www.haomeiwen.com/subject/authpctx.html