2016-05-23 24 views
2

Ich versuche, ein 3D-Array durch Mayavi in ​​Python zu visualisieren. Ich möchte einfach ein strukturiertes 3D-Voxelraster erstellen, in dem ich einige vorgegebene Voxel-Raumfüllpunkte zeigen kann. Ich glaube nicht, dass ich willGrundlegende 3D Voxel Gitter in Mayavi

Das einzige Beispiel, das ich finden kann, dass ich denke, ist relativ relevant ist this MRI example. Ich kann den folgenden Code verwenden, um ein wenig praktikabel Beispiel zu bekommen:

import numpy as np 
from mayavi import mlab 

data = (100, 100, 100) 
data = np.zeros(data) 
data[0:50, 50:70, 0:50] = 1 
data[0:50, 0:20, 0:50] = 1 

src = mlab.pipeline.scalar_field(data) 
outer = mlab.pipeline.iso_surface(src) 

mlab.show() 

Dies ist in der Lage, die folgenden Bilder zu erzeugen: enter image description here enter image description here Wie Sie sehen können, sind nicht alle Seiten der Boxen erzeugt werden, obwohl Diese Punkte haben denselben Wert wie die Seiten der Boxen, die generiert werden.

Gibt es eine Möglichkeit, jeden einzelnen Punkt im Array numpy mit dem Wert 1 zu visualisieren? Mir geht es gut, wenn es keine Iso-Oberflächen-Visualisierung gibt - in der Tat würde ich lieber eine Minecraft-ähnliche Block-Voxel-Visualisierung bevorzugen.

Antwort

5

Hallo

import mayavi.mlab 
import numpy 

data = (100, 100, 100) 
data = numpy.zeros(data) 
data[0:50, 50:70, 0:50] = 1 
data[0:50, 0:20, 0:50] = 1 

xx, yy, zz = numpy.where(data == 1) 

mayavi.mlab.points3d(xx, yy, zz, 
        mode="cube", 
        color=(0, 1, 0), 
        scale_factor=1) 

mayavi.mlab.show() 

enter image description here

+0

Dank für die Antwort. Gibt es eine Möglichkeit, die Voxel individuell einzufärben? – scicalculator

+0

Soweit ich weiß, können Sie versuchen, eine benutzerdefinierte Farbkarte zu verwenden. Oder Sie können weiterhin jede Voxelgruppe iterativ mit einer anderen Farbe darstellen. – Geodor

+0

Schön, aber sehr langsam mit zu interagieren. – martinako