[vtkusers] Help!!!!! VtkMarchingCubes::SetValue
Vicky
bonsai19 at gmx.de
Mon Nov 3 13:28:12 EST 2008
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 <bonsai19 at gmx.de> 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 <bonsai19 at gmx.de> 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
>>>>
>>>>
>>>>
>>>
>>
>
>
More information about the vtkusers
mailing list