[vtkusers] Generating 3D Objects from an unsigned short Array

Markus Fawer markusfawer at swissonline.ch
Thu Nov 18 16:23:00 EST 2004


Hi all,

I have currently two main problems with vtk:

 

1)       I have some segmented OCT pictures (slices) which I should use, to
create a 3-dimensional object of the different values in those pictures.

I tried to use the vtkContourFilter, but this returns an ugly kind of
surface, and not a real 3-dimensional object. I should also have a smoother
representation of the segments. The volume should contain interpolated
values between the slices. I know that Interpolation is possible, when using
widgets, but I couldn't find a method or class to interpolate values
creating 3 dimensional objects. Can anybody help me to find a solution to
solve this problem
(Pipeline), or maybe tell me the best parameters to get a smooth surface
using the code shown below?

            

2)       The second OCT pictures I have are from a different kind of scans.
These scans are made from one starting point (for all pictures) in different
directions. (e.g every 30 degrees). Is there a possibility to construct the
3-dimensional volume of these pictures? Again the representation of the
objects should be smoothed.
The data of the pictures is, as in Problem 1), delivered in an unsigned
short Array, containing all the images.

 

Thanks

 

Markus



Code to Problem 1:

 

vtkUnsignedShortArray *pScalars = vtkUnsignedShortArray::New();

pScalars->SetNumberOfComponents(1);

pScalars->SetArray((unsigned short*)
m_pDataIn->pImageData->pArrImageData[0], nSize, 1);

 

vtkData* m_pImageData = vtkData::New();

m_pImageData->SetDimensions(..);

m_pImageData->SetScalarTypeToUnsignedShort();

m_pImageData->SetSpacing(.);

m_pImageData->GetPointData()->SetScalars(pScalars);

m_pImageData->Update();

 

vtkContourFilter* pContourFilter = vtkContourFilter::New();

pContourFilter->SetInput(m_pImageData);

pContourFilter->SetNumberOfContours(0);

pContourFilter->SetValue(0, m_nKontur1);                      // 800 <
m_nKontur < 2600

 

vtkDecimatePro* pDecimatePro = vtkDecimatePro::New();

pDecimatePro->SetInput(pContourFilter->GetOutput());

pDecimatePro->PreserveTopologyOn();

pDecimatePro->BoundaryVertexDeletionOn();

pDecimatePro->SetDegree(90);

 

vtkPolyDataNormals* m_pPolyDataNormals = vtkPolyDataNormals::New();

m_pPolyDataNormals->SetInput(pDecimatePro->GetOutput());

m_pPolyDataNormals->SetFeatureAngle(90);

m_pPolyDataNormals->Update();

 

vtkPolyDataMapper* pPolyDataMapper = vtkPolyDataMapper::New();

pPolyDataMapper->SetInput(m_pPolyDataNormals->GetOutput());

pPolyDataMapper->ScalarVisibilityOff();

 

vtkActor* m_pActorVolume = vtkActor::New();

m_pActorVolume->SetMapper(pPolyDataMapper);

m_pActorVolume->GetProperty->SetColor(..);

m_pActorVolume->GetProperty->SetOpacity(..);

 

m_pRenderer->SetActor(m_pActorVolume);

:

:

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20041118/59cf77c6/attachment.htm>


More information about the vtkusers mailing list