[vtkusers] vtkPolyDataToImageStencil with partial volume

David Gobbi david.gobbi at gmail.com
Wed Feb 23 14:59:46 EST 2011


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
>> >> >
>> >> >
>> >
>> >
>
>



More information about the vtkusers mailing list