[vtkusers] isosurface of labeled blobs: all contours just red

Bill Lorensen bill.lorensen at gmail.com
Sat Aug 8 12:41:35 EDT 2009


If your data is labelled with integer values and not continuous
values, you should use discrete marching cubes. Discrete marching
cubes will label each cell (not point) with the label value. You must
tell the mapper to SetScalarModeToUseCellData().

Bill

On Sat, Aug 8, 2009 at 4:57 AM, <lynx.abraxas at freenet.de> wrote:
> Hello!
>
>
> I'm new to VTK. I want to generate a surface of labeld blobs (3D-TIF from ITK)
> that I'd like to import into blender but I'm stuck in VTK:
> I used http://www.evl.uic.edu/aspale/cs526/final/3-5-2-0.htm as  a  start  and
> modified                   it                   according                   to
> http://public.kitware.com/pipermail/vtkusers/2004-November/077288.html.    But
> Tracy's problem is now also my problem: How do I get the surfaces of my labels
> colored differently?
> From the docs I'd understand that GenerateValues(10,1,11) should  generate  10
> sufaces of my first 10 labels but I always see all 955 labels in red.
> When only dots are shown during rotation I can see some different colors.
> If I use GenerateValues(10 ,1,955) I can see multiple colored layers in the blobs that
> are cut through by the border.
>
> So how do I get my blobs colored differently with just one layer?
> What is GenerateValues() doing exactly?
>
> Many thanks for any hints or help
> Lynx
>
>
> import Tkinter
>
> import vtk
>
> from vtk.tk.vtkTkRenderWindowInteractor import vtkTkRenderWindowInteractor
>
>
>
> # Prepare to read the file
>
> readerVolume = vtk.vtkImageReader()
> #readerVolume = vtk.vtkTIFFReader()
> readerVolume.SetDataScalarType( vtk.VTK_UNSIGNED_SHORT )
> readerVolume.SetFileDimensionality( 3 )
> readerVolume.SetDataExtent ( 0,517, 0,228, 0,392)
> readerVolume.SetDataSpacing( 1,1,1 )
> readerVolume.SetNumberOfScalarComponents( 1 )
> readerVolume.SetDataByteOrderToBigEndian()
> #readerVolume.SetFileName( "./Female.raw" )
> readerVolume.SetFileName( "../stack_ws01.raw" )
>
>
>
> # Extract the region of interest
>
> voiHead = vtk.vtkExtractVOI()
>
> voiHead.SetInput( readerVolume.GetOutput() )
>
> #voiHead.SetVOI( 0,255, 60,255, 0,100 )
> voiHead.SetVOI(0,517, 0,228, 0,392)
> #voiHead.SetSampleRate(1,1,1)
> voiHead.SetSampleRate(3,3,3)
> voiHead.Update()#necessary for GetScalarRange()
> srange= voiHead.GetOutput().GetScalarRange()#needs Update() before!
> print "Range", srange
>
> # Generate an isosurface
>
> # UNCOMMENT THE FOLLOWING LINE FOR CONTOUR FILTER
>
> #contourBoneHead = vtk.vtkContourFilter()
> contourBoneHead = vtk.vtkMarchingCubes()
>
> contourBoneHead.SetInput( voiHead.GetOutput() )
>
> contourBoneHead.ComputeNormalsOn()
> #contourBoneHead.GenerateValues(10,1,11)
> #contourBoneHead.GenerateValues(955,1,955)
> contourBoneHead.GenerateValues(10 ,1,955)
> #contourBoneHead.SetValue( 0, 100. )  #second value has no effect!?!
> print "# Values:", contourBoneHead.GetNumberOfContours()
> contourBoneHead.Update() #needed for GetNumberOfPolys() !!!
> print "Creating ", contourBoneHead.GetOutput().GetNumberOfPolys(), " polygons."
>
> # define lookuptable
> lut = vtk.vtkLookupTable()
> lut.SetHueRange (0.0,0.667)
> lut.SetNumberOfColors (256)
> lut.Build()
> for i in range(0, 53):
>    lut.SetTableValue(i, (i+1)/255.0, (i+2)/255.0, (i+3)/255.0, 1.0)
>
> # Take the isosurface data and create geometry
>
> geoBoneMapper = vtk.vtkPolyDataMapper()
>
> geoBoneMapper.SetInput( contourBoneHead.GetOutput() )
>
> #geoBoneMapper.ScalarVisibilityOff()#show no colour
> geoBoneMapper.ScalarVisibilityOn()#show colour
> geoBoneMapper.SetScalarRange(srange)
> #geoBoneMapper.SetLookupTable(lut)
>
>
> # Take the isosurface data and create geometry
>
> actorBone = vtk.vtkLODActor()
>
> actorBone.SetNumberOfCloudPoints( 100000 )
> actorBone.SetMapper( geoBoneMapper )
> #actorBone.GetProperty().SetColor( 1, 1, 1 ) #for ScalarVisibilityOff()
>
>
>
> # Create renderer
>
> ren = vtk.vtkRenderer()
> ren.SetBackground( 0.329412, 0.34902, 0.427451 ) #Paraview blue
> ren.AddActor(actorBone)
>
>
>
> # Create a window for the renderer of size 250x250
>
> renWin = vtk.vtkRenderWindow()
>
> renWin.AddRenderer(ren)
> renWin.SetSize(250, 250)
>
>
>
> # Set an user interface interactor for the render window
>
> iren = vtk.vtkRenderWindowInteractor()
>
> iren.SetRenderWindow(renWin)
>
>
>
> # Start the initialization and rendering
>
> iren.Initialize()
> renWin.Render()
> iren.Start()
>
> #   vtkPolyDataWriter *volwriter1 = vtkPolyDataWriter::New();
> #    volwriter1->SetInput( iso->GetOutput() );
> #   volwriter1->SetFileName("braintstem6740.vtk");
> #   volwriter1->Write();
>
>
>
>
> _______________________________________________
> 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 VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>



More information about the vtkusers mailing list