I have a numpy file that I am trying to import using the updateVolumeFromArray function. The file can load into slicer as a numpy array, but the second I go to update the volume, and display the image (clicking on the volume eye button from the data module), the entire system crashes. I can call the matrix in, and I can perform operations on it such as finding out the unique values, but I cannot display it in slicer? My matrix is a 128X256X256 numpy array with binary values of 0-4.
Can you provide sample code and data set?
So, I import my volume with np.load(filepath)['arr_0']
. I then create a volume node with volumeNode = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLScalarVolumeNode", nodeName)
and update the volume with updateVolumeFromArray
. The second I go to click on the visualize button the system crashes. Here is a link to my file: https://drive.google.com/open?id=1C4RmyRS-4YWwO_c6IhWOGEpV3ImGqVri
The link requires authentication. Please approve the read request or share with a public link.
The problem was that the numpy array in that file had “long long” type. You had to cast it to a type that VTK can handle:
import numpy as np
filepath=r"c:\Users\andra\Downloads\am_output.npz"
volumeNode = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLLabelMapVolumeNode")
voxels=np.load(filepath)['arr_0'].astype(np.int16)
updateVolumeFromArray(volumeNode,voxels)
setSliceViewerLayers(background=volumeNode, fit=True)
I have updated updateVolumeFromArray
to report an error when “long long” array is attempted to be loaded.