This looks like my misunderstanding of <div>the vtkPolyData GetPoints function. It </div><div>apparently returns physical coordinates, </div><div>not indices. When I convert the physical</div><div>coordinates to the image indices, I get the </div>
<div>result I was expecting. </div><div><br></div><div>Thank you,</div><div>Cagatay</div><div><br><div class="gmail_quote">On Mon, May 7, 2012 at 1:54 PM, Cagatay Bilgin <span dir="ltr">&lt;<a href="mailto:bilgincc@gmail.com" target="_blank">bilgincc@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"><div><div>Hi Bill, </div><div><br></div><div>#include &quot;itkImageToVTKImageFilter.h&quot;</div><div>#include &quot;itkVTKImageToImageFilter.h&quot;</div>

<div><br></div><div>#include &lt;vtkDiscreteMarchingCubes.h&gt;</div>
<div>#include &lt;vtkSmartPointer.h&gt;</div><div><br></div><div>#include  &quot;itkImageFileWriter.h&quot;</div><div>#include  &quot;itkImageFileReader.h&quot;</div><div><br></div><div><br></div><div>#include &quot;vtkPolyDataMapper.h&quot;</div>


<div>#include &quot;vtkActor.h&quot;</div><div>#include &quot;vtkRenderer.h&quot;</div><div>#include &quot;vtkRenderWindow.h&quot;</div><div>#include &quot;vtkRenderWindowInteractor.h&quot;</div><div><br></div><div>int main(int argc, char*argv[]){</div>


<div><br></div><div>  if(argc!=2){</div><div>    std::cout &lt;&lt; argv[0] &lt;&lt; &quot; inputFileName.mhd&quot; &lt;&lt; std::endl;</div><div>    return -1;</div><div>  }</div><div><br></div><div>  typedef itk::Image&lt;unsigned int,3&gt; ImageType;</div>


<div>  typedef itk::ImageFileReader&lt;ImageType&gt; ReaderType;  </div><div>  ReaderType::Pointer reader = ReaderType::New();</div><div>  reader-&gt;SetFileName(argv[1]);</div><div>  reader-&gt;Update();</div><div>  ImageType::Pointer input = reader-&gt;GetOutput();</div>


<div><br></div><div>  typedef itk::ImageToVTKImageFilter&lt;ImageType&gt; ITK2VTKType;</div><div>  ITK2VTKType::Pointer itk2vtk = ITK2VTKType::New();</div><div>  itk2vtk-&gt;SetInput(input);</div><div>  itk2vtk-&gt;Update();</div>


<div><br></div><div>  //extent and origin seems correct</div><div>  double* origin  = itk2vtk-&gt;GetOutput()-&gt;GetOrigin();</div><div>  int* extent  = itk2vtk-&gt;GetOutput()-&gt;GetExtent();    </div><div>  std::cout &lt;&lt; input-&gt;GetLargestPossibleRegion().GetIndex() &lt;&lt; std::endl;</div>


<div>  std::cout &lt;&lt; extent[0] &lt;&lt; &quot; &quot; &lt;&lt; extent[1] &lt;&lt; &quot; &quot; </div><div>            &lt;&lt; extent[2] &lt;&lt; &quot; &quot; &lt;&lt; extent[3] &lt;&lt; &quot; &quot;</div><div>            &lt;&lt; extent[4] &lt;&lt; &quot; &quot; &lt;&lt; extent[5] &lt;&lt; std::endl;</div>


<div> </div><div>  vtkSmartPointer&lt;vtkDiscreteMarchingCubes&gt; discreteCubes =</div><div>    vtkSmartPointer&lt;vtkDiscreteMarchingCubes&gt;::New();</div><div>  discreteCubes-&gt;SetInput(itk2vtk-&gt;GetOutput());</div>


