Quantcast

Help!!!!! VtkMarchingCubes::SetValue

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Help!!!!! VtkMarchingCubes::SetValue

Vicky-43
Hi there,

I'll be grateful if someone can help me out.

I want to create models from segmented 2D images (slices).
I have used code like the VTK frog-example from the book "Visualization
Toolkit: An Object-Oriented Approach to 3D Graphics":

            vtkImageThreshold threshold = new vtkImageThreshold();
            threshold.ThresholdBetween(1,1);
            threshold.SetInValue(255);
            threshold.SetOutValue(0);
            threshold.SetInput(image.GetOutput());

            vtkImageShrink3D shrink = new vtkImageShrink3D();
            shrink.SetInput(threshold.GetOutput());
            shrink.SetShrinkFactors(shrinkFactor);
            shrink.AveragingOn();

            vtkImageGaussianSmooth gaussiansmooth = new
vtkImageGaussianSmooth();
            gaussiansmooth.SetDimensionality(3);
            gaussiansmooth.SetStandardDeviation(gaussianStandardDeviation);
            gaussiansmooth.SetInput(shrink.GetOutput());

            vtkImageToStructuredPoints structuredPoints = new
vtkImageToStructuredPoints();
            structuredPoints.SetInput(gaussiansmooth.GetOutput());
            structuredPoints.GetOutput().ReleaseDataFlagOn();

            vtkMarchingCubes marchingCubes = new vtkMarchingCubes();
            marchingCubes.SetInput(structuredPoints.GetOutput());
            marchingCubes.ComputeScalarsOff();
            marchingCubes.ComputeGradientsOff();
            marchingCubes.ComputeNormalsOff();
            marchingCubes.SetValue(0, 450);

            vtkDecimatePro decimate = new vtkDecimatePro();
            decimate.SetInput(marchingCubes.GetOutput());
            decimate.SetFeatureAngle(60.0);
            decimate.SetMaximumError(1);
            decimate.SetTargetReduction(decimateReduction);
            decimate.GetOutput().ReleaseDataFlagOn();

            vtkSmoothPolyDataFilter smoother = new
vtkSmoothPolyDataFilter();
            smoother.SetInput(decimate.GetOutput());
            smoother.SetNumberOfIterations(smoothIterations);
            smoother.SetRelaxationFactor(RelaxionsFactor);
            smoother.SetFeatureAngle(smoothAngle);
            smoother.FeatureEdgeSmoothingOff();
            smoother.SetConvergence(0);
            smoother.GetOutput().ReleaseDataFlagOn();

            vtkPolyDataNormals normals = new vtkPolyDataNormals();
            normals.SetInput(smoother.GetOutput());
            normals.SetFeatureAngle(featureAngle);
            normals.GetOutput().ReleaseDataFlagOn();

            vtkStripper stripper = new vtkStripper();
            stripper.SetInput(normals.GetOutput());
            stripper.GetOutput().ReleaseDataFlagOn();

            vtkPolyDataWriter writer = new vtkPolyDataWriter();
            writer.SetInput(stripper.GetOutput());
            writer.SetFileName("Ratte_Lila.vtk");
            writer.SetFileType(2);

            ... and so on!

I think the pipeline is correct

But my problem is I can't determine which value is used in
SetValue-function of the vtkMarchingCubes-class. I don't know how to
calculate it.This value seems to be different to which tissue will be
rendered. But how can I calculate this value for each tissue?

I know the first parameter is the contour-number. Is this right?


Can anyone help me?
I'm using vtk 5.0

Thanks!

Vicky
_______________________________________________
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Help!!!!! VtkMarchingCubes::SetValue

Bill Lorensen
Vicky,

In your example, Threshold selects segment label 1 and converts all
voxels to either 0 or 255. Using this pipeline you should always
select the isovalue to be midway between 0 and 255 (127.5). If you
want tosegment label 27 for example, threshold.SetBetween(27,27). But
the isovalue will still be 127.5.

