[vtk-developers] VOI extraction techniques

Valeria Gallo g_luigi at fastwebnet.it
Thu Mar 29 09:04:21 EDT 2007


Hi, 

I am developing a tool to extract VOI (Volume-Of-Interest) from volumes
(vtkImageData) directly in the 3D scene with VTK (5.1.0 version).

I'm using vtkRenderedAreaPicker to extract a frustum (a parallelepiped of
six faces) from the volume.

 

If the six frustum faces are orthogonal to the axes I can directly crop the
volume, simply setting the mapper:

 

vtkVolumeRayCastMapper *volumeRaycastMapper = vtkVolumeRayCastMapper::New();

volumeRaycastMapper->SetCroppingRegionPlanes(bounds);

 

where bounds are the (xmin,xmax,ymin,ymax,zmin,zmax) values of the
ClipPoints of the picker.

 

I have problems when the frustum faces are not orthogonal to the axes. In
this case I can use the vtkExtractSelectedFrustum class:

 

vtkExtractSelectedFrustum *extractor = vtkExtractSelectedFrustum::New();

extractor->SetInput(areaPicker->GetDataSet()); // areaPicker is of type
vtkRenderedAreaPicker

extractor->ExactTestOn();

extractor->SetFrustum(areaPicker->GetFrustum());

 

One way is to set:

 

extractor->PassThroughOff();

 

So I have a vtkUnstructuredGrid dataset in extractor->GetOutput() that
contains only the cells and points of the input that are inside the frustum.

I can render them with a vtkUnstructuredGridVolumeRayCastMapper (but I have
to apply a vtkDataSetTriangleFilter before).

In this way after the rendering process (very very long computation time),
to manipulate quickly the volume, I have to convert the dataset in a
vtkImageData using the vtkWindowToImageFilter.

This procedure appears to be too heavy, I'm sure there is another way to do
it. a way I'm still searching for.

 

I've tried also with the vtkGaussianSplatter and vtkShepardMethod to convert
the UnstructuredGrid dataset in a ImageData one, but in using them I loose
the details of the volume, whilst I want simply extract a region of the
original volume (preserving its topology and geometry)..

Any idea?

 

A second way to do it is to set:

 

extractor->PassThroughOn();

 

So in extractor->GetOutput() I have a vtkImageData dataset that is either a
shallow copy of the input dataset with two new "vtkInsidedness" attribute
arrays.

But I don't know actually how to set up the vtkVolumeRayCastMapper to render
only the cell and the points that are inside the frustum.

 

I hope this mail could help someone and I hope someone could help me to
continue my work.

 

Thanks

Valeria

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20070329/48d85580/attachment.html>


More information about the vtk-developers mailing list