[vtkusers] Problem with volume rendering and 2 independent components

Jef Driesen jefdriesen at hotmail.com
Wed Jun 22 03:17:31 EDT 2005


I have a volume dataset (64x64x30) with 2 independent components. The
first component is the average value and the second the standard
deviation of a dataset, both scaled to unsigned shorts. I want to render
a volume from this dataset. The first component should be represented by
the 'value' in the HSV color space and the second component by the
'hue'.  I have added my code (in java) below. But the result looks like
garbage. When I render each component separatly (using the same transfer
functions) everything looks like it should be. Loading the dataset in
volview 2.0 produces the expected result. What am I doing wrong?

   public static void render_volume_uint16() {
       double[] range = {0.0, 255.0 * 255.0};

       // Create the image reader and
       // extract the volume of interest (VOI)
       vtkImageReader reader = new vtkImageReader();
           reader.SetFileName("volume-uint16.img");
           reader.SetDataExtent(0,63,0,63,0,29);
           reader.SetFileDimensionality(3);
           reader.SetDataSpacing(3,3,3);
           reader.SetDataByteOrderToLittleEndian();
           reader.SetDataScalarTypeToUnsignedShort();
           reader.SetNumberOfScalarComponents(2);

       // Transfer functions
       vtkPiecewiseFunction transfer_linear = new vtkPiecewiseFunction();
           transfer_linear.AddPoint(range[0], 0.0); // transparent
           transfer_linear.AddPoint(range[1], 1.0); // opaque

       vtkColorTransferFunction transfer_grayscale = new
vtkColorTransferFunction();
           transfer_grayscale.AddHSVPoint(range[0], 0.0, 0.0, 0.0); //
white
           transfer_grayscale.AddHSVPoint(range[1], 0.0, 0.0, 1.0); //
black

       vtkColorTransferFunction transfer_hue = new
vtkColorTransferFunction();
           transfer_hue.AddHSVPoint(range[0], 0.66, 1.0, 1.0); // blue
           transfer_hue.AddHSVPoint(0.5 * (range[1] - range[0]), 0.33,
1.0, 1.0); // green
           transfer_hue.AddHSVPoint(range[1], 0.00, 1.0, 1.0); // red

       // Maximum intensity projection ray caster
       vtkVolumeRayCastCompositeFunction composite = new
vtkVolumeRayCastCompositeFunction();
       vtkVolumeRayCastMIPFunction mip = new vtkVolumeRayCastMIPFunction();
       vtkVolumeRayCastMapper mapper = new vtkVolumeRayCastMapper();
           mapper.SetInput(reader.GetOutput());
           mapper.SetVolumeRayCastFunction(mip);

       // Volume properties
       vtkVolumeProperty prop = new vtkVolumeProperty();
           prop.IndependentComponentsOn();
           prop.SetInterpolationTypeToLinear();
           prop.SetScalarOpacity(0,transfer_linear);
           prop.SetColor(0,transfer_grayscale);
           prop.SetComponentWeight(0,1.0);
           prop.SetScalarOpacity(1,transfer_linear);
           prop.SetColor(1,transfer_hue);
           prop.SetComponentWeight(1,1.0);

       // Volume
       vtkVolume volume = new vtkVolume();
           volume.SetMapper(mapper);
           volume.SetProperty(prop);

       // Renderer
       vtkRenderer ren = new vtkRenderer();
           ren.AddVolume(volume);
           //ren.SetBackground(1,1,1);

       // Render window
       vtkRenderWindow win = new vtkRenderWindow();
           win.AddRenderer(ren);

       // Render window interactor
       vtkRenderWindowInteractor iren = new vtkRenderWindowInteractor();
           iren.SetRenderWindow(win);
           iren.Initialize();
           iren.Start();
   }

_________________________________________________________________
Free blogging with MSN Spaces  http://spaces.msn.com/?mkt=nl-be




More information about the vtkusers mailing list