[vtkusers] streaming vtkMarchingCubes?

Bill Lorensen bill.lorensen at gmail.com
Wed Jul 29 11:51:12 EDT 2009


You have not set an isosurface value.

Try cubes->SetValue(0,.5);


On Wed, Jul 29, 2009 at 9:13 AM, Dominik Szczerba<dominik at itis.ethz.ch> wrote:
> The files are here:
>
> http://otoro.itis.ethz.ch/~dominik/tmp/test_smooth.vti
> http://otoro.itis.ethz.ch/~dominik/tmp/test_cubes.vtk
>
> The pipeline is:
>
>        // setup (in a constructor)
>        extractVOI = vtkSmartPointer<vtkExtractVOI>::New();
>        extractVOI->SetInput(viewer->image);
>
>        calculator = vtkSmartPointer<vtkArrayCalculator>::New();
>        calculator->SetInputConnection(extractVOI->GetOutputPort());
>        calculator->SetResultArrayType(VTK_FLOAT);
>
>        ismooth = vtkSmartPointer<vtkImageGaussianSmooth>::New();
>        ismooth->SetInputConnection(calculator->GetOutputPort());
>        ismooth->BreakOnError();
>        ismooth->SetDimensionality(3);
>
>        cubes = vtkSmartPointer<vtkMarchingCubes>::New();
>        cubes->SetInputConnection(ismooth->GetOutputPort());
>        cubes->SetNumberOfContours(1);
>        cubes->SetComputeNormals(0);
>        cubes->SetComputeGradients(0);
>        cubes->SetComputeScalars(0);
>
>        // all below is (being continuously) called from a separate function
>        // FIXME why is this required???
>        vtkSmartPointer<vtkStructuredPoints> image2 =
> (vtkStructuredPoints*)calculator->GetOutput();
>        image2->SetScalarTypeToFloat();
>
>        ismooth->SetInput(image2);
>        ismooth->SetRadiusFactors(radius,radius,radius);
>        ismooth->SetStandardDeviations(sigma,sigma,sigma);
>
>        vtkNew(vtkXMLImageDataWriter,writer);
>        writer->SetInput(ismooth->GetOutput());
>        writer->SetFileName("test_smooth.vti");
>        writer->Write();
>
>        cubes->Update();
>        cubes->UpdateWholeExtent();
>
>        vtkNew(vtkPolyDataWriter,poly_writer);
>        poly_writer->SetInput(cubes->GetOutput());
>        poly_writer->SetFileName("test_cubes.vtk");
>        poly_writer->SetFileTypeToBinary();
>        poly_writer->Write();
>
>
> There is a small dirty part that I do not like (FIXME, otherwise the output
> type is somehow unsigned char) but otherwise it is rather simple and clean.
>
> Looking forward some ideas about the origin of the degenerate points - and
> once again, only on one system and not the other.
>
> With regards,
> Dominik
>
> Bill Lorensen wrote:
>>
>> MarchingCubes does not stream. Also, internally it uses vtkMergePoints
>> to make sure that duplicate points are removed. I don't see how memory
>> size should affect the results.
>>
>> What version of VTK are you using?
>>
>> Also, can you put the data online somewhere?
>>
>> Bill
>>
>> On Wed, Jul 29, 2009 at 3:27 AM, Dominik Szczerba<dominik at itis.ethz.ch>
>> wrote:
>>>
>>> I am doing nothing particular, just a structured points dataset with a
>>> smooth scalar field (float) that I am running vtkMarchingCubes on. I get
>>> my
>>> polydata as cubes->GetOutput(). As mentioned, I dont know if that matters
>>> but the problem appears on a low mem PC and not on a bigger one (same
>>> code
>>> but different systems). If you strongly believe there is something
>>> special
>>> in my image data I can put it online for a test.
>>>
>>> I can not follow the vtkMarchingCubes code well enough to clearly tell if
>>> there is some streaming being done - looks to me like not, but where do
>>> the
>>> degenerate points come from?
>>>
>>> An interesting observation though, if I save the resulting polydata using
>>> vtkPolyDataWriter I get the file you saw. If I save it with the vtkSTL
>>> writer I get a clean dataset, so the latter must merge coincident points
>>> internally (why? - this removes the chance of finding errors)
>>>
>>> best regards,
>>> Dominik
>>>
>>> Bill Lorensen wrote:
>>>>
>>>> I looked at the vtk file and indeed it has multiple surfaces. How did
>>>> you generate this polydata? Can you tell me the pipeline you used?
>>>>
>>>> On Sun, Jul 26, 2009 at 1:29 PM, Dominik Szczerba<dominik at itis.ethz.ch>
>>>> wrote:
>>>>>
>>>>> On Sun, 2009-07-26 at 12:35 -0400, Bill Lorensen wrote:
>>>>>>
>>>>>> I am surprised at this. vtkMarchingCubes should produce manifold and
>>>>>> oriented surfaces. There should be no duplicate points.
>>>>>> vtkMarchingCubes can produce multiple, topologically disconnected
>>>>>> surfaces. vtkDiscreteMarchingCubes can (and should) produce
>>>>>> geometrically continuous but topologically disconnected surafces.
>>>>>>
>>>>>> Can you provide a test dataset that reproduces the problem?
>>>>>>
>>>>> I hanged a small sample on:
>>>>>
>>>>> http://otoro.itis.ethz.ch/~dominik/tmp/test.vtk
>>>>>
>>>>> I got this while segmenting a smooth scalar field on a (Windows
>>>>> virtual)
>>>>> machine with very little memory. I do not get this on a (linux real)
>>>>> machine with lots of memory.
>>>>>
>>>>> Running connectivity filter you will notice a few disconnected regions.
>>>>> It goes away after merging coincident points (and the number of points
>>>>> is reduced indicating degenerate original points).
>>>>>
>>>>> I just need to get a warning when the output is in such condition to
>>>>> not
>>>>> have to merge points by default, which degrades performance.
>>>>>
>>>>> -- Dominik
>>>>>
>>>>>> Bill
>>>>>>
>>>>>> On Sun, Jul 26, 2009 at 8:27 AM, Dominik
>>>>>> Szczerba<dominik at itis.ethz.ch>
>>>>>> wrote:
>>>>>>>
>>>>>>> I have experimentally found out that vtkMarchingCubes can generate
>>>>>>> geometrically continuous but topologically disconnected isosurfaces,
>>>>>>> i.e. the isosurface is cut into stripes along one axis with duplicate
>>>>>>> points on the edges. How do I get a control of this behavior,
>>>>>>> especially, to know if there will be disconnected stripes so I should
>>>>>>> merge the points (I need topological consistency)?
>>>>>>>
>>>>>>> -- Dominik
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Powered by www.kitware.com
>>>>>>>
>>>>>>> Visit other Kitware open-source projects at
>>>>>>> http://www.kitware.com/opensource/opensource.html
>>>>>>>
>>>>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>>>>
>>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>>>>
>>>
>>> --
>>> d o m i n i k   s z c z e r b a ,   p h d . . . . . . . . . . .
>>> c o m p u t a t i o n a l   l i f e   s c i e n c e   g r o u p
>>> . . . . . . . i t ' i s   r e s e a r c h   f o u n d a t i o n
>>> . . . . . . . . . . . . . . . . . . . . http://www.itis.ethz.ch
>>>
>>>
>>
>
>
> --
> d o m i n i k   s z c z e r b a ,   p h d . . . . . . . . . . .
> c o m p u t a t i o n a l   l i f e   s c i e n c e   g r o u p
> . . . . . . . i t ' i s   r e s e a r c h   f o u n d a t i o n
> . . . . . . . . . . . . . . . . . . . . http://www.itis.ethz.ch
>
>



More information about the vtkusers mailing list