[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