Thanks for the recipe David, it works like a charm!<br><br><div class="gmail_quote">On Fri, May 4, 2012 at 2:09 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">The recipe for getting image pixels to match screen pixels is, roughly:<br>
<br>
render_window-&gt;Render();<br>
int *rsize = renderer-&gt;GetSize();<br>
int height = rsize[1];<br>
vtkCamera *camera = renderer-&gt;GetActiveCamera();<br>
camera-&gt;ParallelProjectionOn();<br>
camera-&gt;SetParallelScale(0.5*height*yspacing);<br>
render_window-&gt;Render();<br>
<br>
If the image is not yet calibrated, then it should be fine to use<br>
a yspacing of 1.<br>
<span class="HOEnZb"><font color="#888888"><br>
 - David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Thu, May 3, 2012 at 11:33 AM, Siddharth Vikal<br>
&lt;<a href="mailto:siddharthvikal@gmail.com">siddharthvikal@gmail.com</a>&gt; wrote:<br>
&gt; Thanks David for detailed response.<br>
&gt;<br>
&gt; Thanks, yes I do understand now more clearly the series of transformations<br>
&gt; that the image goes through when vtkImageSlice or vtkImageActor is in use.<br>
&gt; And I completely agree and am for, equating the world coordinate system with<br>
&gt; the DICOM patient coordinate system. It is the camera transformations and<br>
&gt; view transformation I&#39;m interested in (world --&gt; view --&gt; screen).<br>
&gt;<br>
&gt; Perhaps, it would make more sense to you if I explain the particular<br>
&gt; scenario a bit better. Consider the situation where the image that one has<br>
&gt; acquired are just off the hardware, where the spacing of voxels is not yet<br>
&gt; known. A manual calibration step is then needed to actually determine the<br>
&gt; pixel spacing. In this case, user prefers to the see the image as and how it<br>
&gt; comes out of the hardware i.e. the native pixel size equated to computer<br>
&gt; monitor&#39;s pixels. Based on that calibrated pixel size, the measurements have<br>
&gt; to added to image.  My thought was that since vtkDistanceWidget works well<br>
&gt; with vtkImageActor/vtkImageSlice, it would help to know the exact scaling so<br>
&gt; that I can accurately calculate calibrated pixel size and enable<br>
&gt; vtkDistanceWidget display correct measurements.<br>
&gt;<br>
&gt; regards,<br>
&gt; Siddharth<br>
&gt;<br>
&gt;<br>
&gt; On Thu, May 3, 2012 at 8:38 PM, David Gobbi &lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi Siddharth,<br>
&gt;&gt;<br>
&gt;&gt; If you just want to map your image pixels directly to screen pixels,<br>
&gt;&gt; then there&#39;s hardly any reason to use a computer graphics toolkit like<br>
&gt;&gt; VTK at all.  The goal of vtkImageActor and vtkImageSlice is to place<br>
&gt;&gt; an image into a 3D scene, so that the vtkCamera can then be set up to<br>
&gt;&gt; view that scene from a particular viewpoint.<br>
&gt;&gt;<br>
&gt;&gt; There are several coordinate transformations that occur along the way.<br>
&gt;&gt;<br>
&gt;&gt; First, the sampling information for the image is applied, i.e. the<br>
&gt;&gt; spacing and voxels and the position of the lower-left corner voxel of<br>
&gt;&gt; the image volume (or upper-left in the case of DICOM).  This<br>
&gt;&gt; transformation maps the voxels to a physical block of space (usually<br>
&gt;&gt; using millimetres as units).<br>
&gt;&gt;<br>
&gt;&gt; Next, the prop3D transformation is applied.  This establishes the<br>
&gt;&gt; position of the aforementioned block of space within the world<br>
&gt;&gt; coordinate system. For medical applications, I always equate the world<br>
&gt;&gt; coordinate system with the DICOM patient coordinate system of my<br>
&gt;&gt; primary image series, in order to keep things simple.<br>
&gt;&gt;<br>
&gt;&gt; Next, there are two camera transformation that are applied (a view<br>
&gt;&gt; transformation and a projection transformation) that map the world<br>
&gt;&gt; coordinates to the view coordinates, followed by a viewport<br>
&gt;&gt; transformation that maps the viewport coordinates to screen pixels.<br>
&gt;&gt;<br>
&gt;&gt; None of these transformations are specific to VTK.  The same basic<br>
&gt;&gt; approach is used in virtually all modern computer graphics libraries.<br>
&gt;&gt;<br>
&gt;&gt; There are recipes that you can apply to achieve basic effects (e.g<br>
&gt;&gt; like viewing a 2D slice of an image at a specific zoom factor), but in<br>
&gt;&gt; order to get the most out of VTK, it is important understand the<br>
&gt;&gt; computer graphics fundamentals that underlie the toolkit.<br>
&gt;&gt;<br>
&gt;&gt;  - David<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Thu, May 3, 2012 at 7:32 AM, sidd_vtk &lt;<a href="mailto:siddharthvikal@gmail.com">siddharthvikal@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Hi David &amp; all vtk users,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I&#39;m using the newly added vtkImageSlice class (I&#39;ve used vtkImageActor<br>
&gt;&gt; &gt; also<br>
&gt;&gt; &gt; with the same issue that I&#39;m describing below). I set up the pipeline,<br>
&gt;&gt; &gt; and<br>
&gt;&gt; &gt; the image shows up. The issue is that the image that comes up does not<br>
&gt;&gt; &gt; preserve its original size in pixels unlike how vtkActor2D does. To be<br>
&gt;&gt; &gt; more<br>
&gt;&gt; &gt; specific and clear, e.g. if the image size in pixels is 512x512, the use<br>
&gt;&gt; &gt; of<br>
&gt;&gt; &gt; vtkActor2D results in displaying the image of size 512x512 pixels, but<br>
&gt;&gt; &gt; use<br>
&gt;&gt; &gt; of vtkImageSlice or vtkImageActor displays in size other than true size<br>
&gt;&gt; &gt; of<br>
&gt;&gt; &gt; the image. And I can&#39;t seem to figure out the scale factor that has been<br>
&gt;&gt; &gt; applied.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I need to use vtkImageSlice or vtkImageActor, because they work well<br>
&gt;&gt; &gt; with<br>
&gt;&gt; &gt; vtkDistanceWidget. But I also require 1:1 display of the image. If the<br>
&gt;&gt; &gt; scale<br>
&gt;&gt; &gt; factor is known, I can re-transform my image to get what I want.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Can you please point me the code where this re-scaling of the image<br>
&gt;&gt; &gt; happens<br>
&gt;&gt; &gt; before it gets rendered? or How to fetch the scaling that has been<br>
&gt;&gt; &gt; applied<br>
&gt;&gt; &gt; to the image when vtkImageSlice or vtkImageActor has been used?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Any help is greatly appreciated.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; regards,<br>
&gt;&gt; &gt; Siddharth<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>