<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1479" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Hi there,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV>I try to compute the initial translation of the two 3D data.&nbsp; However, 
after<BR>I use vtkExtractVOI to extract a part (also a volume) from one of the 
3D<BR>data.&nbsp; The origin stays the same!&nbsp; In my program, the 
vtkImageData is used<BR>to be converted to itk::Image to compute the initial 
translation, so if the<BR>origin information stay the same, the center of the 
image is wrong.&nbsp; So, I<BR>wonder if the definition of the term "origin" 
differs in vtk and itk?<BR>&nbsp;<BR>Also, I would like to know more about how 
itk deal with volumes of different<BR>physical dimensions (origin, spacing, 
number of slices, etc.).&nbsp; How can I<BR>read and learn about that? Which ITK 
component deal with that?<BR>&nbsp;<BR>&nbsp;Grace</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV>&gt; <BR>&gt; ----- Original Message ----- <BR>&gt; From: "Luis Ibanez" 
&lt;<A 
href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</A>&gt;<BR>&gt; 
To: "Grace Chen" &lt;<A 
href="mailto:Grace.Chen@swri.ca">Grace.Chen@swri.ca</A>&gt;<BR>&gt; Cc: "Insight 
Users" &lt;<A 
href="mailto:insight-users@itk.org">insight-users@itk.org</A>&gt;<BR>&gt; Sent: 
Monday, December 05, 2005 4:08 PM<BR>&gt; Subject: Re: [Insight-users] register 
two volumes of different types<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt;&gt;Hi 
Grace,<BR>&gt;&gt;<BR>&gt;&gt;Please read the chapter on Image Registration 
from<BR>&gt;&gt;the ITK Software Guide.<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;You 
are right, a rigid transform has rotation and<BR>&gt;&gt;translation; but given 
that you are in a clinical<BR>&gt;&gt;environment where rotations are usually 
small, you<BR>&gt;&gt;can safely initialize the rotational part of 
your<BR>&gt;&gt;transform ot a Null rotation.&nbsp; This is simply 
done<BR>&gt;&gt;when you call SetIdentity() on the 
transfrom.<BR>&gt;&gt;<BR>&gt;&gt;After you call SetIdentity() you invoke 
SetTranslation()<BR>&gt;&gt;in the transform, and then you get the current 
parameters<BR>&gt;&gt;of the transform and pass them as the Initial 
parameters<BR>&gt;&gt;to the Registration Method.<BR>&gt;&gt;<BR>&gt;&gt;If you 
print out the values of the array returned 
by<BR>&gt;&gt;transform-&gt;GetParameters() you will understand 
better<BR>&gt;&gt;how you are initializing the 
transform.<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;You are right that the job of the 
registration program<BR>&gt;&gt;is to find the best 
Transform.<BR>&gt;&gt;<BR>&gt;&gt;but<BR>&gt;&gt;<BR>&gt;&gt;an Optimizer cannot 
always find a peak in a cost function<BR>&gt;&gt;in a six dimensional space 
without falling in local optima.<BR>&gt;&gt;So, it is your job to initialize the 
Optimizer (e.g. the<BR>&gt;&gt;Transform) close enough to a good registration, 
so that<BR>&gt;&gt;the Optimizer can do its job of fine tunning the 
values<BR>&gt;&gt;of the Transform.<BR>&gt;&gt;<BR>&gt;&gt;If you look at the 
plots of ImageMetric values in any<BR>&gt;&gt;of the examples of the ITK 
Software Guide, you will<BR>&gt;&gt;better understand by it is unrealistic, or 
even naive<BR>&gt;&gt;to expect that the optimizer can find the best 
value<BR>&gt;&gt;without proper 
initialization.<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;Please note that you *ARE 
NOT* computing the Transformation.<BR>&gt;&gt;You are computing an *INITIAL 
VALUE* for that Transformation,<BR>&gt;&gt;so that the Optimizer can start from 
there and find the optimal<BR>&gt;&gt;transformation for 
you.<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;When you are dealing with brain images, 
you can imagine that due<BR>&gt;&gt;to the size of typical human head, a 
misalignment of more that<BR>&gt;&gt;50 millimeters can not easily be corrected 
by exploring with<BR>&gt;&gt;an optimizer the parametric space of the Transform. 
Therefore<BR>&gt;&gt;you should initialize the Transform, so that the 
initial<BR>&gt;&gt;misalignment between the two images is below 20 
millimeters.<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;Please read the 
Section 6.9&nbsp; of the ITK Software Guide 
too.<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; 
Regards,<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Luis<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;-------------------<BR>&gt;&gt;Grace 
Chen wrote:<BR>&gt;&gt;<BR>&gt;&gt;&gt;Hi 
Luis,<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt;About setting the initial translation, I 
really don't get this...a rigid<BR>&gt;&gt;&gt;movement include both rotation as 
well as the translation.&nbsp; Isn't it the<BR>&gt;&gt;&gt;registration 
program's job to find out the translation needed to align<BR>&gt; <BR>&gt; 
the<BR>&gt; <BR>&gt;&gt;&gt;center of both images?&nbsp; If so, why do we need 
to compute that<BR>&gt; <BR>&gt; information<BR>&gt; <BR>&gt;&gt;&gt;for 
it?<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt;Grace<BR>&gt;&gt;&gt;<BR></DIV></BODY></HTML>