[Insight-users] Request for help with rigid 3D rotation and
translation image registration. (no attachment this time)
Greg Harris
Gregory-Harris at uiowa.edu
Fri Jul 8 18:19:29 EDT 2005
Luis,
I have looked at Insight/Examples/Registration/ImageRegistration8.cxx,
and the main thing I seem to have overlooked is the use of a
CenteredTransformInitializer; but when I spliced this behavior in like this:
/*
* BEGIN GLITCH:
*
* In order to faithfully reproduce
Insight/Examples/Registration/ImageRegistration8.cxx
* as to the use of a CenteredTransformInitializer, we had
to deprecate the
* SetInitialVersorRigid3DParameters applied to the given
affine transform and
* hoist the AssignRigidAffineTransform business up where
FixedImage and MovingImage
* are well-defined.
*/
typedef typename
MIMRegistrator<TImage,TImage>::VersorRigid3DTransformType
VersorRigid3DTransformType;
typename VersorRigid3DTransformType::Pointer
VersorRigid3DTransform = m_Registrator->GetVersorRigid3DTransform();
typedef typename
MIMRegistrator<TImage,TImage>::TransformInitializerType
TransformInitializerType;
typename TransformInitializerType::Pointer initializer =
TransformInitializerType::New();
//VersorRigid3DTransform->SetIdentity();
initializer->SetTransform( VersorRigid3DTransform );
initializer->SetFixedImage(
m_Preprocessor->GetOutputFixedImage() );
initializer->SetMovingImage(
m_Preprocessor->GetOutputMovingImage() );
initializer->MomentsOn();
initializer->InitializeTransform();
/*
* ... replacing this:
*
* m_Registrator->SetInitialVersorRigid3DParameters(
* m_TransformAdaptor->GetITKAffineTransform() );
*/
typedef typename
MIMRegistrator<TImage,TImage>::AffineTransformType AffineTransformType;
const typename AffineTransformType::Pointer
GivenAffineTransform = m_TransformAdaptor->GetITKAffineTransform();
AssignRigidAffineTransform < double, 3 > (
VersorRigid3DTransform, GivenAffineTransform );
m_Registrator->SetInitialVersorRigid3DParameters(
VersorRigid3DTransform->GetParameters() );
/*
* END GLITCH.
*
* Lesson: do not use a VersorRigid3DTransform without a
CenteredTransformInitializer.
*/
then the result of the InitializeTransform is described by
Initialized VersorRigid3DTransform's offset: [2.17714e+09, 2.09183e+09,
2.088e+09]
and center [-2.07894e+09, 2.31865e+08, -1.09368e+09]
These numbers are based on CenterOfGravity from itkImageMomentsCalculator
applied to each image; even though one image is isotropic and one is
anisotropic,
the numbers are much too big and result in sampling out-of-field. And
the Spacing
values are not uninitialized:
Fixed Image Spacing: [2, 2, 2]
Moving Image Spacing: [2, 2, 3]
Greg Harris
Iowa Psychiatry Brain Imaging Lab.
Luis Ibanez wrote:
>
>
> Hi Greg,
>
>
> You may be using a too advanced example for what you need to do.
>
>
> If you only need to solve for a rigid transform it is likely that
> an example such as
>
>
> Insight/Examples/ImageRegistration8.cxx
>
>
> may have all the elements that you need, except for the need of
> replacing the metric for one suitable for Multi-Modality images,
> such as Mutual Information.
>
>
>
> We will be happy to take a look at your registration problem,
> we are currently downloading Brains2 and building it according
> to the instructions in your Wiki page.
>
>
> Could you please let us know what types of images you are using ?
>
>
>
> Thanks
>
>
> Luis
>
>
>
>
> --------------------------------------
> Greg Harris wrote:
>
>> Dear fellow ITK users,
>>
>> This is my request for help with rigid 3D rotation and translation
>> image registration of the human brain.
>>
>> Largely as a result of the ITK manual, section 8.4, including the
>> statement, "It has been extensively shown that metrics based on
>> the evaluation of mutual information is the best way to overcome
>> the difficulties of multi-modality registration," I have been laboring
>> for some months trying to make this happen in our brains2
>> project setting.
>>
>> My present best effort, that began by imitating the SimpleApp
>> framework, can be seen in detail in the brains2 CVS source tree,
>> where brains2/src/iplProg/MutualRegistration contains C++
>> source and a test data set in 3D and a plan for testing called
>> PrincipalDebugTesting.tcl.
>>
>> The files MIMRegistrator.{h,txx} are where we put together the
>> registration modules,
>>
>> #include "itkMultiResolutionImageRegistrationMethod.h"
>> #include "itkVersorRigid3DTransform.h"
>> #include "itkMattesMutualInformationImageToImageMetric.h"
>> #include "itkLinearInterpolateImageFunction.h"
>> #include "itkVersorRigid3DTransformOptimizer.h"
>> #include "itkRecursiveMultiResolutionPyramidImageFilter.h"
>>
>> This illustrates our particular taste in what combination to attempt.
>>
>> The result has been frustrating. I don't get the exact fit I want even
>> when giving it the target transformation as an initial condition; while
>> the fit is only slightly off when the difference is translation-only,
>> the cases of a rotation-only difference and a rotation-and-translation
>> difference seem to find the rotation but not even close as to
>> translation.
>>
>> This application needs to convert between 3D AffineTransforms and
>> the 6-parameter VersorRigid3D. Is it possible that converting by
>> Get-ing and Set-ing the Center, Matrix, and Translation is not the
>> approved way to convert between transforms, as done in my file
>> CrossOverAffineSystem.txx? Could that be distorting my translational
>> information in proportion to the magnitude of the rotation? If so,
>> could you explain what is needed to get Affine and VersorRigid3D
>> transforms to play together?
>>
>> I know 3D rigid registration comes up on this discussion list
>> repeatedly.
>> Is there someone knowledgeable who can look over the
>> code? If you want to run the test cases, you will need to download
>> brains2 from psychiatry.uiowa.edu (it's free):
>> http://www.psychiatry.uiowa.edu/wiki/index.php?title=BRAINS_GETTING_STARTED#BRAINS_Registration
>>
>> will point you to how to get read-only CVS access to the brains2
>> projects.
>>
>> With thanks in advance,
>>
>> Greg Harris
>> Iowa Psychiatry Brain Imaging Lab
>> The University of Iowa
>> Iowa City, IA 52242 USA
>>
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at itk.org
>> http://www.itk.org/mailman/listinfo/insight-users
>>
>>
>
>
>
More information about the Insight-users
mailing list