[Insight-developers] Question
regardingitk::SymmetricDemonsForceRegistrationFunction::ComputeUpdate()
Miller, James V (Research)
millerjv at crd.ge.com
Fri May 6 07:46:42 EDT 2005
Torsten,
Both the symmetric and non-symmetric cases keep track of the
SumofSquaredChange and the SumOfSquaredDifference in the global
data structure.
The "difference" is that the non-symmetric case calculates the
SumOfSquaredDifference as the difference between the fixed and moving
image using the deformation field from the previous iteration, i.e.
the SumOfSquaredDifference BEFORE the new update field is calculated.
The symmetric case calculates the SumOfSquaredDifference as the
difference between the fixed and moving image using the deformation
field calculated by the CURRENT iteration, i.e. the SumOfSquaredDifferences
AFTER the new update field is calculate.
So, the SumOfSquaredDifference in the non-symmetric case is the alignment
error at the beginning of an iteration, whereas for the symmetric case, it is
the alignment error at the end of an iteration.
The non-symmetric case may perform one additional iteration if the metric
value was used as a termination criterion.
The symmetric case is probably more correct since it allows you to decide
whether you have converged before you start the next iteration rather
than running an iteration and finding out you should had converged at the
previous iteration.
But the approach used in the symmetric case will be slower since it requires
interpolating the moving image twice per pixel (once to calculate the update
and once to calculate the contribution to the final align error).
Jim
-----Original Message-----
From: insight-developers-bounces+millerjv=crd.ge.com at itk.org
[mailto:insight-developers-bounces+millerjv=crd.ge.com at itk.org]On Behalf
Of Torsten Rohlfing
Sent: Thursday, May 05, 2005 7:22 PM
To: insight-developers at itk.org
Subject: [Insight-developers] Question
regardingitk::SymmetricDemonsForceRegistrationFunction::ComputeUpdate()
Hi --
This is not particularly important, but I was wondering if someone can
help me understand something I find slightly sketchy about the
implementation of
itk::SymmetricDemonsForceRegistrationFunction::ComputeUpdate().
Towards the end of the function, there is a block labeled "update the
metric with the latest deformable field". What happens there is that in
the global data structure, the mean squared difference between fixed and
moving image is updated with the metric value AFTER applying the current
update. Or I should say: supposedly that's what happens.
I am wondering whether this is really necessary (it does take some extra
CPU time after all)? The non-symmetric force class does not do this, and
I can't figure out where this is ever used? Also, it does not seem
particularly meaningful, since the update computed in ComputeUpdate is
not necessarily applied fully in the respective registration filter's
ApplyUpdate() member function. There may be smoothing, for example, of
either the update or the updated deformation field. So the value that is
computed in ComputeUpdate() for the MSD after applying the update is not
actually guaranteed to be correct anyway.
Any thoughts would be greatly appreciated.
Best,
Torsten
--
Torsten Rohlfing, PhD SRI International, Neuroscience Program
Research Scientist 333 Ravenswood Ave, Menlo Park, CA 94025
Phone: ++1 (650) 859-3379 Fax: ++1 (650) 859-2743
torsten at synapse.sri.com http://www.stanford.edu/~rohlfing/
"Though this be madness, yet there is a method in't"
_______________________________________________
Insight-developers mailing list
Insight-developers at itk.org
http://www.itk.org/mailman/listinfo/insight-developers
More information about the Insight-developers
mailing list