<div>I just want to explain the coord issue in a bit more detail:</div><div><br></div><div>By default, most VTK image readers flip the images from their original top-to-bottom rasterization to a bottom-to-top rasterization instead.  This can be turned off by setting FileLowerLeftOn() so that VTK keeps the original rasterization order.  Anyone that cares about image orientation should ALWAYS keep the original rasterization order, in my opinion, which means using FileLowerLeftOn() in the reader.</div>

<div><br></div><div>Getting image orientation from the file header is another important thing.  I recommend getting the ImageOrientationPatient and ImagePositionPatient and simply storing them in a matrix for use in VTK, i.e. to be used as the matrix for actors and other prop3Ds, or for reslicing images to get them into the same coordinate system before combining them.</div>

<div><br></div><div>Finally, with the viewer, I recently added methods to vtkInteractorStyleImage to allow setting the &quot;up&quot; vector and &quot;left-to-right&quot; vector for the view window, so that you can establish the correct view orientation for axial, sagittal, coronal.  Conversely, the same can be done by setting the  camera position, focal point, and view-up.</div>

<div><br></div><div>A warning: the vtkImageViewer gets the image orientation wrong for any images that are rasterized from top-to-bottom like DICOM or JPEG.  I advise that people do not use vtkImageViewer.  The vtkImageViewer2 class is not much better, its default setting for XY, YZ, and XZ orientations are incorrect for medical images.  I recommend that people using VTK for medical images just use a plain vtkRenderWindow in combination with vtkInteractorStyleImage.</div>

<div><br></div><div> - David</div>
<br><br><div class="gmail_quote">On Mon, Jun 27, 2011 at 9:12 AM, David Gobbi <span dir="ltr">&lt;<a href="mailto:david.gobbi@gmail.com" target="_blank">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">


These are not viewer classes, they are just rendering classes and are therefore completely agnostic with regards to DICOM.<div><br></div><div>But for the record, I do not understand all the difficulty people have with this issue.  When I view DICOM images, I just do the following:</div>



<div>1) I equate the VTK world coordinate system with the DICOM patient coordinate system</div><div>2) I set the data-to-world transform from the information in the DICOM header</div><div>3) I set up the camera in my viewer to display the image in the desired orientation</div>



<div><br></div><div>So please let me go on the record as saying that there is no &quot;difference between VTK coords and DICOM coords&quot;.  That is a vicious rumour that people spread for reasons that are beyond me.  You can define the VTK world coordinate system to be whatever you want.</div>



<div><br></div><div>The problems that people have are due to the following:</div><div>1) The VTK image readers and importers don&#39;t deal with DICOM image orientation correctly</div><div>2) The vtkImageViewer does not deal with DICOM image orientation correctly</div>



<div>3) For each image, you must keep a 4x4 matrix describing the DICOM orientation</div><div><br></div><div>If someone were to fix the readers and the viewer, this DICOM vs. VTK issue would mostly disappear.</div><div><br>



</div><div>Regarding the second question, it&#39;s not up to me when these go into a stable release, Kitware controls the release schedule ;)</div><div><br></div><font color="#888888"><div> - David</div></font><div><div>


</div><div><div><br></div><div><br><br><div class="gmail_quote">
On Mon, Jun 27, 2011 at 8:34 AM, Jothy <span dir="ltr">&lt;<a href="mailto:jothybasu@gmail.com" target="_blank">jothybasu@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 dir="ltr">I wonder whether these classes has any fix for the different coordinates used by DICOm and vtk?<br><br>Thank you<br><font color="#888888"><br>Jothy</font><div><div></div><div><br><br><div class="gmail_quote">



