[vtkusers] The confusion of vtkMarchingCubes

朱文武 cool.wenwu at gmail.com
Wed Apr 14 04:44:27 EDT 2010


hi all,

      A problem confused me. I need your help. The class vtkMarchingCubes
has been adapted to construct a specified structure ( extract specified
isosurface),  the member function— vtkMarchingCubes::setvalue(int i, double
value) is used to specify a particular contour value.  The type of dataset i
used was gray bmp image.  Suppose the dataset contains gray value: 91, 111,
121, 137.
Now the problem is that if i want to construct the anatomy structure whose
gray value is 111,  so the code i write is that
SetValue(0, 111).  However,  the result of construction is that almost all
anatomy structures whose gray value is 91, 121, 137 have been constructed
too. Why is it happens? what's the difference between the gray value in the
bmp image and the contour value in this function?  And how to construct a
specified structure?

If we set the parameter -value to 111,  according to the MC algorithm,   the
specified isosurface should be extracted.  Do i understand wrong !?
On the other hand, if i want to extract multiple isosurface and control
property of each isosurface such as colors, how to do it? The function
SetValue(int i, double value) can not accomplish the task. Though we can add
contour value by increasing the index-i, the output of the vtkMarchingCubes
is combined to the subsequent filter. Can anyone provide help? Thanks very
much !

The relevant code and original image and result of the construction is
attached:

Code:
    vtkBMPReader *Image= vtkBMPReader::New();
    // read the dataset
     Image->Update();

    vtkMarchingCubes *skinExtractor= vtkMarchingCubes::New();//
skinGray=220,tendon=10,radius=20,ulna=40,
    skinExtractor->SetInputConnection(Image->GetOutputPort());
    skinExtractor->SetValue(0,111);// input the gray value
    skinExtractor->ComputeGradientsOn();
    skinExtractor->ComputeScalarsOff();

    vtkDecimatePro *vdeci;
    vdeci->SetInputConnection(skinExtractor->GetOutputPort());//
    vdeci->SetTargetReduction(0.6);//
    vdeci->PreserveTopologyOn();//

    vtkSmoothPolyDataFilter *vsmoother;
    vsmoother->SetInputConnection(vdeci->GetOutputPort());//
    vsmoother->SetNumberOfIterations(800);//

    vtkPolyDataNormals *vskinNormal;
    vskinNormal->SetInputConnection(vsmoother->GetOutputPort());//
    vskinNormal->SetFeatureAngle(60.0);//

    vtkPolyDataMapper *vskinMapper;
    vskinMapper->SetInputConnection(vskinNormal->GetOutputPort());
    vskinMapper->ScalarVisibilityOff();//

    vtkActor *vskin;
    vskin->SetMapper(vskinMapper);//
    vskin->GetProperty()->SetColor(1,0,0);

The original image :
[image: TCVH_1300副本.bmp]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100414/57773a9d/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/bmp
Size: 47680 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100414/57773a9d/attachment.bin>


More information about the vtkusers mailing list