Hi paraview list
Based on this blog post: http://www.kitware.com/blog/home/post/534, I am
trying to make a Python plugin (source) that reads a stack of unsigned
short TIFFs (uint16) and outputs 3D unsigned short imagedata in Paraview.
Assigning the geometry to the imagedata works fine (see def
RequestInformation). My problem is that the values of the voxels in the
imagedata is not assigned correct (see def RequestData). According to
Paraview information tab the data type is unsigned short, but when reading
in a known TIFF (8x8 with uint16 values 1..64) the values of the imagedata
are not correct.
I suspect the last line "array.SetValue(offset+v, vals.GetValue(v))" is the
problem. Does the vals.GetValue(v) get casted into a Python type int before
stored in the array?
When I print vals.GetValue(v) to a textfile, I can see that I read the
correct values from the TIFF.
Can anybody see what the problem is?
Cheers,
Allan
def RequestData():
import os
from paraview import vtk
from vtk import vtkTIFFReader # this reader does not exist in paraview??
filepath = Filepath # path to file
filestr = Filename # string containing filename and %d
first = First # first image, e.g. 0 or 1
last = Last # last image
N = last-first+1 # number of images
# Get a vtkImageData object for the output
pdo = self.GetOutput()
print 'read'
# set up reader
reader = vtkTIFFReader()
filename = filestr % first
reader.SetFileName(os.path.join(filepath, filename))
reader.Update()
# get tiff info
ext = reader.GetDataExtent()
# set up output volume
pdo.SetExtent(0, ext[1], 0, ext[3], 0, N-1)
#pdo.SetDimensions(ext[1]+1,ext[3]+1,N)
pdo.SetOrigin(0,0,0)
pdo.SetSpacing(1,1,1)
pdo.AllocateScalars(vtk.VTK_UNSIGNED_SHORT,1)
# temporary array for voxel values
array = vtk.vtkUnsignedShortArray()
array.SetName('Voxels')
array.SetNumberOfComponents(1)
#array.SetNumberOfTuples(pdo.GetNumberOfPoints())
array.SetNumberOfValues(pdo.GetNumberOfPoints())
pdo.GetPointData().AddArray(array)
# fill array with tiffs
for i in range(N):
filename = filestr % (first+i)
print filename
reader.SetFileName(os.path.join(filepath, filename))
reader.Update()
image = reader.GetOutput()
vals = image.GetPointData().GetArray('Tiff Scalars')
offset = i*N
for v in range((ext[0]+1)*(ext[1]+1)):
print vals.GetValue(v)
array.SetValue(offset+v, vals.GetValue(v))
def RequestInformation():
import os
from paraview import vtk, util
from vtk import vtkTIFFReader
filepath = Filepath # path to file
filestr = Filename # string containing filename and %d
first = First # first image, e.g. 0 or 1
last = Last # last image
# set up reader
reader = vtkTIFFReader()
filename = filestr % first
reader.SetFileName(os.path.join(filepath, filename))
reader.Update()
# get tiff info
ext = reader.GetDataExtent()
# update extent information
util.SetOutputWholeExtent(self, [0, ext[1], 0, ext[3], 0, last-first])
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the ParaView Wiki at:
http://paraview.org/Wiki/ParaView
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview