しきい値を使用した画像からの表面プロット

Aug 19 2020

z値が格納されている2次元配列から表面プロットを作成したいと思います(ピクセル値が指定されている画像と同様)。

私のデータは次のような512x512の配列です。

Z
Out[85]: 
array([[0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]])

関心のある値は、画像の中央部分にあります。

中央の円形領域のみが表面プロットとしてプロットされる画像

私は次のように表面プロットを行いました:

X = np.arange(1, 513)
Y = np.arange(1, 513)
X, Y = np.meshgrid(X, Y)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, vmin=0.01)
plt.show()

結果は次のとおりです。

マスキングやしきい値処理なしの結果の画像

悪いスタイルは別として、すべての値がゼロである外側の正方形の領域ではなく、円形の中央領域のみをプロットしたいと思います。

値にしきい値またはマスクを与えるにはどうすればよいですか?それとももっと良いアプローチがありますか?私はpython / numpy ectにかなり慣れていないので、例をいただければ幸いです。

どうもありがとうございました!

回答

2 P.Leibner Aug 19 2020 at 15:11

表面プロットでのゼロのプロットを抑制する1つの方法は、Z配列のゼロ(またはプロットしたくないすべての値)を次のようなnanに置き換えることです。

Z[Z==0]=np.nan

これにより、目的のプロットが得られます。