OK I changed the linear extrusion filter as follows, and the error still occurs.<div><div><br></div><div>vtkLinearExtrusionFilter extruder = new vtkLinearExtrusionFilter();</div><div>extruder.SetInput(drawnCircle);</div><div>
extruder.SetScaleFactor(1);</div><div>extruder.SetExtrusionTypeToNormalExtrusion();</div><div>extruder.SetVector(0, 0, spacing[2]);</div><div>extruder.Update();</div><br><div class="gmail_quote">On Wed, Feb 23, 2011 at 11:59 PM, David Gobbi <span dir="ltr">&lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">I&#39;ve only had a chance to do a quick look through your code, only one<br>
thing looks definitely wrong:<br>
<br>
  extruder.SetVector(spacing);<br>
<br>
This extrudes the contour along a diagonal line, which is probably not<br>
what you intended.  You want to extrude only in the direction of the<br>
slice normal.  Take a look at how the extruder is set up in<br>
VTK/Widgets/Testing/Cxx/TestImageTracerWidget.cxx and also note the<br>
TransformPolyData that is applied to the extruder&#39;s output.<br>
<font color="#888888"><br>
 - David<br>
</font><div><div></div><div class="h5"><br>
<br>
<br>
On Wed, Feb 23, 2011 at 8:49 PM, Jonathan Morra &lt;<a href="mailto:jonmorra@gmail.com">jonmorra@gmail.com</a>&gt; wrote:<br>
&gt; Here&#39;s a copy of a small working program in Java that shows the issues that<br>
&gt; I&#39;m talking about.  The program will spit out 2 lines of text.  I need them<br>
&gt; both to evaluate to true (that the center and bounds stay the same).  In<br>
&gt; addition a render window will open up and clearly show that the two circles<br>
&gt; do not line up with each other (again they should).  Please let me know how<br>
&gt; I can fix this problem.<br>
&gt; Thanks!!<br>
&gt; import vtk.*;<br>
&gt; import java.util.Arrays;<br>
&gt; public class PolyDataToImageToPolyDataTest {<br>
&gt;     static {<br>
&gt;         System.loadLibrary(&quot;vtkCommonJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkFilteringJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkGenericFilteringJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkGraphicsJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkHybridJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkImagingJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkIOJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkRenderingJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkVolumeRenderingJava&quot;);<br>
&gt;         System.loadLibrary(&quot;vtkWidgetsJava&quot;);<br>
&gt;     }<br>
&gt;     public static void main(String[] args) {<br>
&gt;         vtkRegularPolygonSource polygonSource = new<br>
&gt; vtkRegularPolygonSource();<br>
&gt;         polygonSource.SetNumberOfSides(50);<br>
&gt;         polygonSource.SetRadius(50);<br>
&gt;         polygonSource.GeneratePolygonOff();<br>
&gt;         polygonSource.Update();<br>
&gt;         vtkImageData blankImage = new vtkImageData();<br>
&gt;         int[] extent = {0, 512, 0, 512, 0, 100};<br>
&gt;         double[] origin = {-256, -256, 0};<br>
&gt;         double[] spacing = {1, 1, 1};<br>
&gt;         blankImage.SetExtent(extent);<br>
&gt;         blankImage.SetOrigin(origin);<br>
&gt;         blankImage.SetSpacing(spacing);<br>
&gt;         blankImage.SetScalarTypeToUnsignedChar();<br>
&gt;         blankImage.AllocateScalars();<br>
&gt;         vtkPolyData initialCircle = polygonSource.GetOutput();<br>
&gt;         vtkPolyData drawnCircle = new vtkPolyData();<br>
&gt;         drawnCircle.DeepCopy(initialCircle);<br>
&gt;         // I&#39;m choosing 10 here because this problem gets exacerbated after<br>
&gt; each run.  By varying this, the problem will get less or more severe.<br>
&gt;         for (int i=0; i&lt;10; i++) {<br>
&gt;             vtkLinearExtrusionFilter extruder = new<br>
&gt; vtkLinearExtrusionFilter();<br>
&gt;             extruder.SetInput(drawnCircle);<br>
&gt;             extruder.SetVector(spacing);<br>
&gt;             extruder.Update();<br>
&gt;             vtkPolyData extruderOutput = extruder.GetOutput();<br>
&gt;             vtkPolyDataToImageStencil pol2Stenc = new<br>
&gt; vtkPolyDataToImageStencil();<br>
&gt;             pol2Stenc.SetTolerance(0);<br>
&gt;             pol2Stenc.SetInput(extruderOutput);<br>
&gt;             pol2Stenc.SetInformationInput(blankImage);<br>
&gt;             pol2Stenc.Update();<br>
&gt;             vtkImageStencilData pol2StencOutput = pol2Stenc.GetOutput();<br>
&gt;             vtkImageStencil stencil = new vtkImageStencil();<br>
&gt;             stencil.SetInput(blankImage);<br>
&gt;             stencil.ReverseStencilOn();<br>
&gt;             stencil.SetStencil(pol2StencOutput);<br>
&gt;             stencil.Update();<br>
&gt;             vtkImageData image = stencil.GetOutput();<br>
&gt;<br>
&gt;             vtkMarchingSquares marching = new vtkMarchingSquares();<br>
&gt;             marching.SetInput(image);<br>
&gt;             // For some reason the circle moves in all 3 dimensions, so I<br>
&gt; need to vary the z-coordinate w.r.t the iteration number<br>
&gt;             marching.SetImageRange(new int[] {0, 512, 0, 512, i+1, i+1});<br>
&gt;             marching.SetValue(0, 1);<br>
&gt;             marching.Update();<br>
&gt;             vtkPolyData marchingOutput = marching.GetOutput();<br>
&gt;             vtkStripper stripper = new vtkStripper();<br>
&gt;             stripper.SetInput(marchingOutput);<br>
&gt;             stripper.Update();<br>
&gt;             drawnCircle = stripper.GetOutput();<br>
&gt;         }<br>
&gt;         boolean sameCenter = Arrays.equals(drawnCircle.GetCenter(),<br>
&gt; initialCircle.GetCenter());<br>
&gt;         boolean sameBounds = Arrays.equals(drawnCircle.GetBounds(),<br>
&gt; initialCircle.GetBounds());<br>
&gt;         System.out.println(&quot;Same center: &quot; + sameCenter);<br>
&gt;         System.out.println(&quot;Same bounds: &quot; + sameBounds);<br>
&gt;         vtkPolyDataMapper circleMapper = new vtkPolyDataMapper();<br>
&gt;         circleMapper.SetInput(initialCircle);<br>
&gt;         circleMapper.ScalarVisibilityOff();<br>
&gt;         circleMapper.Update();<br>
&gt;         vtkActor circleActor = new vtkActor();<br>
&gt;         circleActor.SetMapper(circleMapper);<br>
&gt;         circleActor.GetProperty().SetRepresentationToSurface();<br>
&gt;         circleActor.GetProperty().SetColor(1, 0, 0);<br>
&gt;         vtkPolyDataMapper outCircleMapper = new vtkPolyDataMapper();<br>
&gt;         outCircleMapper.SetInput(drawnCircle);<br>
&gt;         outCircleMapper.ScalarVisibilityOff();<br>
&gt;         outCircleMapper.Update();<br>
&gt;         vtkActor outCircleActor = new vtkActor();<br>
&gt;         outCircleActor.SetMapper(outCircleMapper);<br>
&gt;         outCircleActor.GetProperty().SetRepresentationToSurface();<br>
&gt;         outCircleActor.GetProperty().SetColor(0, 1, 0);<br>
&gt;         vtkRenderer ren = new vtkRenderer();<br>
&gt;         ren.AddActor(circleActor);<br>
&gt;         ren.AddActor(outCircleActor);<br>
&gt;         ren.SetBackground(0.1, 0.2, 0.4);<br>
&gt;         vtkRenderWindow renWin = new vtkRenderWindow();<br>
&gt;         renWin.AddRenderer(ren);<br>
&gt;         vtkRenderWindowInteractor iren = new vtkRenderWindowInteractor();<br>
&gt;         renWin.SetInteractor(iren);<br>
&gt;         renWin.Render();<br>
&gt;         ren.ResetCamera();<br>
&gt;         iren.Start();<br>
&gt;     }<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Feb 23, 2011 at 1:31 PM, Jonathan Morra &lt;<a href="mailto:jonmorra@gmail.com">jonmorra@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; I tried it but it doesn&#39;t work, any other ideas?  I really appreciate your<br>
&gt;&gt; help.<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Feb 23, 2011 at 1:01 PM, David Gobbi &lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi Jonathan,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; If you convert a contour to a binary image and then back to a contour,<br>
&gt;&gt;&gt; you won&#39;t get the exactly the same contour back again.  That said, I<br>
&gt;&gt;&gt; think that you can get what you want as long as you apply the correct<br>
&gt;&gt;&gt; tolerances.  You can try a contour value of 0.9 for marching squares,<br>
&gt;&gt;&gt; which is fairly tight but not so tight that it will cause the edge<br>
&gt;&gt;&gt; problems that I mentioned in my earlier email. It might work, or it<br>
&gt;&gt;&gt; might not work.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  - David<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Wed, Feb 23, 2011 at 1:07 PM, Jonathan Morra &lt;<a href="mailto:jonmorra@gmail.com">jonmorra@gmail.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt; &gt; I tried that and now the contour appears to both erode and dilate.<br>
&gt;&gt;&gt; &gt;  What I&#39;m<br>
&gt;&gt;&gt; &gt; doing it to take as input some contour data.  I then convert it to a<br>
&gt;&gt;&gt; &gt; binary<br>
&gt;&gt;&gt; &gt; image for internal storage using vtkPolyDataToImageStencil.  I then<br>
&gt;&gt;&gt; &gt; take a<br>
&gt;&gt;&gt; &gt; slice of the contour and show it to the user using vtkMarchingSquares.<br>
&gt;&gt;&gt; &gt;  The<br>
&gt;&gt;&gt; &gt; user can then modify the contour.  When the user is done modifying the<br>
&gt;&gt;&gt; &gt; contour I convert it back to binary data for storage using the<br>
&gt;&gt;&gt; &gt; vtkPolyDataToImageStencil, and then again reslice it and use<br>
&gt;&gt;&gt; &gt; vtkMarchingSquares to show the user the contour again.  This process is<br>
&gt;&gt;&gt; &gt; very<br>
&gt;&gt;&gt; &gt; quick.  What is happening is that the contour appears to be moving on<br>
&gt;&gt;&gt; &gt; the<br>
&gt;&gt;&gt; &gt; screen as this cycle happens even if no edits are done.<br>
&gt;&gt;&gt; &gt; That is the underlying problem I need to fix.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; On Wed, Feb 23, 2011 at 11:59 AM, David Gobbi &lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; I&#39;ve never used marching squares, but I have a guess as<br>
&gt;&gt;&gt; &gt;&gt; to what the problem might be.  If your binary image has<br>
&gt;&gt;&gt; &gt;&gt; values &quot;0&quot; and &quot;1&quot; then you should contour it at &quot;0.5&quot;.<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;  - David<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; On Wed, Feb 23, 2011 at 12:27 PM, Jonathan Morra &lt;<a href="mailto:jonmorra@gmail.com">jonmorra@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt; If that&#39;s the case, then maybe I could have issues on the other side<br>
&gt;&gt;&gt; &gt;&gt; &gt; (converting binary images to contours, I do both).  For this I&#39;m<br>
&gt;&gt;&gt; &gt;&gt; &gt; using<br>
&gt;&gt;&gt; &gt;&gt; &gt; vtkMarchingSquares followed by vtkStripper<br>
&gt;&gt;&gt; &gt;&gt; &gt; int[] extent = binaryOrgan.GetExtent();<br>
&gt;&gt;&gt; &gt;&gt; &gt;         switch (orientation) {<br>
&gt;&gt;&gt; &gt;&gt; &gt;             case OrthoPanel.ORIENTATION_XY:<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 extent[4] = slice;<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 extent[5] = slice;<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 break;<br>
&gt;&gt;&gt; &gt;&gt; &gt;             case OrthoPanel.ORIENTATION_XZ:<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 extent[2] = slice;<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 extent[3] = slice;<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 break;<br>
&gt;&gt;&gt; &gt;&gt; &gt;             case OrthoPanel.ORIENTATION_YZ:<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 extent[0] = slice;<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 extent[1] = slice;<br>
&gt;&gt;&gt; &gt;&gt; &gt;                 break;<br>
&gt;&gt;&gt; &gt;&gt; &gt;         }<br>
&gt;&gt;&gt; &gt;&gt; &gt; vtkMarchingSquares marching = new vtkMarchingSquares();<br>
&gt;&gt;&gt; &gt;&gt; &gt;         marching.SetInput(binaryOrgan);<br>
&gt;&gt;&gt; &gt;&gt; &gt;         marching.SetImageRange(extent);<br>
&gt;&gt;&gt; &gt;&gt; &gt;         marching.SetValue(0, 1);<br>
&gt;&gt;&gt; &gt;&gt; &gt;         marching.Update();<br>
&gt;&gt;&gt; &gt;&gt; &gt;         vtkPolyData marchingOutput = marching.GetOutput();<br>
&gt;&gt;&gt; &gt;&gt; &gt;         vtkStripper stripper = new vtkStripper();<br>
&gt;&gt;&gt; &gt;&gt; &gt;         stripper.SetInput(marchingOutput);<br>
&gt;&gt;&gt; &gt;&gt; &gt;         stripper.Update();<br>
&gt;&gt;&gt; &gt;&gt; &gt; Does anything look like it could be causing my issues there?<br>
&gt;&gt;&gt; &gt;&gt; &gt; On Wed, Feb 23, 2011 at 11:18 AM, David Gobbi<br>
&gt;&gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; The value &quot;1e-6&quot; is a common tolerance because it is larger than<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; most roundoff errors that are likely to occur in the calculations,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; but still small enough that it won&#39;t appreciably increase size of<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; region.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; Setting the tolerance to zero does exactly what you noted.  If the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; pixel is exactly on the edge, then it is considered to be inside if<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; edge is a leading edge, or outside if the edge is a trailing edge.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; This is done so that if you have two contours which are adjacent<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; (i.e. share an edge), the edge voxels will be considered to be in<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; just one of the two contours instead of in both.  If the tolerance<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; is<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; set larger than zero, then the edge pixels would always be<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; considered<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; to be in both contours.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; If you are dealing with rectangular contours, then the contour<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; lines should be made so that they lie halfway between pixels,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; instead<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; of lying directly on top of the pixels.  Then there is no<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; uncertainty<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; about whether a pixel lies inside or outside.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;  - David<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; On Wed, Feb 23, 2011 at 11:58 AM, Jonathan Morra<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &lt;<a href="mailto:jonmorra@gmail.com">jonmorra@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; I had the tolerance set to 0, and setting it to 1e-6 didn&#39;t fix<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; problem.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;  How did you come up with that number?  What&#39;s wrong with setting<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; it<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; 0?<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;  In my case usually the left and top side of the vtkImageData is<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; being<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; eroded, such that if I call the filter many times, the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; vtkImageData<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; will<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; eventually be blank because it will all be eroded.   However,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; sometimes<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; bottom and right grow in size, I haven&#39;t figured out which<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; situations<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; cause<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; which.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; On Wed, Feb 23, 2011 at 10:54 AM, David Gobbi<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Hi Jonathan,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Whether a pixel is set depends on whether the center of the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; pixel<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; is inside or outside the contour, irregardless of what<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; proportion of<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; the pixel&#39;s volume is inside or outside.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; The only adjustment is the Tolerance, which should be set to<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; around 1e-6 so that pixels right on the edge of the contour<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; are considered to be inside.  The tolerance cannot be negative.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;  - David<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; On Wed, Feb 23, 2011 at 11:22 AM, Jonathan Morra<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &lt;<a href="mailto:jonmorra@gmail.com">jonmorra@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; I am currently using vtkPolyDataToImageStencil to successfully<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; convert<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; contours represented as vtkPolyData to binary vtkImageData&#39;s.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;  However,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; I&#39;m<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; noticing a problem with the output sometimes.  Sometimes the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; resulting<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; binary images are slightly smaller or slightly bigger than the<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; poly<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; data<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; they were made from.  I assume this is the result of partial<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; volume<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; effects.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;  I would like to know 2 things<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; 1.  How does vtkPolyDataToImageStencil handle partial volume.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; 2.  Is there a way to tune partial volume in<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; vtkPolyDataToImageStencil?<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;  For<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; instance, a parameter which says if the contour includes less<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; than<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; x<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; percentage of the pixel then that pixel is 0.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Thanks,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Jon<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; PS If my assumption about partial volume effects is wrong,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; please<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; let<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; me<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; know.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; _______________________________________________<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Visit other Kitware open-source projects at<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Please keep messages on-topic and check the VTK FAQ at:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>