[Insight-users] Masks in itkMutualInformationImageToImageMetric
Karthik Krishnan
Karthik.Krishnan at kitware.com
Wed Aug 17 14:51:38 EDT 2005
Vicente Grau wrote:
> Thanks so much for your help and for the quick update. In the new CVS
> file, as far as I see, you have implemented the fixed mask, but not
> the moving one, is this right?
Thanks.. Yes I needed to check if the transformed point was in the
moving mask as well.. Fixed in CVS.
> And another question, that I guess would apply also to the
> IsInsideBuffer() call: will the number of samples be exactly the
> selected one, or will it be smaller after the samples that lie outside
> the selected area are discarded?
>
No. the number of samples will not be smaller. The IsInsideBuffer()
serves a different purpose. It is to ensure that at least one sample
after registration maps from the moving to the fixed image region.
(within the masks if specified). This is to preclude choosing a bizzare
initial transform that provides no overlap between the fixed and moving
image.
Thanks
regards
karthik
> Thanks again,
>
> Vicente
>
> Karthik Krishnan wrote:
>
>>
>> Vicente Grau wrote:
>>
>>> Thanks very much for the explanation, now I understand it better. As
>>> you suggested, I have been looking at the IsInside() values returned
>>> by the metrics. It is clear in the code how masks are applied in
>>> NormalizedCorrelation or MeanSquares metrics; however, I don't see
>>> where the masks are considered in
>>> itkmutualinformationimagetoimagemetric.txx (I can only see a call to
>>> IsInsideBuffer() ). Are masks implemented for Mutual Information
>>> too? I am using ITK 2.0.1.
>>
>>
>>
>> Its been added to CVS.
>>
>> Thanks
>> regards
>> karthik
>>
>>>
>>> Vicente
>>>
>>>
>>> Karthik Krishnan wrote:
>>>
>>>>
>>>>
>>>> Vicente Grau wrote:
>>>>
>>>>> Thanks very much for your answer.
>>>>> The image resolutions are the same for mask and input image: I
>>>>> have copied the values directly from one mha header to the other
>>>>> to make sure of that.
>>>>> I have actually taken the mask object definition / application
>>>>> from ImageRegistration12.cxx, but as it didn't work for me, I
>>>>> wondered if it had to be used differently in a multiresolution
>>>>> framework. Does MultiResolutionImageRegistrationMethod take care
>>>>> of the masking at different scales? In this case, should I define
>>>>> a new RecursiveMultiResolutionPyramidImageFilter for the mask?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Since the mask is a spatial object, everything is done in physical
>>>> space and there should be no need to generate a pyramid. The
>>>> MultiResolutionImageRegistrationMethod internally uses a pyramid to
>>>> generate Fixed and Moving images at a bunch of resolutions. All
>>>> these images correspond to the same physical units, for instance
>>>> the one at quarter resolution has its spacing quadrupled.
>>>>
>>>> itkMultiResolutionPyramidImageFillter.txx
>>>> line 404: outputSpacing[idim] = inputSpacing[idim] *
>>>> shrinkFactor;
>>>>
>>>> When the metric needs to decide whether to evaluate the metric at
>>>> an index, it should do something like
>>>>
>>>> fixedImage->TransformIndexToPhysicalPoint( index,
>>>> physicalSpacePoint );
>>>> if (!this->m_FixedImageMask->IsInside( physicalSpacePoint )) //
>>>> don't evaluate here.
>>>>
>>>> As you can see everything is done in physical space and you don't
>>>> need to shrink the masks.
>>>>
>>>> Did you try to dig into the IsInside to see if points ere really
>>>> outside ?
>>>>
>>>> Thanks
>>>> karthik
>>>>
>>>>> And, how do I pass this pyramid to the
>>>>> MultiResolutionImageRegistrationMethod?
>>>>>
>>>>> Thanks a lot,
>>>>>
>>>>> Vicente
>>>>>
>>>>> Karthik Krishnan wrote:
>>>>>
>>>>>> On Tue, 2005-08-16 at 11:15 +0100, Vicente Grau wrote:
>>>>>>
>>>>>>
>>>>>>> I am trying to include masks for the fixed and moving images in
>>>>>>> a MultiResolutionImageRegistrationMethod, using Mutual
>>>>>>> Information. I have modified the MultiResMIRegistration
>>>>>>> application to include the masks, by creating them and adding
>>>>>>>
>>>>>>> m_Metric->SetFixedImageMask(m_FixedObjectMask);
>>>>>>> m_Metric->SetMovingImageMask(m_MovingObjectMask);
>>>>>>>
>>>>>>> m_Registration->StartRegistration();
>>>>>>>
>>>>>>> however, the mask does not seem to make a difference at all: I
>>>>>>> get exactly the same results even when all pixels in the mask
>>>>>>> are zero.
>>>>>>> Is it possible to use masks in a multiresolution framework?
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Yes it is. We've used this in the past. Are you sure that the
>>>>>> spacing of
>>>>>> the mask and the image (at full resolution) are the same ? You
>>>>>> could try
>>>>>> to dig into the Metric or your spatial object to see if the IsInside
>>>>>> function evaluates to false everywhere.
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Is this the right way to do it? Are there any examples I can use?
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> ImageRegistration12.cxx, although not in the multi-resolution
>>>>>> framework,
>>>>>> but the two aren't very different.
>>>>>>
>>>>>>
>>>>>>> Thanks very much,
>>>>>>>
>>>>>>> Vicente Grau
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> 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
>>>>>
>>>>
>>> _______________________________________________
>>> 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