<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->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->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->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->RotateY(90); </div><div> Transform->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->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->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->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->RotateY(90); </div><div> Transform->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&q=image+orientation">http://groups.google.com/group/comp.protocols.dicom/browse_thread/thread/1966e9c96b914af2/18783cb56fc54a56?lnk=gst&q=image+orientation</a>.</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>>>>>>>>>>>>>></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>vector = vtkResliceImage->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='\0'; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span> char orientationX = vector.getX() < 0 ? 'R' : 'L'; </div>
<div> <span class="Apple-tab-span" style="white-space:pre">        </span>char orientationY = vector.getY() < 0 ? 'A' : 'P'; </div><div><span class="Apple-tab-span" style="white-space:pre">        </span> char orientationZ = vector.getZ() < 0 ? 'F' : 'H'; </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<3; ++i) { </div>
<div> <span class="Apple-tab-span" style="white-space:pre">        </span>if (absX>.0001 && absX>absY && absX>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>.0001 && absY>absX && absY>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>.0001 && absZ>absX && absZ>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='\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> 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><<<<<<<<<<<</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>