Plot Permukaan dari Gambar dengan nilai ambang batas
Saya ingin membuat plot permukaan dari array dua dimensi, di mana nilai-z disimpan (mirip dengan gambar di mana nilai piksel diberikan).
Data saya berupa array 512x512 seperti:
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.]])
Nilai-nilai yang menarik ada di bagian tengah gambar.
Gambar di mana hanya wilayah lingkaran tengah yang akan diplot sebagai plot permukaan
Saya melakukan plot permukaan dengan:
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()
Hasilnya adalah:
Menghasilkan Gambar tanpa masking atau thresholding
Terlepas dari gaya yang buruk, saya hanya ingin memplot wilayah tengah melingkar dan tidak memplot wilayah bujur sangkar luar di mana semua nilai adalah nol.
Bagaimana saya bisa memberikan ambang atau penutup ke nilai? Atau apakah ada pendekatan yang jauh lebih baik? Saya akan sangat menghargai contoh karena saya cukup baru mengenal python / numpy ect.
Terima kasih banyak!
Jawaban
Salah satu cara untuk menekan plotting nol di plot permukaan Anda, adalah dengan mengganti nol (atau semua nilai yang tidak ingin Anda plot) di Z-Array Anda dengan nans seperti ini:
Z[Z==0]=np.nan
Ini akan memberi Anda plot yang Anda inginkan.