[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