On Mon, Jun 27, 2011 at 3:31 PM, Lic. José M. Rodriguez Bacallao <span dir="ltr">&lt;<a href="mailto:jmrbcu@gmail.com" target="_blank">jmrbcu@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">so, when this classes will be available in stable vtk?<br>
<br>
right now I am working with an snapshot from vtk git.<br>
<br>
On 6/27/11, Aashish Chaudhary &lt;<a href="mailto:aashish.chaudhary@kitware.com" target="_blank">aashish.chaudhary@kitware.com</a>&gt; wrote:<br>
&gt; Hi David,<br>
&gt;<br>
&gt; What Aaron said  +  Awesome!! (one more time)<br>
&gt;<br>
&gt; Looking at the features list, I think our project will be greatly<br>
&gt; benefited by your work. Thanks for sharing your work.<br>
&gt;<br>
&gt; Regards,<br>
&gt; Aashish<br>
&gt;<br>
&gt;<br>
&gt; On Mon, Jun 27, 2011 at 8:47 AM, Aaron Boxer &lt;<a href="mailto:boxerab@gmail.com" target="_blank">boxerab@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Awesome!!! Nice work; can&#39;t wait to use these classes.<br>
&gt;&gt;<br>
&gt;&gt; Aaron<br>
&gt;&gt;<br>
&gt;&gt; On Sun, Jun 26, 2011 at 6:15 PM, David Gobbi &lt;<a href="mailto:david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt; I&#39;m pleased to announce that I have finally completed my work on several<br>
&gt;&gt;&gt; new<br>
&gt;&gt;&gt; image rendering classes for VTK.  They are in the VTK git development<br>
&gt;&gt;&gt; tree,<br>
&gt;&gt;&gt; and a few of you have already tried them out (if you are one of those<br>
&gt;&gt;&gt; people, note that several feature and performance enhancements were added<br>
&gt;&gt;&gt; last week).  More info can be found at the following wiki page:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; <a href="http://www.vtk.org/Wiki/VTK/Image_Rendering_Classes" target="_blank">http://www.vtk.org/Wiki/VTK/Image_Rendering_Classes</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; In brief, these classes replace vtkImageActor and provide a much higher<br>
&gt;&gt;&gt; level of functionality.  They are new VTK actor and mapper classes<br>
&gt;&gt;&gt; specifically meant for image viewing.  What they are not: they are not<br>
&gt;&gt;&gt; widgets or viewers, although they provide machinery that can be used to<br>
&gt;&gt;&gt; write widget and viewer classes.  In other words, they are meant for<br>
&gt;&gt;&gt; people<br>
&gt;&gt;&gt; who like to roll their own image viewers.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The three new classes that I recommend for people to use are the<br>
&gt;&gt;&gt; following:<br>
&gt;&gt;&gt; vtkImageSlice - the new actor class for images<br>
&gt;&gt;&gt; vtkImageResliceMapper - mapper for drawing images for MPR viewers<br>
&gt;&gt;&gt; vtkImageProperty - for controlling lookup tables, window/level, opacity,<br>
&gt;&gt;&gt; etc<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Typical use cases:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 1) For an MPR viewer, use vtkInteractorStyleImage and set it to your<br>
&gt;&gt;&gt; desired<br>
&gt;&gt;&gt; view orientation. Then set the following properties in<br>
&gt;&gt;&gt; vtkImageResliceMapper:<br>
&gt;&gt;&gt; mapper-&gt;SliceFacesCameraOn()<br>
&gt;&gt;&gt; mapper-&gt;SliceAtFocalPointOn()<br>
&gt;&gt;&gt; The interactor will then allow you to pan, zoom, window/level, and (in 3D<br>
&gt;&gt;&gt; mode) rotate and slice.  See<br>
&gt;&gt;&gt; VTK/Examples/ImageProcessing/ImageInteractorReslice.py for an example.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 2) For a 3D ortho object, use multiple vtkImageResliceMapper objects, and<br>
&gt;&gt;&gt; for each one make a vtkPlane that describes the normal and position of<br>
&gt;&gt;&gt; the<br>
&gt;&gt;&gt; slice to extract. Then call these methods:<br>
&gt;&gt;&gt; mapper-&gt;SetSlicePlane(plane)<br>
&gt;&gt;&gt; mapper-&gt;ResampleToScreenPixelsOff()<br>
&gt;&gt;&gt; Turning the &quot;ResampleToScreenPixels&quot; option Off makes rotation faster, so<br>
&gt;&gt;&gt; it<br>
&gt;&gt;&gt; is recommended when rotations are going to be common operations.<br>
&gt;&gt;&gt;  Example:<br>
&gt;&gt;&gt; VTK/Rendering/Testing/Cxx/TestImageResliceMapperOffAxis.cxx<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Features:<br>
&gt;&gt;&gt; 1) oblique views (obviously!)<br>
&gt;&gt;&gt; 2) nearest-neighbor, linear, and cubic interpolation<br>
&gt;&gt;&gt; 3) modify image orientation with respect to world coords by setting<br>
&gt;&gt;&gt; vtkImageSlice&#39;s UserMatrix<br>
&gt;&gt;&gt; 4) fully multi-threaded reslicing and color mapping operations<br>
&gt;&gt;&gt; 5) streaming, i.e. only pulls the data needed for rendering<br>
&gt;&gt;&gt; 6) works well with very large images (as long as they fit in memory)<br>
&gt;&gt;&gt; 7) LOD-style interaction (switches to faster rendering for interaction)<br>
&gt;&gt;&gt; 8) blend images by adding multiple vtkImageSlice objects to a<br>
&gt;&gt;&gt; vtkImageStack<br>
&gt;&gt;&gt; 9) checkerboard images by setting &quot;CheckerboardOn&quot; in the<br>
&gt;&gt;&gt; vtkImageProperty<br>
&gt;&gt;&gt; 10) thick-slab views (see vtkImageResliceMapper for details)<br>
&gt;&gt;&gt; 11) works with vtkCellPicker for picking image voxels as points or cells<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; For large image viewing, on a 4GB computer (64-bit OS X) I&#39;ve displayed<br>
&gt;&gt;&gt; images up to 3GB in size with full interactivity, but YMMV.  As long as<br>
&gt;&gt;&gt; the<br>
&gt;&gt;&gt; mapper&#39;s ResampleToScreenPixels option is On, the mapper will never try<br>
&gt;&gt;&gt; to<br>
&gt;&gt;&gt; load the full image onto the GPU (which is what causes the vtkImageActor<br>
&gt;&gt;&gt; to<br>
&gt;&gt;&gt; be slow for large images).  The size of the images that you can display<br>
&gt;&gt;&gt; is<br>
&gt;&gt;&gt; limited only by main memory, I have displayed stacks of RGB images that<br>
&gt;&gt;&gt; are<br>
&gt;&gt;&gt; 10000x10000 pixels in size.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I do not plan to push these into the VTK 5.8 release (even if Kitware<br>
&gt;&gt;&gt; were<br>
&gt;&gt;&gt; to give me the go-ahead), because the VTK development tree has diverged<br>
&gt;&gt;&gt; too<br>
&gt;&gt;&gt; far from the VTK 5.8 release tree.  These new image classes are only<br>
&gt;&gt;&gt; possible due to recent improvements that I&#39;ve made to the picker, lookup<br>
&gt;&gt;&gt; table, and image reslice classes and they probably depend on a handful of<br>
&gt;&gt;&gt; recent changes made by other people, as well.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  - David<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Visit other Kitware open-source projects at<br>
&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;<br>
&gt;&gt;&gt; Please keep messages on-topic and check the VTK FAQ at:<br>
&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;<br>
&gt;&gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&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;<br>
&gt;&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt;<br>
&gt;&gt; Visit other Kitware open-source projects at<br>
&gt;&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt;<br>
&gt;&gt; Please keep messages on-topic and check the VTK FAQ at:<br>
&gt;&gt; <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
&gt;&gt;<br>
&gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; | Aashish Chaudhary<br>
&gt; | R&amp;D Engineer<br>
&gt; | Kitware Inc.<br>
&gt; | <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&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>
<br>
<br>
--<br>
Lic. José M. Rodriguez Bacallao<br>
Centro de Biofisica Medica<br>
-----------------------------------------------------------------<br>
Todos somos muy ignorantes, lo que ocurre es que no todos ignoramos lo mismo.<br>
<br>
Recuerda: El arca de Noe fue construida por aficionados, el titanic<br>
por profesionales<br>
-----------------------------------------------------------------<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
</blockquote></div><br></div></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br>