This method of creating surfaces from segemented data is old although
still valid. I would recommend using vtkDiscreteMarchingCubes to
generate surfaces from segmentation labels.

But first, try the value of 127.5 and see how you like the results.

Bill

On Fri, Oct 31, 2008 at 6:34 AM, Vicky <[hidden email]> wrote:

> Hi there,
>
> I'll be grateful if someone can help me out.
>
> I want to create models from segmented 2D images (slices).
> I have used code like the VTK frog-example from the book "Visualization
> Toolkit: An Object-Oriented Approach to 3D Graphics":
>
>           vtkImageThreshold threshold = new vtkImageThreshold();
>           threshold.ThresholdBetween(1,1);
>           threshold.SetInValue(255);
>           threshold.SetOutValue(0);
>           threshold.SetInput(image.GetOutput());
>
>           vtkImageShrink3D shrink = new vtkImageShrink3D();
>           shrink.SetInput(threshold.GetOutput());
>           shrink.SetShrinkFactors(shrinkFactor);
>           shrink.AveragingOn();
>
>           vtkImageGaussianSmooth gaussiansmooth = new
> vtkImageGaussianSmooth();
>           gaussiansmooth.SetDimensionality(3);
>           gaussiansmooth.SetStandardDeviation(gaussianStandardDeviation);
>           gaussiansmooth.SetInput(shrink.GetOutput());
>
>           vtkImageToStructuredPoints structuredPoints = new
> vtkImageToStructuredPoints();
>           structuredPoints.SetInput(gaussiansmooth.GetOutput());
>           structuredPoints.GetOutput().ReleaseDataFlagOn();
>
>           vtkMarchingCubes marchingCubes = new vtkMarchingCubes();
>           marchingCubes.SetInput(structuredPoints.GetOutput());
>           marchingCubes.ComputeScalarsOff();
>           marchingCubes.ComputeGradientsOff();
>           marchingCubes.ComputeNormalsOff();
>           marchingCubes.SetValue(0, 450);
>
>           vtkDecimatePro decimate = new vtkDecimatePro();
>           decimate.SetInput(marchingCubes.GetOutput());
>           decimate.SetFeatureAngle(60.0);
>           decimate.SetMaximumError(1);
>           decimate.SetTargetReduction(decimateReduction);
>           decimate.GetOutput().ReleaseDataFlagOn();
>
>           vtkSmoothPolyDataFilter smoother = new vtkSmoothPolyDataFilter();
>           smoother.SetInput(decimate.GetOutput());
>           smoother.SetNumberOfIterations(smoothIterations);
>           smoother.SetRelaxationFactor(RelaxionsFactor);
>           smoother.SetFeatureAngle(smoothAngle);
>           smoother.FeatureEdgeSmoothingOff();
>           smoother.SetConvergence(0);
>           smoother.GetOutput().ReleaseDataFlagOn();
>
>           vtkPolyDataNormals normals = new vtkPolyDataNormals();
>           normals.SetInput(smoother.GetOutput());
>           normals.SetFeatureAngle(featureAngle);
>           normals.GetOutput().ReleaseDataFlagOn();
>
>           vtkStripper stripper = new vtkStripper();
>           stripper.SetInput(normals.GetOutput());
>           stripper.GetOutput().ReleaseDataFlagOn();
>
>           vtkPolyDataWriter writer = new vtkPolyDataWriter();
>           writer.SetInput(stripper.GetOutput());
>           writer.SetFileName("Ratte_Lila.vtk");
>           writer.SetFileType(2);
>
>           ... and so on!
>
> I think the pipeline is correct
>
> But my problem is I can't determine which value is used in SetValue-function
> of the vtkMarchingCubes-class. I don't know how to calculate it.This value
> seems to be different to which tissue will be rendered. But how can I
> calculate this value for each tissue?
>
> I know the first parameter is the contour-number. Is this right?
>
>
> Can anyone help me?
> I'm using vtk 5.0
>
> Thanks!
>
> Vicky
> _______________________________________________
> 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
>
_______________________________________________
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Help!!!!! VtkMarchingCubes::SetValue

