np.gradientを用いて地形の傾斜を計算したい
現在,地形の傾斜のデータをPythonを用いて取得しようとしています.
計算の高速化のため,for文を使用せず,np.gradientを用いて,
一括で傾斜する計算する方法を考えているのですが,
それがわからないため質問させていただきました.
実現したいこと
以下の傾斜を求める手法をnp.gradientで実現したいと考えています.
これはppにおける傾斜を該当グリッドの周囲8方向から取得するものです.
この方法を実現するために,以下のようなfor文を入れたコードを作成しましたが,
for文を用いずに傾斜を求める手法をご教授頂ければと思います.
該当のソースコード
Python
1#モジュールのインポート 2import numpy as np 3import math 4 5#標高データの準備 6current_dem = np.array([[1,2,3,4], [5,7,9,10], [8,15,12,9], [8,5,3,1]]) 7 8#傾斜の格納要配列の準備 9value_slope = np.zeros((4, 4)) 10value_slope[:,:] = np.nan 11 12#標高(グリッドデータ)のx,y方向の間隔 13DX = 1 14DY = 1 15 16#傾斜の計算 17for i in range(4): 18 for j in range(4): 19 if i != 0 and j != 0 and i != 3 and j != 3: 20 21 pp = current_dem[i][j] 22 23 d1 = current_dem[i+1][j-1] 24 25 d2 = current_dem[i+1][j] 26 27 d3 = current_dem[i+1][j+1] 28 29 d4 = current_dem[i][j-1] 30 31 d6 = current_dem[i][j+1] 32 33 d7 = current_dem[i-1][j-1] 34 35 d8 = current_dem[i-1][j] 36 37 d9 = current_dem[i-1][j+1] 38 39 xx = (d1+d4+d7-(d3+d6+d9))/(6*DX) 40 yy = (d7+d8+d9-(d1+d2+d3))/(6*DY) 41 42 value_slope[i, j] = math.sqrt(xx*xx + yy*yy) 43 44print(value_slope) 45#[[ nan nan nan nan] 46 #[ nan 5.11262055 4.50308536 nan] 47 #[ nan 0.97182532 3.06412939 nan] 48 #[ nan nan nan nan]]
参考
https://algorithm.joho.info/image-processing/prewitt-filter/
https://algorithm.joho.info/programming/python/opencv-prewitt-filter-py/

回答2件
あなたの回答
tips
プレビュー