0
votes

I'm using VTK to render a 3D model from DICOM files. I want to be able to display the model tissue by tissue. I mean, for example, displaying only the bones, or only the skin etc...

I found this usefull class vtkContourFilter. With it, it is possible to do something like :

vtkContourFilter *filter = vtkContourFilter::New();
filter->SetValue(0, 650);

The higher the second value is, the deeper it goes inside the model. That way, with my sample of dicom files, I've been able to display only the bones with a value of 650.

And if I set it to -150, I can see the skin.

So if I do:

filter->SetValue(0, 650);
filter->SetValue(1, -150);

I will have two contours, with bones and skin.

The problem is, I manually tried different values to know where to stop to see the bones etc... And it might be different from one sample to another. Is there a way to make it automatic? May be it is something set inside the dicom files?

1

1 Answers

2
votes

I assume you are asking about DICOM data from a CT scan. In this case, the voxel values are given in Hounsfield Units, following a device-independent scale (Wikipedia). However, as you can read on that page, the boundaries are not exact, and there is no additional information about the boundaries in the DICOM data. To determine exact thresholds, you will have to a segmentation of the data for which a lot of different algorithms exist, including determining optimal thresholds (e.g. Otsu).

To get a feeling for this you could try out some DICOM viewer with interactive segmentation tools, e.g. MITK Workbench, 3D Slicer, or ITK Snap.