[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