[Insight-users] Using different type of transfrom in MultiResolutionRegistration

Luis Ibanez luis.ibanez at kitware.com
Tue Mar 16 11:32:29 EDT 2010


Hi  Yurenji,

The approach of using different transform Types at different
Levels of the Multi-Resolution registration process requires
that you "manually" transfer the results of one transform type
to be the initialization of the next transform type.


This process is not currently built-in as part of the the

      itkMultiResolutionImageRegistrationMethod.h



For a practical example on how to use different transforms
Types for different levels of a multi-resolution registration,
please look at the source code example:

             Insight/Examples/Registration/
                             DeformableRegistration15.cxx

This example uses a sequence of

         * Rigid Transform
         * Affine Transform
         * BSplineDeformable Transform


but, of course, you could use a different combination
of transforms...


         Regards,


              Luis






----------------------------------------------------------------------------------------
On Fri, Mar 12, 2010 at 11:24 PM, renji yu <yurenji at gmail.com> wrote:
> Hi Luis,
>
> It is mentioned in the ItkSoftwareGuide (version2.4.0  8.7
> Multi-ResolutionReigstration) that “another possible scheme is to use a
> simple translation transform for the initial coarse registration and an
> affine transform at the finer levels”.
>
> It means that in different levels, we will use different transformers:
>
> Level 0:
>
> typedef itk::TranslationTransform< double, Dimension > TransformType;
>
> TransformType::Pointer      transform     = TransformType::New();
>
>
>
> Level higher:
>
> typedef itk::AffineTransform< double, 2 > TransformType1;
>
> TransformType1::Pointer      transform1     = TransformType1::New();
>
>
>
> So I revised the MultiResImageRegistraion1.xx and the code is like this:
>
> template <typename TRegistration>
>
> class RegistrationInterfaceCommand : public itk::Command
>
> {
>
>    if ( registration->GetCurrentLevel() == 0 )
>
>       {
>
> //…
>
>       }
>
>     else
>
>       {
>
>            registration->SetTransform(     transform1     );
>
>       }
>
> //…
>
> }
>
> class CommandIterationUpdate : public itk::Command
>
> {
>
> //…
>
> }
>
>
>
>
>
> Int main()
>
> {//…
>
>   registration->SetOptimizer(     optimizer     );
>
>   registration->SetTransform(     transform     );
>
> //…
>
> registration->StartRegistration();
>
> }
>
>
>
>
>
> I got the error message that “Description: itk::ERROR:
> RegularStepGradientDescentOptimizer(022E64D0):
>
>  of Scales is 6, but the NumberOfParameters for the CostFunction is 2.”
>
> Obviously, parameters used to initialize optimizer are different at
> different levels. I don’t know how to solve this problem.
>
> And I wonder how does the translation transform give its result to the next
> level’s affine transform.
>
>
>
> Looking forward to your reply.
>
> Thanks a lot!
>
>
>
> yurenji
>
>
>
>


More information about the Insight-users mailing list