0

私は 2 つの空間次元を持つ 3D データキューブを持っており、3 つ目は 2D 画像の各ポイントでのマルチバンド スペクトルです。

H[x, y, bands]

波長 (またはバンド番号) を指定すると、その波長に対応する 2D 画像を抽出したいと思います。これは単純に のような配列スライスになりますH[:,:,bnd]。同様に、空間位置 (i,j) が与えられると、その位置でのスペクトルは になりH[i,j]ます。

また、スペクトル内の低照度ノイズに対抗するために、画像をスペクトル的に「滑らか」にしたいと思います。これは bandbndの場合です。サイズのウィンドウを選択しwind、n 次多項式をそのウィンドウのスペクトルに当てはめます。polyfit と polyval を使用すると、 band のその時点で適合したスペクトル値を見つけることができますbnd

ここで、適合値からの画像全体が必要な場合はbnd、各画像でこのウィンドウ フィッティングを実行する必要(i,j)があります。また、 の 2 次導関数のイメージbnd、つまり、各点での適合スペクトルの 2 次導関数の値も必要です。

ポイントを実行すると、各スペクトルを polyfit-polyval-polyder することができましたx*y。これは機能しますが、これはポイントごとの操作です。これをより速く行うためのpytho-numponicの方法はありますか?

4

1 に答える 1

1

dx の固定セットに対して点 (x+dx[i],y[i]) に最小二乗多項式フィッティングを実行し、結果の多項式を x で評価すると、結果は y の (固定) 線形結合になります。 [私]。多項式の導関数についても同じことが言えます。したがって、スライスの線形結合が必要です。「Savitzky-Golay フィルター」を検索してください。

SGフィルターがどのように機能するかの簡単な例を追加するために編集されました。詳細を確認していないため、正確であることに依存しないでください。

したがって、幅 5 と次数 2 のフィルターを使用するとします。つまり、各帯域 (現時点では開始と終了の帯域を無視します) について、その 1 つと両側の 2 つを取得し、2 次式に適合します。カーブし、中央の値を見てください。

したがって、f(x) ~= ax^2+bx+c および f(-2),f(-1),f(0),f(1),f(2) = p,q,r の場合、 s,t の場合、4a-2b+c ~= p、a-b+c ~= q などが必要です。最小二乗法は、(4a-2b+cp)^2 + (a-b+cq)^ を最小化することを意味します。 2 + (cr)^2 + (a+b+cs)^2 + (4a+2b+ct)^2、つまり (a、b、c に関して偏導関数を取得する):

  • 4(4a-2b+cp)+(a-b+cq)+(a+b+cs)+4(4a+2b+ct)=0
  • -2(4a-2b+cp)-(a-b+cq)+(a+b+cs)+2(4a+2b+ct)=0
  • (4a-2b+cp)+(a-b+cq)+(cr)+(a+b+cs)+(4a+2b+ct)=0

または、単純化すると、

  • 22a+10c = 4p+q+s+4t
  • 10b = -2p-q+s+2t
  • 10a+5c = p+q+r+s+t

したがって、a、b、c = pq/2-rs/2+t、(2(tp)+(sq))/10、(p+q+r+s+t)/5-(2p-q-2r -s+2t)。

もちろん、c は 0 での近似多項式の値であるため、必要な平滑化された値です。したがって、空間位置ごとに、入力スペクトル データのベクトルがあり、そこから (最初と最後のカップルを除く) 行が [0 ... 0 -9/ 5 4/5 11/5 4/5 -9/5 0 ... 0]、中央の 11/5 が行列の主対角線上にあります。

したがって、空間位置ごとに行列の乗算を行うことができます。しかし、どこでも同じtensordot行列なので、 を 1 回呼び出すだけで実行できます。したがって、Sが先ほど説明した行列 (いや、ちょっと待ってください、今説明した行列の転置A) を含み、が 3 次元データ キューブである場合、スペクトル平滑化データ キューブは になりますnumpy.tensordot(A,S)

これは私の警告を繰り返す良い点です: 私は上記のいくつかの段落の詳細を確認していません.単一の線形代数演算。

于 2011-04-07T21:33:51.790 に答える