[vtkusers] vtkPolyDataToImageStencil with partial volume

Bill Lorensen bill.lorensen at gmail.com
Thu Feb 24 12:02:55 EST 2011


Also, the stencil algorithm and marching squares use different
criteria to determine whether a "pixel" is inside or outside.

For the stencil, the pixel is considered a point and checked within a
tolerance for inside/outside. I'm guessing here).
For marching squares, a "square" is composed of four pixels. If at
least one of the four pixels is of the opposite state(inside/outside)
then a contour will be generated.

On Thu, Feb 24, 2011 at 11:53 AM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
> Definitely set the isovalue to .5 if you have binary 0/1 images.
>
> On Wed, Feb 23, 2011 at 2:59 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>> I've never used marching squares, but I have a guess as
>> to what the problem might be.  If your binary image has
>> values "0" and "1" then you should contour it at "0.5".
>>
>>  - David
>>
>>
>> On Wed, Feb 23, 2011 at 12:27 PM, Jonathan Morra <jonmorra at gmail.com> wrote:
>>> If that's the case, then maybe I could have issues on the other side
>>> (converting binary images to contours, I do both).  For this I'm using
>>> vtkMarchingSquares followed by vtkStripper
>>> int[] extent = binaryOrgan.GetExtent();
>>>         switch (orientation) {
>>>             case OrthoPanel.ORIENTATION_XY:
>>>                 extent[4] = slice;
>>>                 extent[5] = slice;
>>>                 break;
>>>             case OrthoPanel.ORIENTATION_XZ:
>>>                 extent[2] = slice;
>>>                 extent[3] = slice;
>>>                 break;
>>>             case OrthoPanel.ORIENTATION_YZ:
>>>                 extent[0] = slice;
>>>                 extent[1] = slice;
>>>                 break;
>>>         }
>>> vtkMarchingSquares marching = new vtkMarchingSquares();
>>>         marching.SetInput(binaryOrgan);
>>>         marching.SetImageRange(extent);
>>>         marching.SetValue(0, 1);
>>>         marching.Update();
>>>         vtkPolyData marchingOutput = marching.GetOutput();
>>>         vtkStripper stripper = new vtkStripper();
>>>         stripper.SetInput(marchingOutput);
>>>         stripper.Update();
>>> Does anything look like it could be causing my issues there?
>>> On Wed, Feb 23, 2011 at 11:18 AM, David Gobbi <david.gobbi at gmail.com> wrote:
>>>>
>>>> The value "1e-6" is a common tolerance because it is larger than
>>>> most roundoff errors that are likely to occur in the calculations,
>>>> but still small enough that it won't appreciably increase size of the
>>>> region.
>>>>
>>>> Setting the tolerance to zero does exactly what you noted.  If the
>>>> pixel is exactly on the edge, then it is considered to be inside if the
>>>> edge is a leading edge, or outside if the edge is a trailing edge.
>>>> This is done so that if you have two contours which are adjacent
>>>> (i.e. share an edge), the edge voxels will be considered to be in
>>>> just one of the two contours instead of in both.  If the tolerance is
>>>> set larger than zero, then the edge pixels would always be considered
>>>> to be in both contours.
>>>>
>>>> If you are dealing with rectangular contours, then the contour
>>>> lines should be made so that they lie halfway between pixels, instead
>>>> of lying directly on top of the pixels.  Then there is no uncertainty
>>>> about whether a pixel lies inside or outside.
>>>>
>>>>  - David
>>>>
>>>>
>>>> On Wed, Feb 23, 2011 at 11:58 AM, Jonathan Morra <jonmorra at gmail.com>
>>>> wrote:
>>>> > I had the tolerance set to 0, and setting it to 1e-6 didn't fix the
>>>> > problem.
>>>> >  How did you come up with that number?  What's wrong with setting it to
>>>> > 0?
>>>> >  In my case usually the left and top side of the vtkImageData is being
>>>> > eroded, such that if I call the filter many times, the vtkImageData will
>>>> > eventually be blank because it will all be eroded.   However, sometimes
>>>> > the
>>>> > bottom and right grow in size, I haven't figured out which situations
>>>> > cause
>>>> > which.
>>>> >
>>>> > On Wed, Feb 23, 2011 at 10:54 AM, David Gobbi <david.gobbi at gmail.com>
>>>> > wrote:
>>>> >>
>>>> >> Hi Jonathan,
>>>> >>
>>>> >> Whether a pixel is set depends on whether the center of the pixel
>>>> >> is inside or outside the contour, irregardless of what proportion of
>>>> >> the pixel's volume is inside or outside.
>>>> >>
>>>> >> The only adjustment is the Tolerance, which should be set to
>>>> >> around 1e-6 so that pixels right on the edge of the contour
>>>> >> are considered to be inside.  The tolerance cannot be negative.
>>>> >>
>>>> >>  - David
>>>> >>
>>>> >>
>>>> >> On Wed, Feb 23, 2011 at 11:22 AM, Jonathan Morra <jonmorra at gmail.com>
>>>> >> wrote:
>>>> >> > I am currently using vtkPolyDataToImageStencil to successfully
>>>> >> > convert
>>>> >> > contours represented as vtkPolyData to binary vtkImageData's.
>>>> >> >  However,
>>>> >> > I'm
>>>> >> > noticing a problem with the output sometimes.  Sometimes the
>>>> >> > resulting
>>>> >> > binary images are slightly smaller or slightly bigger than the poly
>>>> >> > data
>>>> >> > they were made from.  I assume this is the result of partial volume
>>>> >> > effects.
>>>> >> >  I would like to know 2 things
>>>> >> > 1.  How does vtkPolyDataToImageStencil handle partial volume.
>>>> >> > 2.  Is there a way to tune partial volume in
>>>> >> > vtkPolyDataToImageStencil?
>>>> >> >  For
>>>> >> > instance, a parameter which says if the contour includes less than x
>>>> >> > percentage of the pixel then that pixel is 0.
>>>> >> > Thanks,
>>>> >> > Jon
>>>> >> > PS If my assumption about partial volume effects is wrong, please let
>>>> >> > me
>>>> >> > know.
>>>> >> > _______________________________________________
>>>> >> > 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
>>>> >> >
>>>> >> >
>>>> >
>>>> >
>>>
>>>
>> _______________________________________________
>> 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
>>
>



More information about the vtkusers mailing list