Thank you Luis,<br>
<br>
I am getting answers, but something is not right. My code is as follows:<br>
<br>
(...)<br>
&nbsp; int i = 0;<br>
&nbsp; int j = 0;<br>
&nbsp; vnl_matrix&lt;double&gt; m(3,3);<br>
<br>
&nbsp; cout &lt;&lt; &quot;Enter the 3x3 rotation/scale matrix, across first.&quot; &lt;&lt; endl;<br>
&nbsp; for (i = 0; i &lt; 3; i++)<br>
&nbsp;&nbsp;&nbsp; for (j = 0; j &lt; 3; j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin &gt;&gt; m[i][j];<br>
&nbsp; vnl_svd&lt;double&gt; svd(m);<br>
&nbsp; vnl_matrix&lt;double&gt; r(3,3);<br>
&nbsp; r = svd.U() * vnl_transpose(svd.V());<br>
<br>
&nbsp; typedef itk::Similarity3DTransform&lt; double &gt; TransformType;<br>
&nbsp; typedef TransformType::VersorType VersorType;<br>
&nbsp; VersorType myrot;<br>
&nbsp; typedef VersorType::MatrixType MatrixType;<br>
&nbsp; MatrixType mat;<br>
&nbsp; for (i = 0; i &lt; 3; i++)<br>
&nbsp;&nbsp;&nbsp; for (j = 0; j &lt; 3; j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mat[i][j] = r[i][j];<br>
&nbsp; myrot.Set(mat);<br>
<br>
&nbsp; cout &lt;&lt; &quot;Scale factor:\t&quot; &lt;&lt; myrot.GetScalar() &lt;&lt; endl;<br>
&nbsp; cout &lt;&lt; &quot;X versor:\t&quot; &lt;&lt; myrot.GetX() &lt;&lt; endl;<br>
&nbsp; cout &lt;&lt; &quot;Y versor:\t&quot; &lt;&lt; myrot.GetY() &lt;&lt; endl;<br>
&nbsp; cout &lt;&lt; &quot;Z versor:\t&quot; &lt;&lt; myrot.GetZ() &lt;&lt; endl;<br>
(...)<br>
<br>
In a different program, I have:<br>
(...)<br>
&nbsp; typedef itk::Similarity3DTransform&lt;double&gt; TransformType;<br>
&nbsp; TransformType::Pointer transform = TransformType::New();<br>
(...) set parameters, perform registration (...)<br>
&nbsp; const itk::Matrix&lt;double,3,3&gt; matrix3x3 = transform-&gt;GetMatrix();<br>
&nbsp; cout &lt;&lt; &quot;&nbsp; - 3x3 transform matrix:&quot; &lt;&lt; endl;<br>
&nbsp; for (int i = 0; i &lt; 3; i++) {<br>
&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;;<br>
&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; 3; j++) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;%8.4f &quot;,matrix3x3[i][j]);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; cout &lt;&lt; endl;<br>
&nbsp; }<br>
(...)<br><br>
When I take the 3x3 transform matrix, and put in in the SVD program, I
don't get my original 3 versors and scale. What am I doing wrong?<br>
<br>
Thank you for your help.<br>
<br>
Jan Owoc<br>
<br>
<br><div><span class="gmail_quote">2006/1/24, Luis Ibanez &lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br><br>Hi Jan,<br><br><br>In order to convert your 4x4 transform in to an<br>ITK Similarity transform you can do the following<br><br><br>Your 4x4 matrix can be interpreted as:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R11&nbsp;&nbsp;R12&nbsp;&nbsp;R13&nbsp;&nbsp;T1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R21&nbsp;&nbsp;R22&nbsp;&nbsp;R23&nbsp;&nbsp;T2
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R31&nbsp;&nbsp;R32&nbsp;&nbsp;R33&nbsp;&nbsp;T3<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sh1&nbsp;&nbsp;Sh2&nbsp;&nbsp;Sh3&nbsp;&nbsp;SC<br><br><br>Where<br><br>&nbsp;&nbsp;&nbsp;&nbsp; T1,T2,T3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; are Translations<br>&nbsp;&nbsp;&nbsp;&nbsp; SC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is a Scalinig factor<br>&nbsp;&nbsp;&nbsp;&nbsp; Sh1,Sh2,Sh3&nbsp;&nbsp;&nbsp;&nbsp;are Shearing factors<br>&nbsp;&nbsp;&nbsp;&nbsp; R11... R33&nbsp;&nbsp;&nbsp;&nbsp; are the rotations
<br><br><br>If your 4x4 matrix is formed correctly<br>representing a Similarit transform, then<br>the following constrains may be maintained<br><br><br>1) Sh1, Sh2, Sh3&nbsp;&nbsp;MUST be null<br>2) The 3x3 submatrix R11..R22&nbsp;&nbsp;MUST be orthogonal
<br><br><br><br>It that holds true, then you can use SVD in order<br>to find the Versor that matches the 3x3 matrix.<br><br>You will find and example on how to do this on<br>the Registration example:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Insight/
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Examples/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Registration/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ImageRegistration9.cxx<br><br><br>Then you can setup the ITK Similarity transform<br>by using:<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A) an ITK Versor for the rotation<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B) an ITK Vector for the translation<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C) a scalar value for the Scaling
<br><br><br><br>Please let us know if you have further questions.<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thanks<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Luis<br>
</blockquote></div>