Vicky-43
Hi Bill,

thank you for your fast help.

I set the value to 127.5 but I get no model anyway. No surface is
generated using  vtkDiscreteMarchingCubes.
I'm really desparate...

When I run my script, I get the following errors:


ERROR: In m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkDecimatePro.cxx,
line 161
vtkDecimatePro (04042A88): No data to decimate!

ERROR: In
m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkSmoothPolyDataFilter.cxx,
line 212
vtkSmoothPolyDataFilter (04053210): No data to smooth!

ERROR: In
m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkPolyDataNormals.cxx, line 94
vtkPolyDataNormals (040540D0): No data to generate normals for!


I think that the segmented labeled images that I read are not correct.
Or I can't read them.

My proceeding to get labeled images is the following:
I have 160 segmented bitmap-images available. Each file is 234 x 340.
 At first I built one file per tissue (color). Then I create (with
matlab) binary labeled images for each tissue.
For example, I'm going to assume there are 4 colors (red, green, blue,
black) in a slice.Then I get 3 images, that I call {Red, Green, Blue}.
So each of these images is a matrix full of 1's and 0's. If I bring the
seperated images together again I have to change the 1's in something
else so that I can distinguish the different tissues (colors).
          Red = Red                  //leave as 1
          Blue = 2 * Blue           //change to label 2
          Green = 3 * Green;     //change to label 3
Now if I add them together, different tissues have differnt labels.
At this time I have binary labeled bitmap-images.

I think a surface is extracted using the binary labeled images. But I
get errors.

What is wrong with my labeled images?

This is how I read my data:

                vtkBMPReader bmpReader = new vtkBMPReader();
                bmpReader.SetDataExtent(0, 340, 0,234, 1, 160);
                bmpReader.SetDataSpacing(dataSpacing);
                bmpReader.SetFilePattern(imageVTK.data);
                bmpReader.SetDataScalarTypeToUnsignedShort();
                bmpReader.GetOutput().ReleaseDataFlagOn();
                bmpReader.Update();

                public vtkImageAlgorithm image;
                image = bmpReader;



Bill Lorensen schrieb:

