[vtkusers] Problem with vtkPolyDataToImageStencil in 5.8

Jothy jothybasu at gmail.com
Fri Mar 9 17:16:09 EST 2012


I tried but it did not work for this particular case. But it works perfectly without extrusion( as you said).

Since the imageData->GetSpacing() returns a wrong z spacing, vtkPolydstaToImageStencil may be using this wrong value somewhere internally.

Thanks

Jothy



On 09-Mar-2012, at 9:55 PM, David Gobbi <david.gobbi at gmail.com> wrote:

> Hi Jothy,
> 
> Please, for my sake, give it a try it without the extruder.  In VTK
> 5.8 the extruder should not be necessary, and removing it will make
> the process much more efficient.
> 
> If the DICOM reader is using the SliceThickness as the Z spacing,
> then it is wrong.  It is not uncommon for a protocol to use a slice
> thickness that is different from the Z spacing.
> 
> - David
> 
> 
> On Fri, Mar 9, 2012 at 2:26 PM, Jothybasu Selvaraj <jothybasu at gmail.com> wrote:
>> And vtkDICOMImageReader depends on the slice thickness tag it seems, that's
>> why the imageData->GetSpacing()
>> 
>> give 3.0 mm, which is wrong in this case.
>> 
>> Jothy
>> 
>> 
>> On Fri, Mar 9, 2012 at 9:24 PM, Jothybasu Selvaraj <jothybasu at gmail.com>
>> wrote:
>>> 
>>> Hi David,
>>> 
>>> Some stunning revelation here!
>>> 
>>> The problem is because of the inconsistence between the DICOM tags Slice
>>> thickness and ImagePositionPatient
>>> 
>>> Slice thickness says it's 3mm, but the z difference between two slices
>>> according to their IPP is 2.5 mm.
>>> 
>>> If I set the extrude->SetVector(0,0,-2.5).
>>> 
>>> It works perfectly!
>>> 
>>> How can it happen in DICOM? Probably, that's the reason why other datasets
>>> worked form me with the new vtkPolydataToImageStencil.
>>> 
>>> Can someone shed light on this?
>>> 
>>> Many thanks again
>>> 
>>> Jothy
>>> 
>>> 
>>> 
>>> 
>>> On Fri, Mar 9, 2012 at 8:36 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>>> 
>>>> Hi Jothy,
>>>> 
>>>> Remove the extrude filter from the pipeline.
>>>> 
>>>>  - David
>>>> 
>>>> 
>>>> On Fri, Mar 9, 2012 at 1:29 PM, Jothybasu Selvaraj <jothybasu at gmail.com>
>>>> wrote:
>>>>> Hi David,
>>>>> 
>>>>> I am still not able to fix this issue.
>>>>> 
>>>>> This is how I create the polydata and other pipeline.
>>>>> 
>>>>> vtkSmartPointer<vtkPoints> points =
>>>>> 
>>>>>                        vtkSmartPointer<vtkPoints>::New();
>>>>> 
>>>>>                  vtkSmartPointer<vtkCellArray> cells =
>>>>> 
>>>>>                          vtkSmartPointer<vtkCellArray>::New();
>>>>> 
>>>>>                points->SetNumberOfPoints(npts+1);
>>>>> 
>>>>>                cells->InsertNextCell(npts+1);
>>>>> 
>>>>>                for(int p=0;p<npts;p++)
>>>>> 
>>>>>                {
>>>>> 
>>>>> 
>>>>> 
>>>>>                    points->SetPoint( p, Xp, Yp,Zp );
>>>>> 
>>>>>                    cells->InsertCellPoint( p );
>>>>> 
>>>>>                }
>>>>> 
>>>>>                cells->InsertCellPoint(npts);
>>>>> 
>>>>>                points->SetPoint(npts,pts[0],pts[1],pts[2]);//close
>>>>> contour
>>>>> 
>>>>> 
>>>>>                vtkSmartPointer<vtkPolyData>polydataContour=
>>>>> 
>>>>>                        vtkSmartPointer<vtkPolyData>::New();
>>>>> 
>>>>>                polydataContour->Initialize();
>>>>> 
>>>>>                polydataContour->SetLines(cells);
>>>>> 
>>>>>                polydataContour->SetPoints(points);
>>>>> 
>>>>> 
>>>>> //Here all contours are appended to vtkAppendPolydataFilter
>>>>> 
>>>>>                vtkSmartPointer<vtkPolyDataToImageStencil> sts=
>>>>> 
>>>>>  vtkSmartPointer<vtkPolyDataToImageStencil>::New();
>>>>>               sts->SetTolerance(1e-6);//very important
>>>>>                sts->SetInformationInput(binary_image);
>>>>>                vtkSmartPointer<vtkLinearExtrusionFilter> extrude=
>>>>> 
>>>>>  vtkSmartPointer<vtkLinearExtrusionFilter>::New();
>>>>>                extrude->SetInput(appender->GetOutput());
>>>>>                extrude->CappingOff();//also tried ON
>>>>>                extrude->SetVector(0, 0,-zSpacing);//Correct Z spacing
>>>>> is
>>>>> important
>>>>>                //qDebug()<<-zSpacing<<"-ve zSpacing";
>>>>>                sts->SetInput(extrude->GetOutput());
>>>>> 
>>>>> 
>>>>>                //qDebug()<<t->currentTime()<<"Stencil start";
>>>>>                vtkSmartPointer<vtkImageStencil> stencil=
>>>>>                        vtkSmartPointer<vtkImageStencil>::New();
>>>>>                stencil->SetStencil(sts->GetOutput());
>>>>>                stencil->SetInput(binary_image);
>>>>>                stencil->ReverseStencilOn();
>>>>>                stencil->Update();
>>>>> 
>>>>> 
>>>>> I am able to visualize the contour by setting appendFilter->GetOutput()
>>>>> to a
>>>>> vtkPolyDataMapper.
>>>>> 
>>>>> Is there any thing wrong.
>>>>> 
>>>>> Thanks very much!
>>>>> 
>>>>> Jothy
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On Tue, Mar 6, 2012 at 3:48 PM, David Gobbi <david.gobbi at gmail.com>
>>>>> wrote:
>>>>>> 
>>>>>> You'd have to use SetLines() instead of SetPolys().  And for
>>>>>> polylines, the final point in the polyline has to connect to the first
>>>>>> line to create a closed loop, so polylines cell arrays need an extra
>>>>>> entry as compared to polygon cell arrays.
>>>>>> 
>>>>>> On Tue, Mar 6, 2012 at 8:36 AM, Jothybasu Selvaraj
>>>>>> <jothybasu at gmail.com>
>>>>>> wrote:
>>>>>>> I ma creating the polydat per conoutr like this
>>>>>>> 
>>>>>>> vtkSmartPointer<vtkPolyData>polydataContour=
>>>>>>> 
>>>>>>>      vtkSmartPointer<vtkPolyData>::New();
>>>>>>> 
>>>>>>> polydataContour->Initialize();
>>>>>>> 
>>>>>>> polydataContour->SetPolys( cells );//vtkCellArray
>>>>>>> 
>>>>>>> polydataContour->SetPoints( points);//vtkPoints
>>>>>>> 
>>>>>>> 
>>>>>>> How should I do that?
>>>>>>> 
>>>>>>> Thanks very much
>>>>>>> 
>>>>>>> Jothy
>>>>>>> 
>>>>>>> 
>>>>>>> On Tue, Mar 6, 2012 at 3:31 PM, David Gobbi <david.gobbi at gmail.com>
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> The contours must be polylines, not polygons, or it won't work.
>>>>>>>> 
>>>>>>>> On Tue, Mar 6, 2012 at 6:29 AM, Jothybasu Selvaraj
>>>>>>>> <jothybasu at gmail.com>
>>>>>>>> wrote:
>>>>>>>>> Yes, I have one contour for each z slice as a vtkPolyData. I will
>>>>>>>>> try
>>>>>>>>> removing that.
>>>>>>>>> 
>>>>>>>>> Thanks
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Tue, Mar 6, 2012 at 1:26 PM, David Gobbi
>>>>>>>>> <david.gobbi at gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> Do you have one contour for each Z slice?  If so, then try
>>>>>>>>>> removing
>>>>>>>>>> the Extrude filter from your pipeline.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On Tue, Mar 6, 2012 at 2:51 AM, Jothybasu Selvaraj
>>>>>>>>>> <jothybasu at gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>> Another point here,
>>>>>>>>>>> 
>>>>>>>>>>> I am creating a vtkPolyData for each contour and then adding
>>>>>>>>>>> it to
>>>>>>>>>>> the
>>>>>>>>>>> vtkAppendPolydataFilter, then the output of
>>>>>>>>>>> vtkAppenPolydataFilter
>>>>>>>>>>> is
>>>>>>>>>>> set as
>>>>>>>>>>> input to vtkPolydataToImageStencil.
>>>>>>>>>>> 
>>>>>>>>>>> Could this make any difference?
>>>>>>>>>>> 
>>>>>>>>>>> Thanks
>>>>>>>>>>> 
>>>>>>>>>>> Jothy
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> On Mon, Mar 5, 2012 at 7:49 PM, Jothybasu Selvaraj
>>>>>>>>>>> <jothybasu at gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> No, it doesn't fix the problem.
>>>>>>>>>>>> 
>>>>>>>>>>>> But it seems to work fine for contours with z-spacing in
>>>>>>>>>>>> steps of
>>>>>>>>>>>> 1mm.
>>>>>>>>>>>> 
>>>>>>>>>>>> It is working well for a dataset with 3mm spacing but fails
>>>>>>>>>>>> for
>>>>>>>>>>>> 2.5
>>>>>>>>>>>> mm.
>>>>>>>>>>>> 
>>>>>>>>>>>> Maybe I need to test it thoroughly. Can I use those cxx and
>>>>>>>>>>>> .h
>>>>>>>>>>>> from
>>>>>>>>>>>> 5.6
>>>>>>>>>>>> in
>>>>>>>>>>>> 5.8, that would be a easy workaround.
>>>>>>>>>>>> 
>>>>>>>>>>>> Thanks
>>>>>>>>>>>> 
>>>>>>>>>>>> Jothy
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> On Mon, Mar 5, 2012 at 4:01 PM, David Gobbi
>>>>>>>>>>>> <david.gobbi at gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hi Jothy,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> It underwent significant changes, but the only change I can
>>>>>>>>>>>>> think
>>>>>>>>>>>>> of that might have affected your pipeline is the way that it
>>>>>>>>>>>>> does
>>>>>>>>>>>>> rounding, it used to use a Floor() method that provided a
>>>>>>>>>>>>> small
>>>>>>>>>>>>> tolerance even if you did SetTolerance(0).  Try calling
>>>>>>>>>>>>> SetTolerance(1e-6) on your PolyDataToImageStencil object, it
>>>>>>>>>>>>> might help.
>>>>>>>>>>>>> 
>>>>>>>>>>>>>  - David
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Mon, Mar 5, 2012 at 3:17 AM, Jothybasu Selvaraj
>>>>>>>>>>>>> <jothybasu at gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I was able to create a mesh using the following pipeline
>>>>>>>>>>>>>> in
>>>>>>>>>>>>>> 5.6
>>>>>>>>>>>>>> and
>>>>>>>>>>>>>> it
>>>>>>>>>>>>>> worked well
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> vtkPolyDataToImageStencil->vtkLinearExtrusionFilter->vtkImageStencil->vtkDiscreteMarchingCubes
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Now, I have updated vtk to 5.8 and I am getting gaps in
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> mesh
>>>>>>>>>>>>>> along
>>>>>>>>>>>>>> the z
>>>>>>>>>>>>>> axis. I am really puzzled, I have tried with different
>>>>>>>>>>>>>> data
>>>>>>>>>>>>>> sets
>>>>>>>>>>>>>> as
>>>>>>>>>>>>>> well.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I have read somewhere that vtkPolyDataToImageStencil had
>>>>>>>>>>>>>> some
>>>>>>>>>>>>>> changes
>>>>>>>>>>>>>> in
>>>>>>>>>>>>>> 5.8, does it has anything to do with this problem, or am I
>>>>>>>>>>>>>> doing
>>>>>>>>>>>>>> anything wrong?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I have contours of constant z-spacing.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Any hints?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Jothy
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> --
>>>>>>>>>>>> Jothy
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> --
>>>>>>>>>>> Jothy
>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> Jothy
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> Jothy
>>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Jothy
>>>>> 
>>> 
>>> 
>>> 
>>> 
>>> --
>>> Jothy
>>> 
>> 
>> 
>> 
>> --
>> Jothy
>> 



More information about the vtkusers mailing list