[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