init
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
"""
|
||||
vtkImageExportToArray - a NumPy front-end to vtkImageExport
|
||||
|
||||
This class converts a VTK image to a numpy array. The output
|
||||
array will always have 3 dimensions (or 4, if the image had
|
||||
multiple scalar components).
|
||||
|
||||
To use this class, you must have numpy installed (http://numpy.scipy.org)
|
||||
|
||||
Methods
|
||||
|
||||
SetInputConnection(vtkAlgorithmOutput) -- connect to VTK image pipeline
|
||||
SetInputData(vtkImageData) -- set an vtkImageData to export
|
||||
GetArray() -- execute pipeline and return a numpy array
|
||||
|
||||
Methods from vtkImageExport
|
||||
|
||||
GetDataExtent()
|
||||
GetDataSpacing()
|
||||
GetDataOrigin()
|
||||
"""
|
||||
|
||||
import numpy
|
||||
import numpy.core.umath as umath
|
||||
|
||||
from vtkmodules.vtkIOImage import vtkImageExport
|
||||
from vtkmodules.vtkCommonExecutionModel import vtkStreamingDemandDrivenPipeline
|
||||
from vtkmodules.vtkCommonCore import VTK_SIGNED_CHAR
|
||||
from vtkmodules.vtkCommonCore import VTK_UNSIGNED_CHAR
|
||||
from vtkmodules.vtkCommonCore import VTK_SHORT
|
||||
from vtkmodules.vtkCommonCore import VTK_UNSIGNED_SHORT
|
||||
from vtkmodules.vtkCommonCore import VTK_INT
|
||||
from vtkmodules.vtkCommonCore import VTK_UNSIGNED_INT
|
||||
from vtkmodules.vtkCommonCore import VTK_LONG
|
||||
from vtkmodules.vtkCommonCore import VTK_UNSIGNED_LONG
|
||||
from vtkmodules.vtkCommonCore import VTK_FLOAT
|
||||
from vtkmodules.vtkCommonCore import VTK_DOUBLE
|
||||
|
||||
|
||||
class vtkImageExportToArray:
|
||||
def __init__(self):
|
||||
self.__export = vtkImageExport()
|
||||
self.__ConvertUnsignedShortToInt = False
|
||||
|
||||
# type dictionary
|
||||
|
||||
__typeDict = { VTK_SIGNED_CHAR:'b',
|
||||
VTK_UNSIGNED_CHAR:'B',
|
||||
VTK_SHORT:'h',
|
||||
VTK_UNSIGNED_SHORT:'H',
|
||||
VTK_INT:'i',
|
||||
VTK_UNSIGNED_INT:'I',
|
||||
VTK_FLOAT:'f',
|
||||
VTK_DOUBLE:'d'}
|
||||
|
||||
__sizeDict = { VTK_SIGNED_CHAR:1,
|
||||
VTK_UNSIGNED_CHAR:1,
|
||||
VTK_SHORT:2,
|
||||
VTK_UNSIGNED_SHORT:2,
|
||||
VTK_INT:4,
|
||||
VTK_UNSIGNED_INT:4,
|
||||
VTK_FLOAT:4,
|
||||
VTK_DOUBLE:8 }
|
||||
|
||||
# convert unsigned shorts to ints, to avoid sign problems
|
||||
def SetConvertUnsignedShortToInt(self,yesno):
|
||||
self.__ConvertUnsignedShortToInt = yesno
|
||||
|
||||
def GetConvertUnsignedShortToInt(self):
|
||||
return self.__ConvertUnsignedShortToInt
|
||||
|
||||
def ConvertUnsignedShortToIntOn(self):
|
||||
self.__ConvertUnsignedShortToInt = True
|
||||
|
||||
def ConvertUnsignedShortToIntOff(self):
|
||||
self.__ConvertUnsignedShortToInt = False
|
||||
|
||||
# set the input
|
||||
def SetInputConnection(self,input):
|
||||
return self.__export.SetInputConnection(input)
|
||||
|
||||
def SetInputData(self,input):
|
||||
return self.__export.SetInputData(input)
|
||||
|
||||
def GetInput(self):
|
||||
return self.__export.GetInput()
|
||||
|
||||
def GetArray(self):
|
||||
self.__export.Update()
|
||||
input = self.__export.GetInput()
|
||||
extent = input.GetExtent()
|
||||
type = input.GetScalarType()
|
||||
numComponents = input.GetNumberOfScalarComponents()
|
||||
dim = (extent[5]-extent[4]+1,
|
||||
extent[3]-extent[2]+1,
|
||||
extent[1]-extent[0]+1)
|
||||
if (numComponents > 1):
|
||||
dim = dim + (numComponents,)
|
||||
|
||||
imArray = numpy.zeros(dim, self.__typeDict[type])
|
||||
self.__export.Export(imArray)
|
||||
|
||||
# convert unsigned short to int to avoid sign issues
|
||||
if (type == VTK_UNSIGNED_SHORT and self.__ConvertUnsignedShortToInt):
|
||||
imArray = umath.bitwise_and(imArray.astype('i'),0xffff)
|
||||
|
||||
return imArray
|
||||
|
||||
def GetDataExtent(self):
|
||||
return self.__export.GetDataExtent()
|
||||
|
||||
def GetDataSpacing(self):
|
||||
return self.__export.GetDataSpacing()
|
||||
|
||||
def GetDataOrigin(self):
|
||||
return self.__export.GetDataOrigin()
|
||||
Reference in New Issue
Block a user