График поверхности из изображения с пороговым значением

Aug 19 2020

Я хочу создать график поверхности из двумерного массива, в котором хранятся z-значения (аналогично изображению, где указаны значения пикселей).

Мои данные представляют собой массив 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

Один из способов подавить отображение нулей на вашем поверхностном графике - это заменить нули (или все значения, которые вы не хотите отображать) в вашем Z-массиве на такие nans:

Z[Z==0]=np.nan

Это должно дать вам желаемый сюжет.