[vtkusers] Displaying a 2D image as a volume

Francois Bertel francois.bertel at kitware.com
Wed Feb 27 11:18:00 EST 2008


Maybe vtkImageActor?

J.S.Wijnhout at lumc.nl wrote:
>> Dimension[i] is the number of points along axis i, not the number of cells. >Number of cells along axis i is Dimension[i]-1. If Dimension[i]=1, number >of cells[i]=0, so no thickness.
> 
> Thanks for clearing that up. Do you have an idea of how to display the slice (which has a thickness in reality), without resorting to padding?
> 
> best,
> Jeroen
> 
> J.S.Wijnhout at lumc.nl wrote:
>> Hi,
>>
>> Thanks for the suggestion, that actually worked! I'm not sure what is
>> wrong with my original approach (a bug perhaps?), but padding the image
>> with transparent voxels work. For those of you who have the same
>> problem:
>>
>>     double minValue = _image->GetScalarTypeMax ();
>>     double maxValue = _image->GetScalarTypeMin ();
>>     // This is a custom function to determine the min/max gray values:
>>     DetermineMinMax ( _image, minValue, maxValue );    
>>     vtkImageShiftScale *scaler = vtkImageShiftScale::New ();
>>     scaler->SetInput ( _image );
>>     scaler->SetOutputScalarTypeToUnsignedChar ();
>>
>>     // Map to [1,255], the value 0 is reserved for a transparency hack:
>>     int delta = maxValue - minValue;
>>     scaler->SetShift ( ( delta / 254.0 ) - minValue );
>>     scaler->SetScale ( 254.0 / delta );
>>
>>
>>     vtkImageConstantPad *padder = vtkImageConstantPad::New ();
>>     int extent [ 6 ];
>>     _image->GetExtent ( extent );
>>     extent [ 2 ] = 3;
>>     extent [ 5 ] = 3;
>>     padder->SetOutputWholeExtent ( extent );
>>     padder->SetInput ( scaler->GetOutput () );
>>     padder->SetConstant ( 0.0 );
>>
>>     // Modify the transfer functions such that pixel value 0 (the 
>>     // value the image is padded with in the z-dimension) corresponds to
>> a
>>     // completely transparent voxel and value 1 to pure black:
>>     vtkPiecewiseFunction *opacityTransferFunction =
>> vtkPiecewiseFunction::New ();
>>     opacityTransferFunction->AddPoint ( 0, 0.0 );
>>     opacityTransferFunction->AddPoint ( 0.5, 1.0 );
>>     opacityTransferFunction->AddPoint ( 1, 1.0 );
>>     opacityTransferFunction->AddPoint ( 255, 1.0 );
>>     vtkColorTransferFunction *colorTransferFunction =
>> vtkColorTransferFunction::New ();
>>     colorTransferFunction->AddRGBPoint ( 0, 0.0, 0.0, 0.0 );
>>     colorTransferFunction->AddRGBPoint ( 1, 0.0, 0.0, 0.0 );
>>     colorTransferFunction->AddRGBPoint ( 255, 1.0, 1.0, 1.0 );
>>
>>     vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New ();
>>     volumeProperty->SetColor ( colorTransferFunction );
>>     volumeProperty->SetScalarOpacity ( opacityTransferFunction );
>>
>>     vtkVolumeRayCastCompositeFunction *rayCastFunction =
>> vtkVolumeRayCastCompositeFunction::New ();
>>  
>>     vtkVolumeRayCastMapper *hiResVolumeMapper =
>> vtkVolumeRayCastMapper::New ();
>>     hiResVolumeMapper->SetInput ( padder->GetOutput () );
>>     hiResVolumeMapper->SetVolumeRayCastFunction ( rayCastFunction );
>>
>>     vtkVolume *volume = vtkVolume::New ();
>>     volume->SetProperty ( volumeProperty );
>>     volume->SetMapper ( hiResVolumeMapper );
>>
>>
>> best,
>> Jeroen
>> _______________________________________________
>> This is the private VTK discussion list. 
>> Please keep messages on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>>
> 
> 


-- 
François Bertel, PhD  | Kitware Inc. Suite 204
1 (518) 371 3971 x113 | 28 Corporate Drive
                       | Clifton Park NY 12065, USA



More information about the vtkusers mailing list