<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">


<META content="MSHTML 6.00.2800.1276" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Verdana color=#0000ff size=2><SPAN 
class=231215913-13082004>Monica, </SPAN></FONT></DIV>
<DIV><FONT face=Verdana color=#0000ff size=2><SPAN 
class=231215913-13082004></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Verdana color=#0000ff size=2><SPAN class=231215913-13082004>I 
forgot something in my last message.&nbsp; The calls to 
interpolator-&gt;Evaluate() should be within an if block that checks that the 
point is within the image, for instance</SPAN></FONT></DIV>
<DIV><FONT face=Verdana color=#0000ff size=2><SPAN 
class=231215913-13082004></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT><SPAN class=231215913-13082004>
<DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp; // interpolate a vector from the&nbsp;smaller image at 
this physical position&nbsp;&nbsp;&nbsp; </FONT></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><FONT face=Verdana><FONT color=#0000ff><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=231215913-13082004>if 
(interpolator-&gt;IsInsideBuffer(p)</SPAN></FONT></FONT></FONT></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><FONT face=Verdana><FONT color=#0000ff><FONT 
size=2><SPAN class=231215913-13082004>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{</SPAN></FONT></FONT></FONT></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><FONT face=Verdana><FONT color=#0000ff><FONT 
size=2><SPAN class=231215913-13082004>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>v2 = interpolator-&gt;Evaluate(p);</FONT></FONT></FONT></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><SPAN class=231215913-13082004><FONT 
face=Verdana color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></SPAN></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><SPAN class=231215913-13082004><FONT 
face=Verdana color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;else</FONT></SPAN></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><SPAN class=231215913-13082004><FONT 
face=Verdana color=#0000ff size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{</FONT></SPAN></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><SPAN class=231215913-13082004><FONT 
face=Verdana color=#0000ff size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v2.Fill( 
0.0 );</FONT></SPAN></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><SPAN class=231215913-13082004><FONT 
face=Verdana color=#0000ff size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}</FONT></SPAN></SPAN></DIV>
<DIV><SPAN class=596342912-13082004><SPAN class=231215913-13082004><FONT 
face=Verdana color=#0000ff size=2></FONT></SPAN></SPAN>&nbsp;</DIV>
<DIV><SPAN class=596342912-13082004><SPAN 
class=231215913-13082004></SPAN></SPAN>&nbsp;</DIV></SPAN></FONT></DIV>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader dir=ltr align=left><FONT face=Tahoma 
  size=2>-----Original Message-----<BR><B>From:</B> Miller, James V (Research) 
  [mailto:millerjv@crd.ge.com]<BR><B>Sent:</B> Friday, August 13, 2004 9:57 
  AM<BR><B>To:</B> 'Monica Lumbardi'; 'Luis Ibanez'<BR><B>Cc:</B> 
  'insight-users@itk.org'<BR><B>Subject:</B> RE: [Insight-users] Addition of two 
  DeformationFields<BR><BR></FONT></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>Monica, </FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>The issue with the AddImageFilter is that it relies on the 
  NumericTraits class to define a</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>type for accumulating the results.&nbsp; For instance, if you are 
  adding to char images, you would use an accumulate type of short to avoid 
  overflow during the accumulation.</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>There is not specialization for 
  NumericTraits&lt;Vector&lt;T&gt;&gt;.&nbsp; You might try putting one in your 
  code (you can use one of the existing specializations to see what traits need 
  to be defined). But I don't think this will work given the class heirarchy for 
  NumericTraits.</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff size=2>We 
  could add another algorithm to specifically add two vector 
  images.</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>However, looking back at your original question, it sounds like your 
  two deformation fields are at different resolutions. So the smaller one would 
  need to be interpolated.&nbsp; You could something like</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>typedef itk::VectorLinearInterpolateImageFunction&lt;SmallImageType&gt; 
  VectorInterpolatorType;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>VectorInterpolatorType::Pointer interpolator = 
  VectorInterpolatorType::New();</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>interpolator-&gt;SetInputImage( smallField );</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>OutputIteratorType outIt = OutputIteratorType(cumulativeField, 
  region);</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>LargeInputIteratorType inIt = LargeInputIteratorType(largeField, 
  region);</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>VectorType v1, v2;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>PointType p;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>while (!inIt.IsAtEnd())</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>{</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff size=2>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; largeField-&gt;TransfromIndexToPhysicalPoint( 
  inIt.GetIndex(), p );</FONT></SPAN></DIV>&nbsp;&nbsp;&nbsp; v1 = 
  inIt.Get();</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; // interpolate a vector from the&nbsp;smaller image 
  at this physical position&nbsp;&nbsp;&nbsp; </FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; v2 = 
  interpolator-&gt;Evaluate(p);</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp; // set the output vector as the sum of the two 
  vectors</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004>&nbsp;&nbsp;&nbsp; <FONT face=Verdana 
  color=#0000ff size=2>outIt.Set( v1 + v2 );</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004>&nbsp;&nbsp;&nbsp;<FONT face=Verdana 
  color=#0000ff size=2>&nbsp;++inIt;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp; ++outIt;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>}</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff size=2>I 
  trust that adding deformation is what you really want to do.&nbsp; In 
  particular, you are </FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>looking to add two vectors at the same physical position.&nbsp; This is 
  what the above code does. If you are looking to "concatenate" or "compose" to 
  vector fields, where you apply one vector field to a set of positions, then 
  apply another vector field, then you&nbsp;use inner loop code that looks 
  like&nbsp;</FONT></SPAN></DIV><SPAN class=596342912-13082004></SPAN><FONT 
  face=Tahoma><FONT face=Verdana color=#0000ff size=2></FONT><FONT face=Verdana 
  color=#0000ff size=2></FONT>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>{</FONT></SPAN></DIV><SPAN class=596342912-13082004>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; largeField-&gt;TransfromIndexToPhysicalPoint( 
  inIt.GetIndex(), p );</FONT></SPAN></DIV>
  <DIV><FONT face=Verdana color=#0000ff size=2>&nbsp;&nbsp;&nbsp; v1 = 
  inIt.Get();</FONT></DIV>
  <DIV><FONT face=Verdana color=#0000ff size=2></FONT>&nbsp;</DIV>
  <DIV><FONT face=Verdana color=#0000ff size=2><SPAN 
  class=596342912-13082004>&nbsp;&nbsp;&nbsp; // to compose the vector fields, 
  apply the first vector field to the position</SPAN></FONT></DIV>
  <DIV></SPAN><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; newp&nbsp;= p + v1;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; </FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; // interpolate the vector to compose with from the 
  smaller image</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; v2 = 
  interpolator-&gt;Evaluate(newp);</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; // apply the second vector field to 
  position</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004>&nbsp;&nbsp;&nbsp; <FONT face=Verdana 
  color=#0000ff size=2>newp += v2;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp;&nbsp; // composite vector is the difference between the 
  original point and the moved point</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004>&nbsp;&nbsp;&nbsp; <FONT face=Verdana 
  color=#0000ff size=2>outIt.Set(&nbsp;newp - p&nbsp;);</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=596342912-13082004>&nbsp;&nbsp;&nbsp;<FONT face=Verdana 
  color=#0000ff size=2>&nbsp;++inIt;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>&nbsp;&nbsp; &nbsp;++outIt;</FONT></SPAN></DIV>
  <DIV><SPAN class=596342912-13082004><FONT face=Verdana color=#0000ff 
  size=2>}</FONT></SPAN></DIV>
  <DIV>&nbsp;</DIV>
  <DIV><FONT face=Verdana color=#0000ff size=2><SPAN class=596342912-13082004>If 
  you want, you can put in a feature request on the ITK bug tracker for a filter 
  that will composite two vector fields.</SPAN></FONT></DIV>
  <DIV><FONT face=Verdana color=#0000ff size=2></FONT>&nbsp;</DIV>
  <DIV><BR><FONT size=2><SPAN class=596342912-13082004><FONT face=Verdana 
  color=#0000ff>[Jim Miller]&nbsp;</FONT></SPAN></FONT></DIV>
  <DIV><FONT size=2><SPAN 
class=596342912-13082004></SPAN></FONT>&nbsp;</DIV></BLOCKQUOTE></FONT></BODY></HTML>