<div> Dear All, </div><div>  <span class="Apple-tab-span" style="white-space:pre">        </span>I have developed the 3D MPR for CT using VTK and DCMTK stack. </div><div>  <span class="Apple-tab-span" style="white-space:pre">        </span>It works for Aquisition Data along z-axis. </div>
<div><br></div><div>  <span class="Apple-tab-span" style="white-space:pre">        </span>Now, I want to do MPR for MR data. </div><div>  <span class="Apple-tab-span" style="white-space:pre">        </span>MR data can be acquired along arbitrary axis. </div>
<div>  <span class="Apple-tab-span" style="white-space:pre">        </span>If MR data acquired in z-axis, My pipeline renders it correctly. </div><div>  <span class="Apple-tab-span" style="white-space:pre">        </span>If it arbitrary axis then I have problems. </div>
<div>  <span class="Apple-tab-span" style="white-space:pre">        </span>My steps </div><div>  <span class="Apple-tab-span" style="white-space:pre">        </span>1) I have created the volume from the MR data of same orientation. </div>
<div>  <span class="Apple-tab-span" style="white-space:pre">        </span>2) I have calculated the normal of slice  (V, normal unit vector of </div><div> <span class="Apple-tab-span" style="white-space:pre">        </span> plane) </div>
<div>  <span class="Apple-tab-span" style="white-space:pre">        </span>Now, I want to align this normal vector V to the Z-axis,so that my </div><div>  <span class="Apple-tab-span" style="white-space:pre">        </span>pipeline for CT will take care the rest. </div>
<div>  <span class="Apple-tab-span" style="white-space:pre">        </span>How do I do this?</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>In Z-axis aquisition (CT) I set the transform like :</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Transform-&gt;Identity(); <span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>switch(this-&gt;SliceType)</div>
<div>        {</div><div>        case AXIAL_SLICE:          </div><div>            break;</div><div>        case CORONAL_SLICE:           </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>   Transform-&gt;RotateX(90);<span class="Apple-tab-span" style="white-space:pre">        </span></div>
<div>            break;</div><div>        case SAGITTAL_SLICE:</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>Transform-&gt;RotateY(90);           </div><div>            Transform-&gt;RotateZ(90);</div>
<div>            break;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>For arbitrary axis acquisition:</div><div>
<span class="Apple-tab-span" style="white-space:pre">        </span>I set it as </div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Aquisition matrix: </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>mat = orientation matrix of the aquired slice.</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Transform-&gt;setMatrix(mat).</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>switch(this-&gt;SliceType)</div><div>        {</div><div>        case AXIAL_SLICE:          </div>
<div>            break;</div><div>        case CORONAL_SLICE:           </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>   Transform-&gt;RotateX(90);<span class="Apple-tab-span" style="white-space:pre">        </span></div>
<div>            break;</div><div>        case SAGITTAL_SLICE:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>    Transform-&gt;RotateY(90);           </div><div>            Transform-&gt;RotateZ(90);</div>
<div>            break;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>It appears to be renderring correctly.</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>Is it the right way to do it?</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>If yes, Now, how can we label left/Right,superior/inferior,anterior/posterior.</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>In CT case, I calculate using following function, given by the David clunie.</div><div>
<span class="Apple-tab-span" style="white-space:pre">        </span><a href="http://groups.google.com/group/comp.protocols.dicom/browse_thread/thread/1966e9c96b914af2/18783cb56fc54a56?lnk=gst&amp;q=image+orientation">http://groups.google.com/group/comp.protocols.dicom/browse_thread/thread/1966e9c96b914af2/18783cb56fc54a56?lnk=gst&amp;q=image+orientation</a>.</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>vector = vtkResliceImage-&gt;GetDirectionCosines()</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>char * </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>DerivedImagePlane::getOrientation(Vector3D vector) </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{ </div>
<div>        <span class="Apple-tab-span" style="white-space:pre">        </span>char *orientation=new char[4]; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>        char *optr = orientation; </div><div>
        <span class="Apple-tab-span" style="white-space:pre">        </span>*optr=&#39;\0&#39;; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>        char orientationX = vector.getX() &lt; 0 ? &#39;R&#39; : &#39;L&#39;; </div>
<div>        <span class="Apple-tab-span" style="white-space:pre">        </span>char orientationY = vector.getY() &lt; 0 ? &#39;A&#39; : &#39;P&#39;; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>        char orientationZ = vector.getZ() &lt; 0 ? &#39;F&#39; : &#39;H&#39;; </div>
<div>        <span class="Apple-tab-span" style="white-space:pre">        </span>double absX = fabs(vector.getX()); </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>        double absY = fabs(vector.getY()); </div>
<div>        <span class="Apple-tab-span" style="white-space:pre">        </span>double absZ = fabs(vector.getZ()); </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>        int i; </div><div>        <span class="Apple-tab-span" style="white-space:pre">        </span>for (i=0; i&lt;3; ++i) { </div>
<div>                <span class="Apple-tab-span" style="white-space:pre">        </span>if (absX&gt;.0001 &amp;&amp; absX&gt;absY &amp;&amp; absX&gt;absZ) { </div><div>                        <span class="Apple-tab-span" style="white-space:pre">        </span>*optr++=orientationX; </div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>                        absX=0; </div><div>        <span class="Apple-tab-span" style="white-space:pre">        </span>        } </div><div>                <span class="Apple-tab-span" style="white-space:pre">        </span>else if (absY&gt;.0001 &amp;&amp; absY&gt;absX &amp;&amp; absY&gt;absZ) { </div>
<div>                        <span class="Apple-tab-span" style="white-space:pre">        </span>*optr++=orientationY; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>                        absY=0; </div>
<div>        <span class="Apple-tab-span" style="white-space:pre">        </span>        } </div><div>                <span class="Apple-tab-span" style="white-space:pre">        </span>else if (absZ&gt;.0001 &amp;&amp; absZ&gt;absX &amp;&amp; absZ&gt;absY) { </div>
<div>                        <span class="Apple-tab-span" style="white-space:pre">        </span>*optr++=orientationZ; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>                        absZ=0; </div>
<div>        <span class="Apple-tab-span" style="white-space:pre">        </span>        } </div><div>                <span class="Apple-tab-span" style="white-space:pre">        </span>else break; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>                *optr=&#39;\0&#39;; </div>
<div>        <span class="Apple-tab-span" style="white-space:pre">        </span>} </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>        return orientation; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>} </div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>But as we are applying the matrix instead of identity matrix at the beginning in the transformation, the labelling is not working correctly for coronal/sagittal aquired dicom images.</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Could you pls help me to sort out this issue?</div><div><br></div><div>Thanks and regards</div><div>Prakash </div>