[vtkusers] vtkPolyDataToImageStencil with partial volume
Jonathan Morra
jonmorra at gmail.com
Thu Feb 24 15:17:52 EST 2011
OK, I'll use that as well. Thanks again for your help.
On Thu, Feb 24, 2011 at 9:54 AM, David Gobbi <david.gobbi at gmail.com> wrote:
> Look at the TracerWidget example that I mentioned.
>
> On Thu, Feb 24, 2011 at 10:32 AM, Jonathan Morra <jonmorra at gmail.com>
> wrote:
> > I've never used vtkTransformPolyDataFilter, how would I use that filter
> in
> > my situation?
> >
> > On Thu, Feb 24, 2011 at 9:17 AM, David Gobbi <david.gobbi at gmail.com>
> wrote:
> >>
> >> Hi Jonathan,
> >>
> >> I still recommend that you add a vtkTransformPolyDataFilter like in the
> >> ImageTracerWidget example. Right now your image slice is right on the
> >> top edge of the extruded contour, so the smallest amount of roundoff
> error
> >> might cause it to miss. By shifting the extruded contour up by half a
> >> voxel,
> >> you can preemptively guard against such errors.
> >>
> >> - David
> >>
> >>
> >> On Thu, Feb 24, 2011 at 10:09 AM, Jonathan Morra <jonmorra at gmail.com>
> >> wrote:
> >> > Actually, after setting the marching squares value to 0.5 and changing
> >> > the
> >> > linear extrusion filter it's working now. Thanks!!!
> >> >
> >> > On Thu, Feb 24, 2011 at 9:02 AM, Bill Lorensen <
> bill.lorensen at gmail.com>
> >> > wrote:
> >> >>
> >> >> 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
> >> >> >>
> >> >> >
> >> >
> >> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110224/457cd978/attachment.htm>
More information about the vtkusers
mailing list