<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML DIR=ltr><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"></HEAD><BODY>
<DIV id=idOWAReplyText3493 dir=ltr>
<DIV dir=ltr><FONT face=Arial color=#000000 size=3>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT 
face="Times New Roman">Hello<?xml:namespace prefix = o ns = 
"urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">I would like to 
fit a cylinder on to the medial condyle of the femur reconstructed based on CT 
images within vtk. For that purpose I pick several points on the surface of the 
condyle within vtk and pass them as the fixed point cloud to a point to point 
registration like the one in example\patented\ iterativerClosestPoint2 or 3. 
Second I generate a cylinder 3D-object in vtk (vtkCylinderSource) and extract 
its points. They a passed to the registration as the moving point cloud. In 
contrast to the examples in the itk-book&nbsp;I use AffineTransformation, 
because I need scaling in addition to translation and rotation of the cylinder. 
<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">Here comes my 
first question: is it possible using AffineTransformation without shearing? I am 
only interested in translation, rotation and scaling. I woul prefer using 
AffineTransformatino because its output is more familiar to me than the other 
transformer.<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">At the end of the 
registration (at the moment with shearing) I extract the transformation matrix 
and translate it to vtk:<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">vtkMatrix4x4 
*matrixVTK = vtkMatrix4x4::New();<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT 
face="Times New Roman"><SPAN lang=EN-GB style="mso-ansi-language: EN-GB"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN></SPAN><SPAN lang=FR 
style="mso-ansi-language: FR">TransformType::MatrixType matrixITK =<SPAN 
style="mso-spacerun: yes">&nbsp; 
</SPAN>transform-&gt;GetMatrix();<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT 
face="Times New Roman"><SPAN lang=FR style="mso-ansi-language: FR"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN></SPAN><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB">TransformType::OffsetType offset = 
transform-&gt;GetOffset();<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT 
face="Times New Roman"><SPAN lang=EN-GB style="mso-ansi-language: EN-GB"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN><SPAN lang=FR 
style="mso-ansi-language: FR">matrixVTK-&gt;SetElement(0,0,*matrixITK[0,0]);<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(0,1,*matrixITK[0,1]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(0,2,*matrixITK[0,2]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(0,3,offset[0]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(1,0,*matrixITK[1,0]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(1,1,*matrixITK[1,1]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(1,2,*matrixITK[1,2]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(1,3,offset[1]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(2,0,*matrixITK[2,0]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(2,1,*matrixITK[2,1]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(2,2,*matrixITK[2,2]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(2,3,offset[2]);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(3,0,0);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=FR 
style="mso-ansi-language: FR"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(3,1,0);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT 
face="Times New Roman"><SPAN lang=FR style="mso-ansi-language: FR"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB">matrixVTK-&gt;SetElement(3,2,0);<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>matrixVTK-&gt;SetElement(3,3,1);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">Using 
<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT 
face="Times New Roman">m_actorCylinder-&gt;SetUserMatrix(matrixVTK);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT 
face="Times New Roman">m_renWin-&gt;Render();<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">shows the result 
in 3D (vtk).<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">The script runs 
well, but the results are not what I expected. Especially the scaling factors 
are well too small. Moreover I doubt that the conversion from the itk-matrix to 
the vtk-matrix is<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">right the way I 
did. It seems for example, that the matrixVTK[0,1] does not correspond to the 
matrixITK[0,1]. To translate the moving 3D object onto the fixed 3D object in 
vtk do I have to invert the transformation I got in the 
itk?<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">Last but not least 
I implemented a registration observer and its class to monitor&nbsp; the 
registration process in 3D by updating the vtk-pipeline -&nbsp;but the observer 
is not invoked during the registration process:<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>// Observer<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>CommandIterationUpdate::Pointer observer = 
CommandIterationUpdate::New();<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman"><SPAN 
style="mso-spacerun: yes">&nbsp; </SPAN><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>optimizer-&gt;AddObserver( itk::IterationEvent(), observer 
);<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT face="Times New Roman">I would deeply 
appreciate any help or comment<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><o:p><FONT 
face="Times New Roman">&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB 
style="mso-ansi-language: EN-GB"><FONT 
face="Times New Roman">Peter.<o:p></o:p></FONT></SPAN></P></FONT></DIV>
<DIV dir=ltr><FONT face=Arial color=#000000 size=3></FONT>&nbsp;</DIV></DIV>
<DIV id=idSignature70825 dir=ltr>
<DIV><FONT face=Arial color=#000000 
size=2>------------------------------------</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>P. Böttcher, Dr med vet, 
DipECVS</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2><FONT face=Arial size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">European Veterinary Specialist in 
Surgery</SPAN></FONT></DIV></FONT>
<DIV><FONT face=Arial><FONT size=2>Klinik für Kleintiere</FONT> <BR><FONT 
size=2>Universität Leipzig</FONT> <BR><FONT size=2>An den Tierkliniken 23</FONT> 
<BR><FONT size=2>D-04103 Leipzig (Germany)</FONT></FONT></DIV>
<DIV><FONT face=Arial><FONT size=2>Tel: +49-341-9738700</FONT> <BR><FONT 
size=2>Fax: +49-341-9738799</FONT></FONT></DIV>
<DIV><FONT face=Arial><FONT size=2>email: <A 
href="mailto:boettcher@kleintierklinik.uni-leipzig.de">boettcher@kleintierklinik.uni-leipzig.de</A></FONT><BR></FONT></DIV></DIV></BODY></HTML>