[Insight-users] Masks in itkMutualInformationImageToImageMetric
Vicente Grau
vicente at robots.ox.ac.uk
Wed Aug 17 04:40:57 EDT 2005
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?
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?
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
>>
>
More information about the Insight-users
mailing list