[Insight-users] Help with ITK registration
somi
seesomi at gmail.com
Thu Sep 10 19:06:30 EDT 2009
Hi,
I am trying to register two brain MR volumes. I plan to change the
optimizer/Metric/Transform and interpolator at different resolutions levels.
In particular I want to use the following combination at different
resolution levels:
GDM=Gradient Difference metric : Edges contribute more than constant levels
NMI=normalized Mutual Information
EA= Evolutional algorithm
RSGD=RegularStepGradientDescentOptimizer
Level -- Optimizer -- Metric -- Transform -- Interpolator
0 -- RSGD -- GDM -- Translation -- NN
1 -- RSGD -- GDM -- Versor3D -- Linear
2 -- RSGD -- GDM -- Affine -- Linear
3 -- RSGD -- NMI -- Affine -- Linear
4 -- EA -- NMI -- Demons -- Windowed Sync
I plan to use Gradient Difference metric at coarse resolution levels because
it gives more weight to edges.
I have the following doubts in implementation:
a) I did go through the theory superficially, and found the above to be a
reasonable combination. If someone has more experience, could you suggest if
the optimizer/metric/interpolator combination is reasonable or is there a
better combination (I am registering Brain MR volumes) or it can only be
determined after experimentation on my dataset ?
b) This is more fundamental and implementation related. The general
structure of my program is :
// Code starts
class CommandIterationUpdate : public itk::Command { ...print iteration
updates here}
//command observer
class RegistrationInterfaceCommand : public itk::Command
{...change parameters of registration here, e.g step size etc.}
// main program
main{}
so for example if I have to change optimizer after a particular resolution
level, how do I change it in my RegistrationInterfaceCommand and how will my
CommandIterationUpdate change ? because in the commanditerationupdate, we
have
public:
typedef itk::RegularStepGradientDescentOptimizer OptimizerType;
typedef const OptimizerType * OptimizerPointer;
and then we get position/value etc from this pointer. If my optimizertype
changes when do I have to check what resolution level it is and user
appropriate pointer?
Also do we allocate memory and define all the optimizers/metric in the main
program or can we do it in the RegistrationInterfaceCommand when a
particular resolution is reached?
Regards,
Somi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090910/5416bf1a/attachment-0001.htm>
More information about the Insight-users
mailing list