[vtkusers] Bug in vtkPolyDataToImageStencil?

Joel Schaerer joelthelion at laposte.net
Mon May 4 11:36:28 EDT 2009


Hi Lars,

thanks a lot for your answer! Using extrude->SetVector(0.1, 0.1, 1) on my
example does in fact "solve" the problem. However your answer also conforts
my feeling that this is indeed a bug in VTK. If nobody opposes it, I will
submit it to the VTK bugtracker tomorrow.

joel



lars-friedrich wrote:
> 
> hi joel,
> 
> I had a similar problem with 2D-binarization based on a contour. after
> some experiments, I found out that applying
> extrude->SetVector(0.1, 0.1, 1)
> instead of 
> extrude->SetVector(0, 0, 1)
> worked for me.
> It seems that the 'straight' zeroes (perpendicular vector) were the
> problem. maybe these values cause calculation troubles internally -
> division by zero? don't know ...
> the marginal vector direction change did not change my segmentation
> results.
> 
> maybe applying extrude->SetVector(0.1, 0.1, 3) works in your example, I'd
> try it ...
> 
> regards,
> lars
> 
> 
> 
> Joel Schaerer wrote:
>> 
>> Hi all,
>> 
>> Following the advice people have given me in 
>> http://www.nabble.com/Creating-a-3D-surface-mesh-from-a-stack-of-contours-td23293256.html
>> this  thread, I'm trying to create a 3D mesh from a stack of contours
>> using vtkLinearExtrusionFilter, vtkPolyDataToImageStencil and
>> vtkMarchingCubes.
>> 
>> It all seems to work quite well except for a very annoying bug, which is
>> that there are spurious white lines in the output of the binarizer.
>> Minimal code showing the problem with sample input and output data, as
>> well as a screenshot of the problem can be found here:
>> 
>> http://www.creatis.insa-lyon.fr/~schaerer/binarizer_bug.tar.bz2
>> 
>> The input are a polydata containing a closed polyline, and an empty image
>> to get the required spacing, origin, etc. for the output.
>> 
>> Is this a bug in vtk? Or am I missing something?
>> 
>> Thanks!
>> 
>> joel
>> 
>> 
>> PS: Here is the sample code:
>> 
>> #include <iostream>
>> #include <sstream>
>> #include <cassert>
>> #include <set>
>> #include <vtkPolyDataWriter.h>
>> #include <vtkPolyData.h>
>> #include <vtkLinearExtrusionFilter.h>
>> #include <vtkMetaImageWriter.h>
>> #include <vtkMetaImageReader.h>
>> #include <vtkImageData.h>
>> #include <vtkPolyDataToImageStencil.h>
>> #include <vtkPolyDataReader.h>
>> #include <vtkImageStencil.h>
>> #include <vtkSmartPointer.h>
>> 
>> 
>> 
>> int main(int argc,char * argv[])
>> {
>>     vtkSmartPointer<vtkMetaImageReader>
>> imread=vtkSmartPointer<vtkMetaImageReader>::New();
>>     imread->SetFileName("input.mhd");
>>     imread->Update();
>> 
>>     vtkSmartPointer<vtkPolyDataReader>
>> contour_reader=vtkSmartPointer<vtkPolyDataReader>::New();
>>     contour_reader->SetFileName("input_contour.vtk");
>>     contour_reader->Update();
>> 
>>     vtkLinearExtrusionFilter * extrude=vtkLinearExtrusionFilter::New();
>>     extrude->SetInput(contour_reader->GetOutput());
>>     extrude->SetVector(0, 0, 3);  //3 is the Z spacing between contours
>>     //extrude->CappingOn(); //doesn't seem to be doing anything
>>     extrude->Update();
>> 
>>     vtkPolyDataToImageStencil* sts=vtkPolyDataToImageStencil::New();
>>     vtkImageStencil* stencil=vtkImageStencil::New();
>>     sts->SetInput(extrude->GetOutput());
>>     sts->SetInformationInput(imread->GetOutput());
>>     sts->Update();
>>     stencil->SetStencil(sts->GetOutput());
>>     stencil->SetInput(imread->GetOutput());
>> 
>>     vtkSmartPointer<vtkMetaImageWriter>
>> binary_writer=vtkSmartPointer<vtkMetaImageWriter>::New();
>>     binary_writer->SetInput(stencil->GetOutput());
>>     binary_writer->SetFileName("binary_output.mhd");
>>     binary_writer->Write();
>> 
>>     extrude->Delete();
>>     sts->Delete();
>>     stencil->Delete();
>> 
>>     return 0;
>> }
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Bug-in-vtkPolyDataToImageStencil--tp23368312p23370933.html
Sent from the VTK - Users mailing list archive at Nabble.com.




More information about the vtkusers mailing list