Thanks for your response, Luis!  The extent of my ITK experience pretty much boils down to using the itkImageToVTKImageFilter so that I can work with VTK.  Therefore, I don't know how to get the initial ITK image's origin.
<br><br>After my first post, I found that my PolyData is actually being flipped.&nbsp; I then found the vtkImageFlip class and that should take care of that problem.&nbsp; However, I haven&#39;t quite figured out the correspondence between the XML image coordinates and PolyData coordinates.&nbsp; It seems as though the &quot;3D pick position&quot; of the PolyData = 
128.8 * XML Image coordinate.&nbsp; The size of my dataset is 256 x 256 x 512 and the voxel size is just over 128.&nbsp; Is the 128 from taking the 256/2 or is it the voxel size or something else?&nbsp; <br>
<br>
The code I&#39;m using to display the vtk images is part of a much larger
program using KWWidgets, but I&#39;ve pasted the essential snippets that
take care of the rendering below.<br><br>Thanks for any help!<br>-Jake<br><br><br>/* -------- PolyData -------- */<br>this-&gt;PolyDataRenderWidget = vtkKWRenderWidget::New();<br><br>this-&gt;PolyDataRenderWidget-&gt;SetParent( this-&gt;GetMainPanelFrame() );
<br>this-&gt;PolyDataRenderWidget-&gt;Create();<br><br>this-&gt;PolyReader = vtkPolyDataReader::New();<br>this-&gt;PolyReader-&gt;SetFileName( this-&gt;polyDataFileName );<br><br>this-&gt;PolyMapper = vtkPolyDataMapper::New();
<br>this-&gt;PolyMapper-&gt;SetInputConnection( this-&gt;PolyReader-&gt;GetOutputPort() );<br><br>this-&gt;PolyActor = vtkActor::New();<br>this-&gt;PolyActor-&gt;SetMapper( this-&gt;PolyMapper );<br><br>//...here I create and set a vtkInteractorStyle for the PolyDataRenderWidget
<br><br>this-&gt;PolyDataRenderWidget-&gt;GetRenderer()-&gt;AddActor( this-&gt;PolyActor );<br>this-&gt;PolyDataRenderWidget-&gt;ResetCamera();<br>/* -------- end PolyData -------- */<br><br><br>
/* -------- XML image -------- */<br>this-&gt;OrthoRenderWidget = vtkKWRenderWidget::New();<br><br>this-&gt;ImageViewer2 = vtkImageViewer2::New();<br>this-&gt;ImageViewer2-&gt;SetRenderWindow( this-&gt;OrthoRenderWidget-&gt;GetRenderWindow() );
<br>this-&gt;ImageViewer2-&gt;SetRenderer( this-&gt;OrthoRenderWidget-&gt;GetRenderer() );<br>this-&gt;ImageViewer2-&gt;SetInput( this-&gt;GetMainXMLImageReader()-&gt;GetOutput() );<br>this-&gt;ImageViewer2-&gt;SetupInteractor( this-&gt;OrthoRenderWidget-&gt;GetRenderWindow()-&gt;GetInteractor() );
<br><br><br>this-&gt;scalarRange = this-&gt;GetMainXMLImageReader()-&gt;GetOutput()-&gt;GetScalarRange();<br>this-&gt;ImageViewer2-&gt;SetColorWindow( this-&gt;scalarRange[1] - this-&gt;scalarRange[0] );<br>this-&gt;ImageViewer2-&gt;SetColorLevel( 
0.5 * ( this-&gt;scalarRange[1] + this-&gt;scalarRange[0] ) );<br><br>this-&gt;OrthoRenderWidget-&gt;ResetCamera();<br>
/* -------- end XML image -------- */<br><br><br><br><div class="gmail_quote">On Nov 9, 2007 4:29 PM, Luis Ibanez &lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Jake,<br><br>There shouldn&#39;t be any need for a transformation between<br>the image and the polydata that is extracted from it.<br><br>What may be happening is that the code that you are using<br>for displaying the image along with the polydata is not
<br>taking into account the image origin.<br><br>Please look at the image origing of the initial ITK image,<br>and compare it with the image origing of its VTK counterpart.<br><br>Then post to the list the code that you are using for
<br>displaying the vtk image along with the polydata.<br><br>As a simple reference, you can for example display a small<br>sphere centered at the coordinates of the image origin as<br>they are reported in the ITK image.<br>
<br>If you don&#39;t see this sphere in the corner of the image,<br>then your display code is not placing the image slices<br>in their right position in space.<br><br>Please let us know what you find.<br><br><br> &nbsp; &nbsp;Thanks
<br><br><br> &nbsp; &nbsp; &nbsp; Luis<br><br><br>-------------------<br><div><div></div><div class="Wj3C7c">Jake Nickel wrote:<br>&gt; I have a program that uses ITK to read in a 3D Analyze format (.hdr,<br>&gt; .img) image, uses the itkImageToVTKImageFilter, and writes two images
<br>&gt; out, one using a vtkXMLImageDataWriter, and the other using a<br>&gt; vtkPolyDataWriter (after the image was passed through a<br>&gt; vtkContourFilter). &nbsp;The code snippet is pasted below.<br>&gt;<br>&gt; I then use another program to display these images. &nbsp;The polydata is
<br>&gt; surface rendered and the XML image is rendered as 3 orthogonal images<br>&gt; (transverse, sagittal, and coronal). &nbsp;I have noticed that the polydata<br>&gt; (X, Y, Z) locations returned from picking do not correspond to the same
<br>&gt; X, Y, Z locations in the orthogonal views.<br>&gt;<br>&gt; Is there a way that I can retrieve the transformation that has taken<br>&gt; place somewhere between reading in the image and writing it back out as<br>&gt; vtkPolyData so that I have a 2D-3D correspondence?
<br>&gt;<br>&gt; Any help is greatly appreciated, Thanks a bunch!<br>&gt; -Jake<br>&gt;<br>&gt; ========================<br>&gt; ...<br>&gt; &nbsp; typedef unsigned char PixelType;<br>&gt; &nbsp; const unsigned int Dimension = 3;<br>
&gt;<br>&gt; &nbsp; typedef itk::Image&lt; PixelType, Dimension &gt; ImageType;<br>&gt; &nbsp; typedef itk::ImageFileReader&lt; ImageType &gt; ReaderType;<br>&gt; &nbsp; typedef itk::ImageToVTKImageFilter&lt; ImageType &gt; &nbsp;ConnectorFilterType;
<br>&gt;<br>&gt; &nbsp; ReaderType::Pointer reader &nbsp;= ReaderType::New();<br>&gt; &nbsp; ConnectorFilterType::Pointer connector = ConnectorFilterType::New();<br>&gt;<br>&gt; &nbsp; reader-&gt;SetFileName( argv[1] );<br>&gt; &nbsp; reader-&gt;Update();
<br>&gt;<br>&gt; &nbsp; connector-&gt;SetInput( reader-&gt;GetOutput() );<br>&gt;<br>&gt; &nbsp; vtkXMLImageDataWriter * writer = vtkXMLImageDataWriter::New();<br>&gt; &nbsp; writer-&gt;SetInput( connector-&gt;GetOutput() );<br>&gt; &nbsp; writer-&gt;SetFileName( argv[2] );
<br>&gt; &nbsp; writer-&gt;Write();<br>&gt; &nbsp; writer-&gt;Delete();<br>&gt;<br>&gt; &nbsp; vtkContourFilter * filter = vtkContourFilter::New();<br>&gt; &nbsp; filter-&gt;SetInput( connector-&gt;GetOutput() );<br>&gt; &nbsp; filter-&gt;SetValue( 0, 1 );
<br>&gt;<br>&gt; &nbsp; vtkPolyDataWriter * pwriter = vtkPolyDataWriter::New();<br>&gt; &nbsp; pwriter-&gt;SetFileName( argv[3] );<br>&gt; &nbsp; pwriter-&gt;SetInput( filter-&gt;GetOutput() );<br>&gt; &nbsp; pwriter-&gt;Write();<br>&gt; &nbsp; pwriter-&gt;Delete();
<br>&gt;<br>&gt; &nbsp; filter-&gt;Delete();<br>&gt; ...<br>&gt; ========================<br>&gt;<br>&gt;<br></div></div>&gt; ------------------------------------------------------------------------<br>&gt;<br>&gt; _______________________________________________
<br>&gt; This is the private VTK discussion list.<br>&gt; Please keep messages on-topic. Check the FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><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></blockquote></div><br>