ランダムに散布する標高点の補間(シェパード法)

xy平面上でランダムに散布しているデータを用いて、任意の点のz座標値を推定したい場合、
様々な方法があると思いますが、なるべく簡単にサクサクと値をだしてくれる方法をご紹介します。

近ければ近いほど関係は密接である

という分かりやすい考え方に基づいたシェパード法(Shepard’s Method)と呼ばれる方法です。
データに距離に応じた重みを掛けて値を推定します。

  f(x,y)=\sum^n_{i=1}w_if_i

  ここで、fiは推定に使うためにサンプリングしたデータセット、
  wiはそれぞれのデータに掛ける重み、
  f(x,y)は平面上の任意点(x,y)の推定z値です。

ポイントは、
1)推定に用いるデータのサンプリング方法、
2)重みの計算方法
の2点です。

サンプリング方法として、まず考えられるのは、距離の近い順に選択する方法です。
しかしこの方法は、近くに局所的にデータが密集する場合、その付近の傾向だけを
反映してしまうことになります。
そこで、上のアプリでは、十字に分割した領域から一つずつ4個のデータをサンプリング
しています。こうすると、偏りを防ぐことができます。

オリジナルの重みの計算方法は、距離の二乗の逆数を使って以下の式を用います。

  w_i=\frac{h_i^{-2}}{\sum^{n}_{j=1}h_j^{-2}}

しかし、この式を用いると遠くのデータでもそれなりの重みを付けてしまいます。
そこで、もっと極端に重みを付ける以下の式を使っています(Franke&Nielson,1980)。

  w_i=\frac{\Bigl(\frac{R-h_i}{Rh_i}\Bigr)^2}{\sum^n_{j=1}\Bigl(\frac{R-h_j}{Rh_j}\Bigr)^2}

ここで、Rはサンプリングした4つのデータのうち最も遠いデータの距離です。
すなわち、4つのうち最も遠いデータは無視します。

上のアプリの下側にあるテキストボックスに数字を入れてボタンを押すとその個数のデータを
ランダムで生成しますので、試してみてください。
格子状ではなく、任意の点の値を簡単に推定した場合には結構使えると思います。