> Vicky,
>
> In your example, Threshold selects segment label 1 and converts all
> voxels to either 0 or 255. Using this pipeline you should always
> select the isovalue to be midway between 0 and 255 (127.5). If you
> want tosegment label 27 for example, threshold.SetBetween(27,27). But
> the isovalue will still be 127.5.
>
> This method of creating surfaces from segemented data is old although
> still valid. I would recommend using vtkDiscreteMarchingCubes to
> generate surfaces from segmentation labels.
>
> But first, try the value of 127.5 and see how you like the results.
>
> Bill
>
> On Fri, Oct 31, 2008 at 6:34 AM, Vicky <[hidden email]> wrote:
>  
>> Hi there,
>>
>> I'll be grateful if someone can help me out.
>>
>> I want to create models from segmented 2D images (slices).
>> I have used code like the VTK frog-example from the book "Visualization
>> Toolkit: An Object-Oriented Approach to 3D Graphics":
>>
>>           vtkImageThreshold threshold = new vtkImageThreshold();
>>           threshold.ThresholdBetween(1,1);
>>           threshold.SetInValue(255);
>>           threshold.SetOutValue(0);
>>           threshold.SetInput(image.GetOutput());
>>
>>           vtkImageShrink3D shrink = new vtkImageShrink3D();
>>           shrink.SetInput(threshold.GetOutput());
>>           shrink.SetShrinkFactors(shrinkFactor);
>>           shrink.AveragingOn();
>>
>>           vtkImageGaussianSmooth gaussiansmooth = new
>> vtkImageGaussianSmooth();
>>           gaussiansmooth.SetDimensionality(3);
>>           gaussiansmooth.SetStandardDeviation(gaussianStandardDeviation);
>>           gaussiansmooth.SetInput(shrink.GetOutput());
>>
>>           vtkImageToStructuredPoints structuredPoints = new
>> vtkImageToStructuredPoints();
>>           structuredPoints.SetInput(gaussiansmooth.GetOutput());
>>           structuredPoints.GetOutput().ReleaseDataFlagOn();
>>
>>           vtkMarchingCubes marchingCubes = new vtkMarchingCubes();
>>           marchingCubes.SetInput(structuredPoints.GetOutput());
>>           marchingCubes.ComputeScalarsOff();
>>           marchingCubes.ComputeGradientsOff();
>>           marchingCubes.ComputeNormalsOff();
>>           marchingCubes.SetValue(0, 450);
>>
>>           vtkDecimatePro decimate = new vtkDecimatePro();
>>           decimate.SetInput(marchingCubes.GetOutput());
>>           decimate.SetFeatureAngle(60.0);
>>           decimate.SetMaximumError(1);
>>           decimate.SetTargetReduction(decimateReduction);
>>           decimate.GetOutput().ReleaseDataFlagOn();
>>
>>           vtkSmoothPolyDataFilter smoother = new vtkSmoothPolyDataFilter();
>>           smoother.SetInput(decimate.GetOutput());
>>           smoother.SetNumberOfIterations(smoothIterations);
>>           smoother.SetRelaxationFactor(RelaxionsFactor);
>>           smoother.SetFeatureAngle(smoothAngle);
>>           smoother.FeatureEdgeSmoothingOff();
>>           smoother.SetConvergence(0);
>>           smoother.GetOutput().ReleaseDataFlagOn();
>>
>>           vtkPolyDataNormals normals = new vtkPolyDataNormals();
>>           normals.SetInput(smoother.GetOutput());
>>           normals.SetFeatureAngle(featureAngle);
>>           normals.GetOutput().ReleaseDataFlagOn();
>>
>>           vtkStripper stripper = new vtkStripper();
>>           stripper.SetInput(normals.GetOutput());
>>           stripper.GetOutput().ReleaseDataFlagOn();
>>
>>           vtkPolyDataWriter writer = new vtkPolyDataWriter();
>>           writer.SetInput(stripper.GetOutput());
>>           writer.SetFileName("Ratte_Lila.vtk");
>>           writer.SetFileType(2);
>>
>>           ... and so on!
>>
>> I think the pipeline is correct
>>
>> But my problem is I can't determine which value is used in SetValue-function
>> of the vtkMarchingCubes-class. I don't know how to calculate it.This value
>> seems to be different to which tissue will be rendered. But how can I
>> calculate this value for each tissue?
>>
>> I know the first parameter is the contour-number. Is this right?
>>
>>
>> Can anyone help me?
>> I'm using vtk 5.0
>>
>> Thanks!
>>
>> Vicky
>> _______________________________________________
>> 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
>>
>>    
>
>  

_______________________________________________
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Help!!!!! VtkMarchingCubes::SetValue

Bill Lorensen
Your segmented files have rgb colors. The MC pipeline and DiscreteMC
assume your labels are single integer values like 1, 34, 87, ... not
an rgb color.

On Sun, Nov 2, 2008 at 6:40 PM, Vicky <[hidden email]> wrote:

