[Insight-users] Masks & registration

Luis Ibanez luis.ibanez at kitware.com
Thu May 11 08:03:26 EDT 2006


Hi Laurent,

The ITK registration framework supports the use of a Fixed image Mask
and a Moving image Mask. Each one of them is expected to be in the
reference system of the respective image. That is:

The Fixed  image mask is in the reference system of the Fixed  Image
The Moving image mask is in the reference system of the Moving Image

You don't need to map the masks. Simply use them in the space where
they have been generated. Presumably you created these mask by using
some sort of segmentation algorithm.

There is no notion of "absolute" coordinates in the ITK registration
framework. You should explicitly talk about the coordinate system of
the "Fixed" image, or the coordinate system of the "Moving" image.


   Regards,


       Luis


======================
Laurent PAUL wrote:
> Hi Luis,
> 
> If I want to use masks, I can first apply a AND filter on Image and Mask
> and use the result as fixed and moving Image.
> If I really need masks, I'll try.
> 
> Another question on masks: if I use mask, Do I have to initially transform
> the mask with the same InitialTransform applied on the MovingImage? I
> think my problem could come from there, mask hasn't the same absolute
> coordinates as Initially transformed MovingImage.
> 
> Thanks for your help.
> 
> Laurent.
> 
> 
> 
>>Hi Laurent,
>>
>>The Transform Initializers do not take into account the Masks.
>>
>>They compute the Moments/Geometry on the entire images.
>>
>>Note that a better way to initialize your registration is to
>>use the LandmarkBasedTransformInitializer.
>>
>>http://www.itk.org/Insight/Doxygen/html/classitk_1_1LandmarkBasedTransformInitializer.html
>>
>>It requires the user to provide at couple of homologous points
>>in both images, but it will increase a lot the quality of your
>>initialization.
>>
>>
>>
>>   Regards,
>>
>>
>>      Luis
>>
>>
>>
>>======================
>>Laurent PAUL wrote:
>>
>>> Hi users,
>>>I've got a problem with masks & registration.
>>>I use MeanSquaresImageToImageMetric and VersorRigid3DTransform for the
> 
> registration process.
> 
>>>Since I have regions of interest, I tried to pass at least 1 mask to
> 
> the
> 
>>>metric. It seems to be ok as I test it with IsInside() method with two
> 
> points (one in and one out).
> 
>>>My first question is if I use SetDefaultOutsideValue(0) for the mask,
> 
> any value different from 0 will be considered as Inside, right?
> 
>>>Then, I read a message which deals with nearly the same problem:
> 
> http://public.kitware.com/pipermail/insight-users/2005-September/014948.html
> This is an (interesting) extract:
> 
>>>>"Sure, as you pointed out, if you start off with a horrible initial
> 
> misalignment, in the worst case, the regions don't overlap and the
> 
>>>>metric
>>>>never gets computed.  Usually, in a registration application, if you've
> 
> gone through the trouble of specifying relevant regions in both the
> 
>>>fixed >and moving image regions, you already have some idea of the
> 
> initial >transform and there is no excuse for not specifying an initial
> transform >that guarantees significant overlap between the two masks.
> 
>>>>(This will of course only happen if you've specified *both* a fixed and
> 
> moving image mask, and not if just specify one of them. )"
> 
>>>I am in this case, where I know regions of interest.
>>>I understand the intialization problem but how initialize the
>>>registration?
>>>So far, I used the CenteredVersorTransformInitializer:
>>>   initializer->SetTransform (transform);
>>>   initializer->SetFixedImage (FixedImage);
>>>   initializer->SetMovingImage (MovingImage);
>>>   initializer->MomentsOn();
>>>What I understood is that initialisation is made upon Mass center. Is
> 
> mass center calculation takes account of the mask, I mean only region
> contained in the mask?
> 
>>>I tried too with initializer->GeometryOn();
>>>but I've got an error at runtime. Is it safe to use "GeometryOn"? More,
> 
> I know initialisation is quite ok. There is just a translation error.
> 
>>>I tried (without using Initializer):
>>>  TransformType::OutputVectorType InitialTranslation;
>>>  InitialTranslation[0] = 80;
>>>  InitialTranslation[1] = 0;
>>>  InitialTranslation[2] = 0;
>>>  transform->SetTranslation( InitialTranslation );
>>>Registration's result is bad and stops. I saw that transform center is
> 
> [0,0,0].
> 
>>>So, I first use intializer (to compute transform center) and
>>>OverrideTranslation with mine.
>>>Is there a better way to initialise the registration?
>>>If I specify a MovingMask, even with good initialization, registration
> 
> stops with this error message: All the points mapped to outside of the
> moving volume.
> 
>>>So, my last question is: Is mask initialized with the initialtransform?
> 
> Sorry for the long message but I had to be clear.
> 
>>>Laurent.
>>>_______________________________________________
>>>Insight-users mailing list
>>>Insight-users at itk.org
>>>http://www.itk.org/mailman/listinfo/insight-users
>>
>>
>>
> 
> 
> 
> 
> 
> 
> _______________________________________________
> 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