[ITK] How to get to get image similarity metrics under .NET ?

Yaniv, Ziv Rafael (NIH/NLM/LHC) [C] zivrafael.yaniv at nih.gov
Fri Nov 20 09:55:59 EST 2015


Hello Oleg,

Unfortunately there is no transformation that can map the values between
all similarity measures, these quantities are
not commensurate and thus you cannot normalize them all to the same range
in a meaningful manner. The reason for the usage of
different similarity measures is that they make different assumptions
about the relationships between the intensity values in the two images.
For instance Correlation assumes an affine mapping between intensities
while Mutual Information assumes a stochastic mapping which is more
generic. On the other hand Correlation can be computed more efficiently
and potentially has fewer local minima. If you know the physics relating
your images then you can use a more appropriate similarity measure (in
Bayesian terms - you are using a strong prior).

To gain a better understanding of intensity based registration I suggest
looking at the literature, see for exmaple:
http://eecs.vanderbilt.edu/people/mikefitzpatrick/papers/2000_Fitzpatrrick_
HandbookII_Ch8_Registration.pdf .
 
    Ziv



On 11/20/15, 7:26 AM, "Oleg Subachev" <osubachev at gmail.com> wrote:

>Thank you, Ziv:
>Now merics are calculated successfully.
>But where to get information about meaning of various kinds of
>supported metrics.
>E.g. this code for the same image
>using ( ImageRegistrationMethod method = new ImageRegistrationMethod() )
>{
>method.SetMetricAsMattesMutualInformation();
>method.SetInitialTransform( new Euler2DTransform() );
>double metric = method.MetricEvaluate(
>SimpleITK.ReadImage( "1.png", PixelIDValueEnum.sitkFloat32 ),
>SimpleITK.ReadImage( "1.png", PixelIDValueEnum.sitkFloat32 ) );
>}
>yields -0,984914070939179
>Whereas:
>SetMetricAsANTSNeighborhoodCorrelation( 2 ) yields -1
>SetMetricAsCorrelation() yields -1
>SetMetricAsJointHistogramMutualInformation() yields -0,601327526729281
>SetMetricAsMeanSquares() yields 0
>
>How to normalize all metrics to the same range ?
>-- 
>Best regards,
>Oleg Subachev
>
>On Thu, Nov 19, 2015 at 7:49 PM, Yaniv, Ziv Rafael (NIH/NLM/LHC) [C]
><zivrafael.yaniv at nih.gov> wrote:
>> Hello Oleg,
>>
>> It is necessary to set the initial transform as the MetricEvaluate
>>method
>> will use that transformation to evaluate your similarity metric, the
>>same
>> way it is done during registration. There is always a transformation
>> between the two images, even if it is the identity. Something like
>> method.SetInitialTransform(new Euler3DTransform()) if your images are 3D
>> or Euler2DTransform() if they are 2D. In your case the you can use any
>>of
>> the transformation types Translation,AffineŠ as you are creating the
>> identity transform.
>>
>>    Ziv
>>
>>
>>
>> On 11/19/15, 6:57 AM, "Oleg Subachev" <osubachev at gmail.com> wrote:
>>
>>>Since error message says something about "initial transform" may be it
>>>is necessary to set up initial transform ?
>>>As you see from code I do not call SetInitialTransform method at all.
>>>I hope that no initial transform or default initial transform (if any)
>>>will be enough.
>>>I simply want to get similarity metric value for two image files
>>>without any transform.
>>>
>>>--
>>>Best regards,
>>>Oleg Subachev
>>>
>>>On Thu, Nov 19, 2015 at 12:01 PM, Oleg Subachev <osubachev at gmail.com>
>>>wrote:
>>>> Thanks all of you.
>>>> But now the code:
>>>> using ( ImageRegistrationMethod method = new
>>>>ImageRegistrationMethod() )
>>>> {
>>>> method.SetMetricAsMattesMutualInformation();
>>>> double metric = method.MetricEvaluate(
>>>> SimpleITK.ReadImage( "1.png", PixelIDValueEnum.sitkFloat32
>>>> ),SimpleITK.ReadImage( "2.png", PixelIDValueEnum.sitkFloat32 ));
>>>> }
>>>>
>>>> throws new exception:
>>>> {"Exception thrown in SimpleITK
>>>> ImageRegistrationMethod_MetricEvaluate:
>>>>
>>>>..\\..\\..\\..\\..\\SimpleITK\\Code\\Registration\\src\\sitkImageRegist
>>>>ra
>>>>tionMethod.cxx:922:\nsitk::ERROR:
>>>> Unexpected error converting initial transform! Possible miss matching
>>>> dimensions!"}
>>>>
>>>> --
>>>> Best regards,
>>>> Oleg Subachev
>>>>
>>>>
>>>> On Wed, Nov 18, 2015 at 8:14 PM, Yaniv, Ziv Rafael (NIH/NLM/LHC) [C]
>>>> <zivrafael.yaniv at nih.gov> wrote:
>>>>> Hello Oleg,
>>>>>
>>>>> The ImageRegistrationMethod only supports images with pixel type
>>>>> sitkFloat32 and sitkFloat64. You can either specify the pixel type
>>>>>when
>>>>> reading the image
>>>>>
>>>>>(http://www.itk.org/SimpleITKDoxygen/html/namespaceitk_1_1simple.html#
>>>>>a0
>>>>>2ff
>>>>> c30c3c55dd9eeff3f76ba19f35e7) or read the image with its native pixel
>>>>>type
>>>>> and then
>>>>> use the SimpleITK Cast function
>>>>>
>>>>>(http://www.itk.org/SimpleITKDoxygen/html/namespaceitk_1_1simple.html#
>>>>>af
>>>>>8c9
>>>>> d7cc96a299a05890e9c3db911885), casting it to either of these two
>>>>>types.
>>>>>
>>>>>    Ziv
>>>>>
>>>>>
>>>>>
>>>>> On 11/18/15, 9:51 AM, "Oleg Subachev" <osubachev at gmail.com> wrote:
>>>>>
>>>>>>Thanks, Brad.
>>>>>>
>>>>>>But when I try this code:
>>>>>>using ( ImageRegistrationMethod method = new
>>>>>>ImageRegistrationMethod()
>>>>>>)
>>>>>>{
>>>>>>method.SetMetricAsMattesMutualInformation( 50 );
>>>>>>double metric = method.MetricEvaluate( SimpleITK.ReadImage( "1.png"
>>>>>>),
>>>>>>SimpleITK.ReadImage( "2.png" ) );
>>>>>>}
>>>>>>
>>>>>>I get the exception:
>>>>>>{"Exception thrown in SimpleITK
>>>>>>ImageRegistrationMethod_MetricEvaluate:
>>>>>>..\\..\\..\\..\\..\\SimpleITK\\Code\\Registration\\src\\sitkImageRegi
>>>>>>st
>>>>>>rat
>>>>>>ionMethod.cxx:862:\nsitk::ERROR:
>>>>>>Filter does not support fixed image type: vector of 8-bit unsigned
>>>>>>integer"}
>>>>>>
>>>>>>What's wrong ?
>>>>>>What is the simplest way to get similarity value of two image files ?
>>>>>>
>>>>>>--
>>>>>>Best regards,
>>>>>>Oleg Subachev
>>>>>>
>>>>>>On Tue, Nov 17, 2015 at 6:41 PM, Bradley Lowekamp
>>>>>><blowekamp at mail.nih.gov> wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> You should look into SimpleITK's
>>>>>>>ImageRegistrationMethod::MetricEvaluate( Image, Image ) member
>>>>>>>function.
>>>>>>>
>>>>>>> Here is a Python example of using the method, C# should be similar:
>>>>>>>
>>>>>>>
>>>>>>>http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/63_Re
>>>>>>>gi
>>>>>>>str
>>>>>>>ation_Initialization.html
>>>>>>>
>>>>>>> HTH,
>>>>>>> Brad
>>>>>>>
>>>>>>> On Nov 17, 2015, at 8:24 AM, Oleg Subachev <osubachev at gmail.com>
>>>>>>>wrote:
>>>>>>>
>>>>>>>> I need to get similarity metrics for 2D images under .NET.
>>>>>>>> According to ITK documentation
>>>>>>>> (http://www.itk.org/Doxygen/html/ImageSimilarityMetricsPage.html)
>>>>>>>> there are several Image To Image metrics available.
>>>>>>>> ITK itself contains corresponding methods.
>>>>>>>> But I cannot find those methods in SimpleITK :-(
>>>>>>>> There is SimpleITK.NormalizedCorrelation(Image, Image, Image)
>>>>>>>>method,
>>>>>>>> but it seems to have nothing with similarity metrics.
>>>>>>>>
>>>>>>>> How to get to get image similarity metrics under .NET ?
>>>>>>>>
>>>>>>>> --
>>>>>>>> Best regards,
>>>>>>>>
>>>>>>>> Oleg Subachev
>>>>>>>> _______________________________________________
>>>>>>>> Community mailing list
>>>>>>>> Community at itk.org
>>>>>>>> http://public.kitware.com/mailman/listinfo/community
>>>>>>>
>>>>>>_______________________________________________
>>>>>>Community mailing list
>>>>>>Community at itk.org
>>>>>>http://public.kitware.com/mailman/listinfo/community
>>>>>
>>>_______________________________________________
>>>Community mailing list
>>>Community at itk.org
>>>http://public.kitware.com/mailman/listinfo/community
>_______________________________________________
>Community mailing list
>Community at itk.org
>http://public.kitware.com/mailman/listinfo/community



More information about the Community mailing list