> Hi Bill,
>
> thank you for your fast help.
>
> I set the value to 127.5 but I get no model anyway. No surface is generated
> using  vtkDiscreteMarchingCubes.
> I'm really desparate...
>
> When I run my script, I get the following errors:
>
>
> ERROR: In m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkDecimatePro.cxx, line
> 161
> vtkDecimatePro (04042A88): No data to decimate!
>
> ERROR: In
> m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkSmoothPolyDataFilter.cxx, line
> 212
> vtkSmoothPolyDataFilter (04053210): No data to smooth!
>
> ERROR: In m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkPolyDataNormals.cxx,
> line 94
> vtkPolyDataNormals (040540D0): No data to generate normals for!
>
>
> I think that the segmented labeled images that I read are not correct. Or I
> can't read them.
>
> My proceeding to get labeled images is the following:
> I have 160 segmented bitmap-images available. Each file is 234 x 340.
> At first I built one file per tissue (color). Then I create (with matlab)
> binary labeled images for each tissue.
> For example, I'm going to assume there are 4 colors (red, green, blue,
> black) in a slice.Then I get 3 images, that I call {Red, Green, Blue}. So
> each of these images is a matrix full of 1's and 0's. If I bring the
> seperated images together again I have to change the 1's in something else
> so that I can distinguish the different tissues (colors).
>         Red = Red                  //leave as 1
>         Blue = 2 * Blue           //change to label 2
>         Green = 3 * Green;     //change to label 3
> Now if I add them together, different tissues have differnt labels.
> At this time I have binary labeled bitmap-images.
>
> I think a surface is extracted using the binary labeled images. But I get
> errors.
>
> What is wrong with my labeled images?
>
> This is how I read my data:
>
>               vtkBMPReader bmpReader = new vtkBMPReader();
>               bmpReader.SetDataExtent(0, 340, 0,234, 1, 160);
>               bmpReader.SetDataSpacing(dataSpacing);
>               bmpReader.SetFilePattern(imageVTK.data);
>               bmpReader.SetDataScalarTypeToUnsignedShort();
>               bmpReader.GetOutput().ReleaseDataFlagOn();
>               bmpReader.Update();
>
>               public vtkImageAlgorithm image;
>               image = bmpReader;
>
>
>
> Bill Lorensen schrieb:
>>
>> Vicky,
>>
>> In your example, Threshold selects segment label 1 and converts all
>> voxels to either 0 or 255. Using this pipeline you should always
>> select the isovalue to be midway between 0 and 255 (127.5). If you
>> want tosegment label 27 for example, threshold.SetBetween(27,27). But
>> the isovalue will still be 127.5.
>>
>> This method of creating surfaces from segemented data is old although
>> still valid. I would recommend using vtkDiscreteMarchingCubes to
>> generate surfaces from segmentation labels.
>>
>> But first, try the value of 127.5 and see how you like the results.
>>
>> Bill
>>
>> On Fri, Oct 31, 2008 at 6:34 AM, Vicky <[hidden email]> wrote:
>>
>>>
>>> Hi there,
>>>
>>> I'll be grateful if someone can help me out.
>>>
>>> I want to create models from segmented 2D images (slices).
>>> I have used code like the VTK frog-example from the book "Visualization
>>> Toolkit: An Object-Oriented Approach to 3D Graphics":
>>>
>>>          vtkImageThreshold threshold = new vtkImageThreshold();
>>>          threshold.ThresholdBetween(1,1);
>>>          threshold.SetInValue(255);
>>>          threshold.SetOutValue(0);
>>>          threshold.SetInput(image.GetOutput());
>>>
>>>          vtkImageShrink3D shrink = new vtkImageShrink3D();
>>>          shrink.SetInput(threshold.GetOutput());
>>>          shrink.SetShrinkFactors(shrinkFactor);
>>>          shrink.AveragingOn();
>>>
>>>          vtkImageGaussianSmooth gaussiansmooth = new
>>> vtkImageGaussianSmooth();
>>>          gaussiansmooth.SetDimensionality(3);
>>>          gaussiansmooth.SetStandardDeviation(gaussianStandardDeviation);
>>>          gaussiansmooth.SetInput(shrink.GetOutput());
>>>
>>>          vtkImageToStructuredPoints structuredPoints = new
>>> vtkImageToStructuredPoints();
>>>          structuredPoints.SetInput(gaussiansmooth.GetOutput());
>>>          structuredPoints.GetOutput().ReleaseDataFlagOn();
>>>
>>>          vtkMarchingCubes marchingCubes = new vtkMarchingCubes();
>>>          marchingCubes.SetInput(structuredPoints.GetOutput());
>>>          marchingCubes.ComputeScalarsOff();
>>>          marchingCubes.ComputeGradientsOff();
>>>          marchingCubes.ComputeNormalsOff();
>>>          marchingCubes.SetValue(0, 450);
>>>
>>>          vtkDecimatePro decimate = new vtkDecimatePro();
>>>          decimate.SetInput(marchingCubes.GetOutput());
>>>          decimate.SetFeatureAngle(60.0);
>>>          decimate.SetMaximumError(1);
>>>          decimate.SetTargetReduction(decimateReduction);
>>>          decimate.GetOutput().ReleaseDataFlagOn();
>>>
>>>          vtkSmoothPolyDataFilter smoother = new
>>> vtkSmoothPolyDataFilter();
>>>          smoother.SetInput(decimate.GetOutput());
>>>          smoother.SetNumberOfIterations(smoothIterations);
>>>          smoother.SetRelaxationFactor(RelaxionsFactor);
>>>          smoother.SetFeatureAngle(smoothAngle);
>>>          smoother.FeatureEdgeSmoothingOff();
>>>          smoother.SetConvergence(0);
>>>          smoother.GetOutput().ReleaseDataFlagOn();
>>>
>>>          vtkPolyDataNormals normals = new vtkPolyDataNormals();
>>>          normals.SetInput(smoother.GetOutput());
>>>          normals.SetFeatureAngle(featureAngle);
>>>          normals.GetOutput().ReleaseDataFlagOn();
>>>
>>>          vtkStripper stripper = new vtkStripper();
>>>          stripper.SetInput(normals.GetOutput());
>>>          stripper.GetOutput().ReleaseDataFlagOn();
>>>
>>>          vtkPolyDataWriter writer = new vtkPolyDataWriter();
>>>          writer.SetInput(stripper.GetOutput());
>>>          writer.SetFileName("Ratte_Lila.vtk");
>>>          writer.SetFileType(2);
>>>
>>>          ... and so on!
>>>
>>> I think the pipeline is correct
>>>
>>> But my problem is I can't determine which value is used in
>>> SetValue-function
>>> of the vtkMarchingCubes-class. I don't know how to calculate it.This
>>> value
>>> seems to be different to which tissue will be rendered. But how can I
>>> calculate this value for each tissue?
>>>
>>> I know the first parameter is the contour-number. Is this right?
>>>
>>>
>>> Can anyone help me?
>>> I'm using vtk 5.0
>>>
>>> Thanks!
>>>
>>> Vicky
>>> _______________________________________________
>>> 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
>>>
>>>
>>
>>
>
>
_______________________________________________
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Help!!!!! VtkMarchingCubes::SetValue

