[vtkusers] Volume files

Karl Garsha garsha at itg.uiuc.edu
Thu Nov 27 21:30:56 EST 2003


The vtk.vtkTIFFReader is going to give you trouble with 8-bit tiff 
images on some platforms.  The TIFF reader really expects an RGB 
image--on a Macintosh an 8-bit tiff will be converted to RGB, on 
Windows, it will fail.  You'll have to use vtk.vtkImageReader 
instead--see the note I've appended below. An 8-bit greyscale or color 
indexed tiff has data type unsigned char, and 1 scalar. You should be 
able to load image sequences to a volumetric dataset with 
vtkImageReader. Good luck.
Regards,
Karl G.

Greetings,
It looks like I was able to answer my own question with a little digging 
around.  For those that may encounter the challenge of dealing with 
8-bit tiffs in the future, here is how I was able to put together a 
solution that works in WinXP as well as OSX (and probably Linux, Solaris 
etc...):
    The key is to get away from vtkTIFFReader for actually opening the 
files--it is still handy to find out the dimensions of the dataset using 
vtkTIFFReader.  My example is in Python(2.3).
#************************************
import os #just some preliminary stuff
import vtk
os.chdir('/Workspace/Shared')
#************************************
RdrTiff=vtk.vtkTIFFReader() #vtkTIFFReader can be useful for extracting 
some info from the*.tif file
RdrTiff.SetFileName('test5.tif')
RdrTiff.Update()
DataExt=RdrTiff.GetDataExtent() #Creates a list with data extents 
(x0,x1,y0,y1,z0,z1)
#************************************
RdrLowLvl=vtk.vtkImageReader() #Use vtkImageReader rather than vtkTIFFReader
RdrLowLvl.SetDataExtent(DataExt) #We can use the data extent derived above
RdrLowLvl.SetDataScalarTypeToUnsignedChar() #this is the key to 8-bit 
scalars
RdrLowLvl.SetFileName('test5.tif')
RdrLowLvl.Update()
#************************************
BW_LUT=vtk.vtkLookupTable() #We must use a lookup table to map the 
scalar values to HSVA colors for display
BW_LUT.SetTableRange(0,255) #Sets range of values for our 8-bit unsigned 
char scalars
BW_LUT.SetSaturationRange(0,0) #Sets saturation range between 0 and 1 (0 
for greyscale)
BW_LUT.SetHueRange(0,0) #Sets hue between 0 and 1 (0 for black and white)
BW_LUT.SetValueRange(0,1) #sets value range between 0 and 1--we use 
whole range for greyscale here
BW_LUT.Build() #Don't forget to build the LUT
#************************************
LUT_Mapper=vtk.vtkImageMapToColors() #Now we have to map the LUT to the data
LUT_Mapper.SetInput(RdrLowLvl.GetOutput()) #Gets output from image 
reader for mapping of scalars
LUT_Mapper.SetLookupTable(BW_LUT) #Sets the lookup table we wish to use
LUT_Mapper.Update() #Update for good measure--probably not nessacary
#************************************
BW_Viewer=vtk.vtkImageViewer() #We can use vtkImageViewer to see if our 
data looks right
BW_Viewer.SetColorLevel(125) #In medical imaging, the color level 
specifies the median value for the LUT ramp--changing this value effects 
contrast in different parts of the histogram
BW_Viewer.SetColorWindow(255) #The color window specifies the width of 
the range of values to be used; the default values for color level and 
color window will not work very well with our data
#************************************
BW_Viewer.SetInput(LUT_Mapper.GetOutput()) #get the LUT mapped data to 
be viewed
BW_Viewer.Render() #Hopefully this renders the image-it worked for me...

Karl Garsha wrote:

 > I've narrowed down the problem to vtkTIFFReader.  On Windows the 
scalar range for the image data right out of the Reader is (0.0,0.0), on 
the Mac the scalar range comes out of the Reader as (0.0,252.0).  Any 
workaround ideas are appreciated.  Thanks.
 > -Karl
 >
 > Karl Garsha wrote:
 >
 >> Greetings,
 >> I'm experiencing anomolous behavior when trying to read 8-bit 
greyscale images on Windows with the Python wrappers.  The code I'm 
using follows:
 >>
 >> Reader=vtk.vtkTIFFReader()
 >> Reader.SetFileName('test.tif')
 >> Reader.Update()
 >> LUM=vtk.vtkImageLuminance()
 >> LUM.SetInput(Reader.GetOutput())
 >> LUM.Update()
 >> ImageData1=LUM.GetOutput()
 >> ImageData1.GetNumberOfScalarComponents()
 >>
 >> #***Result on WinXP
 >> 1
 >> #***Result on OSX
 >> 1
 >>
 >> ImageData1.GetScalarRange()
 >>
 >> #***Result on WinXP
 >> (0.0,0.0)
 >> #***Result on OSX
 >> (2.0, 251.0)  # This is the answer I expect
 >>
 >> Does anyone have some ideas about how I can go about reading 8-bit 
B&W or color indexed images in a cross platform manner?  I'm running 
Python2.3, wxWindows and VTK 4.2 on both machines (although I was lazy 
and just downloaded the Enthought Edition of SciPy 2.3 for Windows--my 
mac has everything up to date from CVS).  Is vtkImageLuminance or 
vtkTIFFReader known to behave differently on Windows?  vtkTIFFReader 
works fine if the image is converted to RGB greyscale in other software 
before reading, but that is a cumbersome approach.  Thanks in advance 
for any insights.
 >> Best,
 >> Karl
 >>
 >

-- 
Karl Garsha
Light Microscopy Specialist
Imaging Technology Group
Beckman Institute for Advanced Science and Technology
University of Illinois at Urbana-Champaign
405 North Mathews Avenue
Urbana, IL 61801
Office: B650J
Phone: 217.244.6292
Fax: 217.244.6219
Mobile: 217.390.1874
www.itg.uiuc.edu

Amy Henderson wrote:
> Hi Harald,
> 
> VTK has a TIFF reader, so there you do not need to convert your stack of 
> files to another format.  The documentation for vtkTIFFReader can be 
> found online at 
> http://www.vtk.org/doc/nightly/html/classvtkTIFFReader.html.  The 
> quarter.xx files in the Medical1.tcl example are 16-bit image files.
> 
> - Amy
> 
> At 03:07 PM 11/25/2003 +0100, Harald Berger wrote:
> 
>> Hello
>>  
>> i would like to enter 3D stacks of a confocal microscpoe into a vtk script
>> like the medical1.tcl script. the stacks are originally tiff stacks, 
>> but are awalable
>> as e.g. raw files, in 8 bit monochorme. i don t understand the file format
>> used in the medical examlpe (quater.1-93).
>> is there a way to convert stacks to that "volume" file or any other way
>> to enter stacks as volumes into vtk tcl scripts?
>>  
>> thank you
>>  
>> Harald Berger
>> ZAG
>> Univ. f. Bodenkultur Wien
>> Muthgasse 18
>> 1190 Wien
>> Austria




More information about the vtkusers mailing list