임계 값이있는 이미지의 표면 플롯

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()

결과는 다음과 같습니다.

마스킹 또는 임계 값이없는 결과 이미지

나쁜 스타일을 제외하고는 원형 중앙 영역 만 플로팅하고 모든 값이 0 인 외부 정사각형 영역은 플로팅하지 않습니다.

값에 임계 값이나 마스크를 부여하려면 어떻게해야합니까? 아니면 훨씬 더 나은 접근 방식이 있습니까? 나는 파이썬 / numpy 요법에 꽤 익숙하기 때문에 예제를 정말로 고맙게 생각합니다.

대단히 감사합니다!

답변

2 P.Leibner Aug 19 2020 at 15:11

표면도에서 0의 플로팅을 억제하는 한 가지 방법은 Z-Array의 0 (또는 플로팅하지 않을 모든 값)을 다음과 같이 nan으로 바꾸는 것입니다.

Z[Z==0]=np.nan

그러면 원하는 플롯이 제공됩니다.