Vicky-43
Hallo Bill,

Thanks a lot for your help. But I think I have a logical flaw.

At first I have 160 semented bmp-images. I create one file per tissue
(color). So I get 160 slices per tissue. I have convert these slices
into binary images and then I have labeled those. So each pixel of each
slice has an integer value.
I tried to read these binary labeled images but it doesn't work and I
get the errors.

Why can't I read these labeled binary images?
I must still prepare these images?
How must I process the images so that my pipeline works?

It would be nice if you help me.

Best regards,
Vicky




Bill Lorensen schrieb:

> Your segmented files have rgb colors. The MC pipeline and DiscreteMC
> assume your labels are single integer values like 1, 34, 87, ... not
> an rgb color.
>
> On Sun, Nov 2, 2008 at 6:40 PM, Vicky <[hidden email]> wrote:
>  
>> Hi Bill,
>>
>> thank you for your fast help.
>>
>> I set the value to 127.5 but I get no model anyway. No surface is generated
>> using  vtkDiscreteMarchingCubes.
>> I'm really desparate...
>>
>> When I run my script, I get the following errors:
>>
>>
>> ERROR: In m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkDecimatePro.cxx, line
>> 161
>> vtkDecimatePro (04042A88): No data to decimate!
>>
>> ERROR: In
>> m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkSmoothPolyDataFilter.cxx, line
>> 212
>> vtkSmoothPolyDataFilter (04053210): No data to smooth!
>>
>> ERROR: In m:\dev\cur\vtkdotnet\branch\50\Graphics\vtkPolyDataNormals.cxx,
>> line 94
>> vtkPolyDataNormals (040540D0): No data to generate normals for!
>>
>>
>> I think that the segmented labeled images that I read are not correct. Or I
>> can't read them.
>>
>> My proceeding to get labeled images is the following:
>> I have 160 segmented bitmap-images available. Each file is 234 x 340.
>> At first I built one file per tissue (color). Then I create (with matlab)
>> binary labeled images for each tissue.
>> For example, I'm going to assume there are 4 colors (red, green, blue,
>> black) in a slice.Then I get 3 images, that I call {Red, Green, Blue}. So
>> each of these images is a matrix full of 1's and 0's. If I bring the
>> seperated images together again I have to change the 1's in something else
>> so that I can distinguish the different tissues (colors).
>>         Red = Red                  //leave as 1
>>         Blue = 2 * Blue           //change to label 2
>>         Green = 3 * Green;     //change to label 3
>> Now if I add them together, different tissues have differnt labels.
>> At this time I have binary labeled bitmap-images.
>>
>> I think a surface is extracted using the binary labeled images. But I get
>> errors.
>>
>> What is wrong with my labeled images?
>>
>> This is how I read my data:
>>
>>               vtkBMPReader bmpReader = new vtkBMPReader();
>>               bmpReader.SetDataExtent(0, 340, 0,234, 1, 160);
>>               bmpReader.SetDataSpacing(dataSpacing);
>>               bmpReader.SetFilePattern(imageVTK.data);
>>               bmpReader.SetDataScalarTypeToUnsignedShort();
>>               bmpReader.GetOutput().ReleaseDataFlagOn();
>>               bmpReader.Update();
>>
>>               public vtkImageAlgorithm image;
>>               image = bmpReader;
>>
>>
>>
>> Bill Lorensen schrieb:
>>    
>>> Vicky,
>>>
>>> In your example, Threshold selects segment label 1 and converts all
>>> voxels to either 0 or 255. Using this pipeline you should always
>>> select the isovalue to be midway between 0 and 255 (127.5). If you
>>> want tosegment label 27 for example, threshold.SetBetween(27,27). But
>>> the isovalue will still be 127.5.
>>>
>>> This method of creating surfaces from segemented data is old although
>>> still valid. I would recommend using vtkDiscreteMarchingCubes to
>>> generate surfaces from segmentation labels.
>>>
>>> But first, try the value of 127.5 and see how you like the results.
>>>
>>> Bill
>>>
>>> On Fri, Oct 31, 2008 at 6:34 AM, Vicky <[hidden email]> wrote:
>>>
>>>      
>>>> Hi there,
>>>>
>>>> I'll be grateful if someone can help me out.
>>>>
>>>> I want to create models from segmented 2D images (slices).
>>>> I have used code like the VTK frog-example from the book "Visualization
>>>> Toolkit: An Object-Oriented Approach to 3D Graphics":
>>>>
>>>>          vtkImageThreshold threshold = new vtkImageThreshold();
>>>>          threshold.ThresholdBetween(1,1);
>>>>          threshold.SetInValue(255);
>>>>          threshold.SetOutValue(0);
>>>>          threshold.SetInput(image.GetOutput());
>>>>
>>>>          vtkImageShrink3D shrink = new vtkImageShrink3D();
>>>>          shrink.SetInput(threshold.GetOutput());
>>>>          shrink.SetShrinkFactors(shrinkFactor);
>>>>          shrink.AveragingOn();
>>>>
>>>>          vtkImageGaussianSmooth gaussiansmooth = new
>>>> vtkImageGaussianSmooth();
>>>>          gaussiansmooth.SetDimensionality(3);
>>>>          gaussiansmooth.SetStandardDeviation(gaussianStandardDeviation);
>>>>          gaussiansmooth.SetInput(shrink.GetOutput());
>>>>
>>>>          vtkImageToStructuredPoints structuredPoints = new
>>>> vtkImageToStructuredPoints();
>>>>          structuredPoints.SetInput(gaussiansmooth.GetOutput());
>>>>          structuredPoints.GetOutput().ReleaseDataFlagOn();
>>>>
>>>>          vtkMarchingCubes marchingCubes = new vtkMarchingCubes();
>>>>          marchingCubes.SetInput(structuredPoints.GetOutput());
>>>>          marchingCubes.ComputeScalarsOff();
>>>>          marchingCubes.ComputeGradientsOff();
>>>>          marchingCubes.ComputeNormalsOff();
>>>>          marchingCubes.SetValue(0, 450);
>>>>
>>>>          vtkDecimatePro decimate = new vtkDecimatePro();
>>>>          decimate.SetInput(marchingCubes.GetOutput());
>>>>          decimate.SetFeatureAngle(60.0);
>>>>          decimate.SetMaximumError(1);
>>>>          decimate.SetTargetReduction(decimateReduction);
>>>>          decimate.GetOutput().ReleaseDataFlagOn();
>>>>
>>>>          vtkSmoothPolyDataFilter smoother = new
>>>> vtkSmoothPolyDataFilter();
>>>>          smoother.SetInput(decimate.GetOutput());
>>>>          smoother.SetNumberOfIterations(smoothIterations);
>>>>          smoother.SetRelaxationFactor(RelaxionsFactor);
>>>>          smoother.SetFeatureAngle(smoothAngle);
>>>>          smoother.FeatureEdgeSmoothingOff();
>>>>          smoother.SetConvergence(0);
>>>>          smoother.GetOutput().ReleaseDataFlagOn();
>>>>
>>>>          vtkPolyDataNormals normals = new vtkPolyDataNormals();
>>>>          normals.SetInput(smoother.GetOutput());
>>>>          normals.SetFeatureAngle(featureAngle);
>>>>          normals.GetOutput().ReleaseDataFlagOn();
>>>>
>>>>          vtkStripper stripper = new vtkStripper();
>>>>          stripper.SetInput(normals.GetOutput());
>>>>          stripper.GetOutput().ReleaseDataFlagOn();
>>>>
>>>>          vtkPolyDataWriter writer = new vtkPolyDataWriter();
>>>>          writer.SetInput(stripper.GetOutput());
>>>>          writer.SetFileName("Ratte_Lila.vtk");
>>>>          writer.SetFileType(2);
>>>>
>>>>          ... and so on!
>>>>
>>>> I think the pipeline is correct
>>>>
>>>> But my problem is I can't determine which value is used in
>>>> SetValue-function
>>>> of the vtkMarchingCubes-class. I don't know how to calculate it.This
>>>> value
>>>> seems to be different to which tissue will be rendered. But how can I
>>>> calculate this value for each tissue?
>>>>
>>>> I know the first parameter is the contour-number. Is this right?
>>>>
>>>>
>>>> Can anyone help me?
>>>> I'm using vtk 5.0
>>>>
>>>> Thanks!
>>>>
>>>> Vicky
>>>> _______________________________________________
>>>> 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
>>>>
>>>>
>>>>        
>>>      
>>    
>
>  

_______________________________________________
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
Loading...