簡體   English   中英

在給定大小為 (64,64,64) 的 numpy 數組的情況下顯示 3D 圖像,其中每個元素代表 Python 中 3d 空間中的強度 (0-1)(灰度)

[英]Display 3D image given a numpy array of size (64,64,64) where each element represents the intensity(0-1)(grayscale) in 3d space in Python

我正在嘗試使用 GAN 進行 3D 重建項目並嘗試檢查我的輸出 #which 是一個 64,64,64 numpy 數組。 但是我找不到顯示 numpy 數組的方法。

試過類似的東西

array = np.random.rand(64, 64,64)


plt.imshow(array)
plt.show()

輸出

Invalid shape (10, 10, 10) for image data

3d 圖是用“3d”投影完成的。 您有多種選擇,但我認為沒有一種是完美的示例。

您可以繪制 3d 散點圖。 或體素。

但在所有情況下,你都會遇到一個非常實際的問題:你看不到你的眼睛和物體之間是否有東西

import matplotlib.pyplot as plt
import numpy as np

N=20
array = np.random.rand(N, N, N)

x=np.linspace(0,N-1,N)
y=np.linspace(0,N-1,N)
z=np.linspace(0,N-1,N)
gridx, gridy, gridz=np.meshgrid(x,y,z)
ax = plt.figure().add_subplot(projection='3d')
ax.scatter(gridx, gridy, gridz, c=array)
plt.show()

在此處輸入圖像描述

請注意,N=20 時它非常混亂,因此 64 是不可能的(加上即使是一台好的計算機也非常重)

無論如何,隨機體素也幾乎沒有任何視覺意義。

另一種選擇是體素。 但是體素是布爾數組,對於要繪制的體素包含 False,對於其他體素包含 true。 您可以添加一個可選的顏色數組

import matplotlib.pyplot as plt
import numpy as np

N=20
array = np.random.rand(N, N, N)

ax = plt.figure().add_subplot(projection='3d')
# Just an array of r,g,b,a colors. With arbitrary choices on my behalf
colors=np.zeros((N,N,N,4))
colors[:,:,:,0] = 1-array
colors[:,:,:,1] = 2-np.clip(array, 0.5, 1)*2
colors[:,:,:,3] = array
ax.voxels(array>0.25, facecolors=colors)
plt.show()

在此處輸入圖像描述

如果我用更簡單的形狀替換純隨機,例如

import matplotlib.pyplot as plt
import numpy as np

N=20
x=np.linspace(0,N-1,N)
y=np.linspace(0,N-1,N)
z=np.linspace(0,N-1,N)
x, y, z=np.meshgrid(x,y,z)
array=np.sqrt((x-10)**2+(y-10)**2+(z-10)**2)

ax = plt.figure().add_subplot(projection='3d')
# Colors, half red, half yellow, along x-axis
# half opaque, half semi-transparent,m along y-axis
colors=np.zeros((N,N,N,4))
colors[:,:,:,0] = 1
colors[:10,:,:,1] = 1
colors[:,:10,:,3]=1
colors[:,10:,:,3]=0.5
# Sphere
ax.voxels(array<8, facecolors=colors)
plt.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM