<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Arial;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:PMingLiU;
        panose-1:2 2 5 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Calibri;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Hello Andrew,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">This is a bit off topic as you are interested in bare ITK, but this may help your understanding. The following SimpleITK notebook has explanations and examples of how ITK/SimpleITK transformations
 work <a href="https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Python/22_Transforms.ipynb">
https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Python/22_Transforms.ipynb</a> .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">The following notebook does exactly what you want, maps points from one image to another before and after registration, computes the TRE and also displays the specific error for each point
 in 3D, <a href="https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Python/65_Registration_FFD.ipynb">
https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Python/65_Registration_FFD.ipynb</a> . The code that does the computations and graphics is in registration_utilities.py .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">If you are ok with Python then I believe you can easily use the code as is. If you need to implement it in original ITK (C++) then the code can server as a reference for your C++ implementation.
 Note that most of the computations for TRE are done using numpy functionality as ITK doesn’t have a convenient filter to do these computations (at least not one I am aware of).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">        hope this helps<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">                  Ziv<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-family:Calibri;color:black">From: </span>
</b><span style="font-family:Calibri;color:black">Andrew Harris <aharr8@uwo.ca><br>
<b>Date: </b>Thursday, March 23, 2017 at 3:46 PM<br>
<b>To: </b>Matt McCormick <matt.mccormick@kitware.com><br>
<b>Cc: </b>Insight-users <insight-users@itk.org><br>
<b>Subject: </b>Re: [ITK-users] Applying transform with a rotation, translation, and offset to points<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Hi Matt, <o:p></o:p></p>
<div>
<p class="MsoNormal">Thanks for getting back to me.  I’m still a bit foggy about the relationship between matrix, offset, and translation.  I think I’m going to try and mark my targets within ITK and transform them as you have suggested, outputting a text file
 to then analyze.  However, I would like to know what is going on “under the hood” so to speak, just in case someone asks me to explain it. If I were to compose a 4x4 transformation matrix using the 3x3 matrix and 3x1 offset, apply it to a point, and then add
 the 3x1 translation after the fact would that correctly transform the point?  <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><br clear="all">
<o:p></o:p></p>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p>--<o:p></o:p></p>
<p>AH<o:p></o:p></p>
<p><o:p> </o:p></p>
<p>-----------------------------------------------------------------------------------------------<o:p></o:p></p>
<p><i>This email and any attachments thereto may contain private, confidential, and privileged materials for the sole use of the intended recipient. Any reviewing, copying, or distribution of this email (or any attachments thereto) by other than the intended
 recipient is strictly prohibited. If you are not the intended recipient, please contact the sender immediately and permanently destroy this email and any attachments thereto.</i><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Wed, Mar 22, 2017 at 5:00 PM, Matt McCormick <<a href="mailto:matt.mccormick@kitware.com" target="_blank">matt.mccormick@kitware.com</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">Hello Andrew,<br>
<br>
To apply the transformation, typically the methods,<br>
<br>
  itk::Image::TransformIndexToPhysicalPoint<br>
  itk::Transform::TransformPoint<br>
<br>
would be used.<br>
<br>
<br>
Nonetheless, a matrix representation from VersorRigid3DTransform can<br>
be obtained from its base class methods<br>
itk::MatrixOffsetTransformBase::GetMatrix and<br>
itk::MatrixOffsetTransformBase::GetOffset.<br>
<br>
HTH,<br>
Matt<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><br>
On Wed, Mar 22, 2017 at 3:15 PM, Andrew Harris <<a href="mailto:aharr8@uwo.ca">aharr8@uwo.ca</a>> wrote:<br>
> Hello,<br>
> I would like to be able to duplicate the applicaiton of a<br>
> VersorRigid3DTransform that incorporates a rotation, translation, and offset<br>
> to points selected to calculate TRE between a fixed and transformed moving<br>
> image.  I’m confused about how the 3x3 matrix, 3x1 transform, and 3x1 offset<span style="font-family:PMingLiU"><br>
</span>> are applied within a ResampleFilter.  If I could get them composed into a<span style="font-family:PMingLiU"><br>
</span>> 4x4 transform matrix I could apply that to the points selected in the moving<span style="font-family:PMingLiU"><br>
</span>> image and calculate the distance between the transformed points and the<br>
> corresponding points in the fixed image.  Any help would be appreciated.<br>
><br>
> --<br>
><br>
> AH<br>
><br>
><br>
> -----------------------------------------------------------------------------------------------<br>
><br>
> This email and any attachments thereto may contain private, confidential,<br>
> and privileged materials for the sole use of the intended recipient. Any<br>
> reviewing, copying, or distribution of this email (or any attachments<br>
> thereto) by other than the intended recipient is strictly prohibited. If you<br>
> are not the intended recipient, please contact the sender immediately and<br>
> permanently destroy this email and any attachments thereto.<br>
><br>
><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal">> _____________________________________<br>
> Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
><br>
> Visit other Kitware open-source projects at<br>
> <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
><br>
> Kitware offers ITK Training Courses, for more information visit:<br>
> <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
><br>
> Please keep messages on-topic and check the ITK FAQ at:<br>
> <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
><br>
> Follow this link to subscribe/unsubscribe:<br>
> <a href="http://public.kitware.com/mailman/listinfo/insight-users" target="_blank">
http://public.kitware.com/mailman/listinfo/insight-users</a><br>
><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>