<div>  discreteCubes-&gt;GenerateValues(1, 1, 1); //TODO Fixed numbers</div><div>  discreteCubes-&gt;Update();</div><div><br></div><div>  //The object starts around the 10th slice, there is a problem here.</div><div>  vtkSmartPointer&lt;vtkPolyData&gt; cubes = discreteCubes-&gt;GetOutput();</div>


<div>  for(unsigned int i = 0; i &lt; cubes-&gt;GetNumberOfPoints(); i++)</div><div>  {</div><div>    double p[3];</div><div>    cubes-&gt;GetPoint(i, p);</div><div>    std::cout &lt;&lt; p[0] &lt;&lt; &quot; &quot; &lt;&lt; p[1] &lt;&lt; &quot; &quot; &lt;&lt; p[2] &lt;&lt; std::endl;</div>


<div>  }</div><div><br></div><div><br></div><div>  // Create a mapper and actor</div><div>  vtkSmartPointer&lt;vtkPolyDataMapper&gt; surfaceMapper = </div><div>    vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();</div><div>


  surfaceMapper-&gt;SetInputConnection(discreteCubes-&gt;GetOutputPort());</div><div>  vtkSmartPointer&lt;vtkActor&gt; surfaceActor = vtkSmartPointer&lt;vtkActor&gt;::New();</div><div>  surfaceActor-&gt;SetMapper(surfaceMapper);</div>


<div><br></div><div>  // Create a renderer, render window, and interactor</div><div>  vtkSmartPointer&lt;vtkRenderer&gt; renderer = </div><div>    vtkSmartPointer&lt;vtkRenderer&gt;::New();</div><div>  vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow = </div>


<div>    vtkSmartPointer&lt;vtkRenderWindow&gt;::New();</div><div>  renderWindow-&gt;AddRenderer(renderer);</div><div>  vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor = </div><div>    vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();</div>


<div>  renderWindowInteractor-&gt;SetRenderWindow(renderWindow);</div><div> </div><div>  // Add the actor to the scene</div><div>  renderer-&gt;AddActor(surfaceActor);</div><div>  renderer-&gt;SetBackground(.1, .2, .3); // Background color blue</div>


<div>  renderWindow-&gt;Render();</div><div>  renderWindowInteractor-&gt;Start();</div><div><br></div><div>}</div></div><div><br></div><div>I have also uploaded the data I am using here:</div><div><a href="http://vision.lbl.gov/People/bilgin/input.tar.gz" target="_blank">http://vision.lbl.gov/People/bilgin/input.tar.gz</a></div>


<div><br></div><div>All I am trying to do is obtain the indices of points on the </div><div>surface. </div><div><br></div><div>Thank you, </div><span><font color="#888888">Cagatay</font></span><div>
<div><div><br><div class="gmail_quote">On Mon, May 7, 2012 at 12:46 PM, Bill Lorensen <span dir="ltr">&lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@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">Please post a small compilable example that illustrates the problem.<br>
<div><div><br>
On Mon, May 7, 2012 at 2:18 PM, Cagatay Bilgin &lt;<a href="mailto:bilgincc@gmail.com" target="_blank">bilgincc@gmail.com</a>&gt; wrote:<br>
&gt; Hello vtk-users<br>
&gt;<br>
&gt; I am having problems understanding the<br>
&gt; output of vtkDiscreteMarchingCubes.<br>
&gt;<br>
&gt; when I print the output polydata points, they<br>
&gt; do not match the input positions. It looks like<br>
&gt; the filter is doing a bounding box for the<br>
&gt; object. The extent and the origin seems<br>
&gt; to change. My sphere is located around 100,100,100<br>
&gt; with a radius of 10 in the input image, after the<br>
&gt; marching cubes it is around 10,10,10 with a<br>
&gt; radius of 10. How can make the filter give me<br>
&gt; the correct indices ?<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Cagatay<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the VTK FAQ at:<br>
&gt; <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
&gt;<br>
<span><font color="#888888"><br>
<br>
<br>
--<br>
Unpaid intern in BillsBasement at noware dot com<br>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div>