Tracé de surface à partir d'une image avec valeur de seuil
Je souhaite créer un tracé de surface à partir d'un tableau à deux dimensions, où les valeurs z sont stockées (similaire à une image où les valeurs de pixel sont données).
Mes données sont un tableau 512x512 comme:
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.]])
Les valeurs d'intérêt sont dans la partie centrale de l'image.
Image où seule la région circulaire centrale doit être tracée en tant que tracé de surface
J'ai fait le tracé de surface avec:
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()
Le résultat est:
Image résultante sans masquage ni seuillage
En dehors d'un mauvais style, je veux seulement tracer la région centrale circulaire et ne pas tracer la région carrée extérieure où toutes les valeurs sont nulles.
Comment puis-je donner un seuil ou un masque aux valeurs ? Ou y a-t-il une bien meilleure approche? J'apprécierais vraiment un exemple puisque je suis assez nouveau pour python/numpy ect.
Merci beaucoup!
Réponses
Une façon de supprimer le traçage des zéros dans votre tracé de surface consiste à remplacer les zéros (ou toutes les valeurs que vous ne voulez pas tracer) dans votre Z-Array par des nan comme ceci :
Z[Z==0]=np.nan
Cela devrait vous donner l'intrigue souhaitée.